標題:
[發問]
如何自訂拷貝次數
[打印本頁]
作者:
luke
時間:
2012-4-3 22:30
標題:
如何自訂拷貝次數
各位大大
小弟把常用資料作成資料列選單放在sheet2表資料區,
我想在sheet1表B1至B5去設定拷貝次數,然後複製貼上
煩請先進指導
[attach]10293[/attach]
作者:
Hsieh
時間:
2012-4-3 22:56
回復
1#
luke
Sub nn()
With sheet2
Set Rng = .Range(.[A1], .[A1].End(xlDown))
k = 11
For Each a In sheet1.[B1:B5]
mystr = "SUMPRODUCT((left(sheet2!" & Rng.Address & ",2)=""" & a.Offset(, -1) & """)*1)"
Set c = .Columns("A:A").Find(a.Offset(, -1), after:=.[A65536], lookat:=xlPart)
r = Evaluate(mystr)
For i = 1 To a
c.Resize(r, 10).Copy sheet1.Cells(k, 1)
k = k + r
Next
Next
End With
End Sub
複製代碼
作者:
register313
時間:
2012-4-3 23:08
回復
1#
luke
附檔中,功能解說非常清楚,給你按一個讚
Sub Macro()
RX = 0
sheet1.[A11:J65536].Clear
For r = 1 To 5
N = 0
Do While N < sheet1.Cells(r, 2)
sheet2.Range("A" & r * 4 - 3).Resize(4, 10).Copy sheet1.[A11].Offset(RX, 0)
N = N + 1
RX = RX + 4
Loop
Next r
End Sub
複製代碼
作者:
luke
時間:
2012-4-4 00:12
回復
3#
register313
測試OK
非常謝謝 register313 和稱讚
PS: 我想將sheet2中AA-EE資料區實際列數作修改,如AA資料區3列,BB資料區5列,其他假設各為4列不變如附檔,
煩請大大指導
[attach]10294[/attach]
作者:
luke
時間:
2012-4-4 00:15
回復
2#
Hsieh
測試OK
謝謝H版大
作者:
register313
時間:
2012-4-4 09:37
回復
4#
luke
Hsieh超版#2之程式即是:直接判斷SHEET2 A欄有幾個AA,幾個BB...,作為列數之判斷
若資料區之資料確為AA01 AA02 AA03...BB01 BB01 BB03....之規則
請使用Hsieh超版#2之程式即可
若資料區之資料無規則,則可使用下列程式,但SHEET1 D1~D5必須輸入
Sub Macro()
RX = 0
Y = 1
Sheet1.[A11:J65536].Clear
For r = 1 To 5
N = 0
Do While N < Sheet1.Cells(r, 2)
Sheet2.Range("A" & Y).Resize(Cells(r, "D"), 10).Copy Sheet1.[A11].Offset(RX, 0)
N = N + 1
RX = RX + Cells(r, 4)
Loop
Y = Y + Cells(r, 4)
Next r
End Sub
複製代碼
作者:
luke
時間:
2012-4-4 11:52
回復
6#
register313
謝謝 register313, 程式測試OK
PS: Hsieh超版的#2程式SHEET2中 A欄有些問題,
1.若資料區無AA,BB...EE關鍵字會出現"沒有設定物件變數或With區塊變數"
2.若A欄中任一儲存格有"空白"儲存格會出現錯誤並顯示400
3.A欄若任一資料區所對應該區最後一列不是關鍵字, 該列將無法拷貝資料.
以上說明
作者:
GBKEE
時間:
2012-4-4 12:35
回復
4#
luke
Option Explicit
Sub Ex()
Dim E As Range, xf As Range, xi As Integer
With Sheet1
.[A11:J65536].Clear
For Each E In Sheet1.[a1:a5]
Set xf = Sheet2.[A:A].Find(E, lookat:=xlPart, After:=Sheet2.[A65536])
Set xf = xf.Resize(E.Cells(1, 4), 10)
For xi = 1 To E.Cells(1, 2)
With .Cells(Rows.Count, "A").End(xlUp).Offset(1)
If .Row < 11 Then xf.Copy Sheet1.[a11] Else xf.Copy .Cells
End With
Next
Next
End With
End Sub
複製代碼
作者:
Hsieh
時間:
2012-4-4 18:09
回復
7#
luke
Sub ex()
Dim Ay()
Set d = CreateObject("Scripting.Dictionary")
With sheet2
For Each a In .Range(.[A1], .[A65536].End(xlUp))
If IsEmpty(d(Left(a, 2))) Then
Set d(Left(a, 2)) = a.Resize(, 10)
Else
Set d(Left(a, 2)) = Union(d(Left(a, 2)), a.Resize(, 10))
End If
Next
End With
r = 11
With sheet1
.Range("A11").CurrentRegion.Clear
For Each a In .[B1:B5]
If d.exists(a.Offset(, -1).Value) = True Then
For i = 1 To a
d(a.Offset(, -1).Value).Copy .Cells(r, 1)
r = .Cells(11, 1).End(xlDown).Row + 1
Next
End If
Next
End With
End Sub
複製代碼
作者:
luke
時間:
2012-4-4 20:58
回復
8#
GBKEE
程式測試OK
小弟原本構思是從sheet2表去自訂5-10個資料區當作菜單, 每個資料區有10欄(A:J)以3-5列為乙區即每列10個儲存格*列數 (例如: AA資料區所代表AA01-AA30僅為該資料區所在代號位置), 也就是sheet2表A欄中有可能是空白, 文字公式來表示.
以下是測試(見第1點)說明:
1.假設sheet2表(檔案TEST5AA.rar), A欄BB資料區有5列,若把BB21和BB41即A6和A8同時改為空白, 拷貝過程中只會出現4列資料列, 無法拷貝5列資料列.
2.小弟轉述給register313中所提第3點“A欄若任一資料區所對應該區最後一列不是關鍵字, 該列將無法拷貝資料”是指H版大所給第1次程式有關鍵字限制,例如刪除如前項A8儲存格會造成無法拷貝該區(即sheet2表第8列)資料情形.
3.我想要的結果: 各資料區不管是何種格式不需去考慮關鍵字, 只需以sheet2表各資料區實際列數來拷貝即可.
謝謝GBKEE 版大
作者:
luke
時間:
2012-4-4 20:58
回復
9#
Hsieh
程式測試無錯誤
(說明見上)
謝謝H超版大
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)