返回列表 上一主題 發帖

資料比對

感謝samwang的回覆,小弟在此謝謝協助
samwang程式試過答案正確。
是否能利用人工名冊、會計名冊先抓取到(比對區)A~D欄位在依『戶名』排序後,在執行後續程序呢??

TOP

本帖最後由 samwang 於 2021-8-26 16:32 編輯

回復 4# sillykin

請測試看看,謝謝
另外,您提供資料不相符合的結果和我的結果不一樣,請再確認,謝謝

Sub test()
Dim Arr, xD, Brr(), Crr(), T$, T1$, n%, n1%, i&, j%
Arr = Range([比對!a1], [比對!d65536].End(3))
Set xD = CreateObject("Scripting.Dictionary")
ReDim Brr(1 To UBound(Arr), 1 To 4)
ReDim Crr(1 To UBound(Arr), 1 To 4)
n = 1
For i = 2 To UBound(Arr)
    If i = UBound(Arr) Then GoTo 99
    If Arr(i, 1) <> "" And Arr(i + 1, 1) = "" Then
        T = Arr(i, 1) & "_" & Arr(i, 3)
        For i2 = i + 1 To UBound(Arr)
            If Arr(i2, 4) <> "" Then
                T1 = Arr(i2, 4) & "_" & Arr(i, 3)
                If T = T1 Then
                    Brr(n, 1) = Arr(i, 1)
                    Brr(n, 3) = Arr(i, 3)
                    Brr(n + 1, 2) = Arr(i2, 2)
                    Brr(n + 1, 3) = Arr(i2, 3)
                    Brr(n + 1, 4) = Arr(i2, 4)
                    n = n + 2: xD(T1) = 1: Exit For
                End If
            Else
                Exit For
            End If
        Next i2
    End If
99: Next i

For i = 2 To UBound(Arr)
    If Arr(i, 1) <> "" Then
        T = Arr(i, 1) & "_" & Arr(i, 3)
    Else
        T = Arr(i, 4) & "_" & Arr(i, 3)
    End If
    If xD(T) <> 1 Then
        n1 = n1 + 1
        For j = 1 To 4: Crr(n1, j) = Arr(i, j): Next
    End If
Next
Sheets("比對").[h2].Resize(n, 4) = Brr
Sheets("比對").[o2].Resize(n1, 4) = Crr
End Sub

TOP

回復 4# sillykin


請問如圖片紅色那筆有需要列嗎?

擷取.PNG (88.02 KB)

擷取.PNG

TOP

本帖最後由 sillykin 於 2021-8-26 11:37 編輯

此檔案有三張工作表(人工名冊(筆數約千筆)、會計名冊(筆數約百筆等)、比對區)
比對區工作表單說明如下
A~D欄位是將二張工作表(人工名冊及會計名冊)依『戶名』排序
將A~D欄位排序結果,在挑出『查詢日』(D欄)跟『日期』(A欄)--(  相符的值  )複制到H~K欄位
將A~D欄位排序結果,在挑出『查詢日』(D欄)跟『日期』(A欄)--(不相符的值)複制到O~R欄位

TOP

回復 2# sillykin


不好意思,看不太懂您的需求,可否請再說明詳細一點嗎? 謝謝

TOP

請問這有辦法處理嗎?

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題