返回列表 上一主題 發帖

[發問] 不對稱日期做比對後要如何刪除不相同的部分使之對齊資料

回復 1# yuch8663
在同一工作表直接刪除不對應資料
  1. Sub nn()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. For k = 1 To [IV1].End(xlToLeft).Column Step 4 '欄位
  4. For I = 0 To 2 Step 2 '日期欄位
  5.    For Each a In Range(Cells(1, k + I), Cells(1, k + I).End(xlDown)) '每個日期
  6.      If Application.CountIf(Cells(1, k).Resize(, 3).EntireColumn, a) > 1 Then
  7.        If IsEmpty(d(a.Value)) Then '第一次遇到日期
  8.           d(a.Value) = Array(a.Value, a.Offset(, 1).Value, a.Value, "")
  9.           Else '第二次日期
  10.           ar = d(a.Value)
  11.           ar(3) = a.Offset(, 1).Value
  12.           d(a.Value) = ar
  13.           Erase ar
  14.         End If
  15.      End If
  16.     Next
  17. Next
  18. Cells(1, k).Resize(, 4).EntireColumn = "" '清空
  19. Cells(1, k).Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items)) '寫入
  20. d.RemoveAll '移除字典內容
  21. Next
  22. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 5# yuch8663

試試自己輸入日期欄位與欄數以符合任意表格比對
  1. Sub nn()
  2. Dim k%, s&, j&, n%, n1%, i%, Ay(), Ar()
  3. Set d = CreateObject("Scripting.Dictionary") '所有日期容器
  4. Set d1 = CreateObject("Scripting.Dictionary") 'data1容器
  5. Set d2 = CreateObject("Scripting.Dictionary") 'data2容器
  6. n = InputBox("輸入第一個日期欄位值", , 2) '輸入第一個日期欄位
  7. n1 = InputBox("輸入日期欄位差", , 8) '輸入2表格日期欄位相差欄位數
  8. ReDim A(n1) '每個data的欄位數量
  9. ReDim C(n1 * 2) '2表格總欄數
  10. Ar = Range("A1").CurrentRegion.Offset(1).Value 'A2開始以下所有資料集合
  11. For k = n To UBound(Ar, 2) Step n1 * 2  '從第一個日期欄位開始,以欄位差為級距做欄位回圈
  12.    For i = 0 To n1 Step n1  '在data1與data2的日期欄位
  13.      For j = 1 To UBound(Ar, 1) '以列作迴圈
  14.       d(Ar(j, k + i)) = "" '紀錄日期
  15.       For x = 0 To n1 - 1
  16.          A(x) = Ar(j, k + i - (n - x - 1)) '寫入暫存陣列
  17.       Next
  18.       If i = 0 Then d1(Ar(j, k + i)) = A '將陣列傳給字典
  19.       If i = n1 Then d2(Ar(j, k + i)) = A '將陣列傳給字典
  20.      Next
  21.    Next
  22.    For Each ky In d.keys
  23.       If d1.exists(ky) = True And d2.exists(ky) = True Then '如果2個data容器都找到此索引
  24.       For i = 0 To n1 * 2 - 1
  25.         If i < n1 Then C(i) = d1(ky)(i) Else C(i) = d2(ky)(i - n1) '寫入暫存陣列
  26.       Next
  27.       ReDim Preserve Ay(s) '將暫存陣列傳給動態陣列
  28.       Ay(s) = C
  29.       s = s + 1
  30.       End If
  31.    Next
  32.   Range(Cells(2, k - (n - 1)).Resize(, n1 * 2), Cells(Rows.Count, k - (n - 1)).Resize(, n1 * 2)) = "" '清除資料
  33.   Cells(2, k - (n - 1)).Resize(s, n1 * 2) = Application.Transpose(Application.Transpose(Ay)) '寫入資料
  34.   s = 0: Erase Ay '清空陣列
  35.   d.RemoveAll '移除字典內容
  36.   d1.RemoveAll '移除字典內容
  37.   d2.RemoveAll '移除字典內容
  38. Next
  39. End Sub
複製代碼
學海無涯_不恥下問

TOP

        靜思自在 : 能付出愛心就是福,能消除煩惱就是慧。
返回列表 上一主題