- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2025-1-10
|
14#
發表於 2021-8-27 16:16
| 只看該作者
本帖最後由 samwang 於 2021-8-27 16:18 編輯
回復 13# sillykin
相同: V~Y的結果是由"人工名冊"和"會計名冊"產出依據條件一樣(戶名+查詢日)
不相同: 條件如上,結果AA~AD欄
但也需要A-D欄位的複製及排序 >> 這無法寫,因為沒有規則
Sub test()
Dim Arr, Brr(), Crr(), xD, xD1, T$, i&, n%, n1%
Set xD = CreateObject("Scripting.Dictionary")
Set xD1 = CreateObject("Scripting.Dictionary")
Arr = Range([人工名冊!a1], [人工名冊!c65536].End(3))
ReDim Brr(1 To UBound(Arr), 1 To 4) '相同
ReDim Crr(1 To UBound(Arr), 1 To 4) '不相同
For i = 2 To UBound(Arr)
T = Arr(i, 3) & "_" & Arr(i, 1)
xD(T) = Array(Arr(i, 1), Arr(i, 3))
Next
Arr = Range([會計名冊!a1], [會計名冊!c65536].End(3))
For i = 2 To UBound(Arr)
T = Arr(i, 2) & "_" & Arr(i, 3)
xD1(T) = Array(Arr(i, 1), Arr(i, 2), Arr(i, 3))
Next
For Each ky In xD
If xD1.Exists(ky) Then
n = n + 1: Brr(n, 1) = xD(ky)(0): Brr(n, 3) = xD(ky)(1)
n = n + 1: For j = 2 To 4: Brr(n, j) = xD1(ky)(j - 2): Next
Else
n1 = n1 + 1: Crr(n1, 1) = xD(ky)(0): Crr(n1, 3) = xD(ky)(1)
End If
Next
For Each ky In xD1
If Not xD.Exists(ky) Then
n1 = n1 + 1: For j = 2 To 4: Crr(n1, j) = xD1(ky)(j - 2): Next
End If
Next
With Sheets("比對")
If n > 0 Then '相同
.[v1:y1] = Array("日期", "統一編號", "戶名", "查詢日")
.[v2].Resize(n, 4) = Brr
End If
If n1 > 0 Then '不相同
.[aa1:ad1] = Array("日期", "統一編號", "戶名", "查詢日")
.[aa2].Resize(n1, 4) = Crr
End If
End With
End Sub |
|