- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 171
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-7-15
               
|
回復 5# yuch8663
試試自己輸入日期欄位與欄數以符合任意表格比對- Sub nn()
- Dim k%, s&, j&, n%, n1%, i%, Ay(), Ar()
- Set d = CreateObject("Scripting.Dictionary") '所有日期容器
- Set d1 = CreateObject("Scripting.Dictionary") 'data1容器
- Set d2 = CreateObject("Scripting.Dictionary") 'data2容器
- n = InputBox("輸入第一個日期欄位值", , 2) '輸入第一個日期欄位
- n1 = InputBox("輸入日期欄位差", , 8) '輸入2表格日期欄位相差欄位數
- ReDim A(n1) '每個data的欄位數量
- ReDim C(n1 * 2) '2表格總欄數
- Ar = Range("A1").CurrentRegion.Offset(1).Value 'A2開始以下所有資料集合
- For k = n To UBound(Ar, 2) Step n1 * 2 '從第一個日期欄位開始,以欄位差為級距做欄位回圈
- For i = 0 To n1 Step n1 '在data1與data2的日期欄位
- For j = 1 To UBound(Ar, 1) '以列作迴圈
- d(Ar(j, k + i)) = "" '紀錄日期
- For x = 0 To n1 - 1
- A(x) = Ar(j, k + i - (n - x - 1)) '寫入暫存陣列
- Next
- If i = 0 Then d1(Ar(j, k + i)) = A '將陣列傳給字典
- If i = n1 Then d2(Ar(j, k + i)) = A '將陣列傳給字典
- Next
- Next
- For Each ky In d.keys
- If d1.exists(ky) = True And d2.exists(ky) = True Then '如果2個data容器都找到此索引
- For i = 0 To n1 * 2 - 1
- If i < n1 Then C(i) = d1(ky)(i) Else C(i) = d2(ky)(i - n1) '寫入暫存陣列
- Next
- ReDim Preserve Ay(s) '將暫存陣列傳給動態陣列
- Ay(s) = C
- s = s + 1
- End If
- Next
- Range(Cells(2, k - (n - 1)).Resize(, n1 * 2), Cells(Rows.Count, k - (n - 1)).Resize(, n1 * 2)) = "" '清除資料
- Cells(2, k - (n - 1)).Resize(s, n1 * 2) = Application.Transpose(Application.Transpose(Ay)) '寫入資料
- s = 0: Erase Ay '清空陣列
- d.RemoveAll '移除字典內容
- d1.RemoveAll '移除字典內容
- d2.RemoveAll '移除字典內容
- Next
- End Sub
複製代碼 |
|