Board logo

標題: [發問] 兩個工作表合併欄位比對標示顏色 [打印本頁]

作者: jackie-ap    時間: 2020-4-2 20:25     標題: 兩個工作表合併欄位比對標示顏色

本帖最後由 jackie-ap 於 2020-4-2 20:36 編輯

各位前輩大大

有sheet1,sheet2兩個工作表, 各有上萬筆資料, 內容會重複, 筆數資料也會增減, [說明如下]: B,C欄是數字欄, 數字大小值會重複(如sheet1表B2~B4,B30~B33, sheet2表B2~B4,B33~B36), 排列方式是沒有固定, 有些會排在後面[如如sheet1表B欄12紅色數字在B2~B4,B30~B33(位置在檔案後面), sheet2表B欄12數字在B2~B4,B33~B36(位置在檔案後面)]; D欄是數字欄, 或是空白格(如sheet1表D4,D19, sheet2表D4,D18儲存格內容是空白格無資料), , 排列方式也沒有固定 但數字不會重複; F,L欄是需要分開做比對, 儲存格資料內容有大/小寫,有些是文字, 有些是特殊字如 “:”, “-”, “_”, “(” 或 ")"……, 字數也不會完全相同和儲存格前/中/後位置,可能有一個或多個“ ” (空白字).
[希望結果]:
1.同時對sheet1,sheet2的B,C,D欄進行合併比對, 若B,C,D欄資料完全相同就對F,L欄做合併比對, 假如sheet1,sheet2表B,C,D,F,L欄資料內容完全相同, 底色不做顏色改變.
2.假如sheet1,sheet2表B,C,D,欄資料內容相同, 但F,L欄中資料內容有不同的話,將sheet1,sheet2表F,L欄儲存格顏色為黃底色(如sheet1工作表L3 (Dog:cat LLL)儲存格資料內容, 與sheet2工作表L3 (Dog:cat MMM) 儲存格是不同, 顏色就標示黃底色), 若F,L欄儲存格資料內容同時不同時就分別標示顏色為黃底色(如sheet1, sheet2工作表中第4列 F4和L4 資料是不同的).
3.假如sheet1,sheet2表B,C,D,欄合併比對資料內容是不同(如sheet1工作表B,C,D,欄合併比對儲存格資料內容分別為 “13,5,5" 但sheet2工作表B,C,D,欄儲存格沒有“13,5,x(無)"¸ 表示兩個工作表沒有符合條件, 就將F,L欄儲存格分別標示顏色為綠底色.
4.結果顯示如sheet1a,sheet2a表, 如黃底色和綠底色.

以上 懇請前輩大大協助, 謝謝!
作者: 准提部林    時間: 2020-4-3 11:13

F/L欄,
1) 符號及空格要去除再比對嗎?  
2) 英文大小寫視為相同嗎?
作者: 准提部林    時間: 2020-4-3 12:28

先做個~~
  1. Sub 比對()
  2. Dim Arr, xD, Ra As Range, Rb As Range, j%, R&, T$, SS, C%
  3. Set xD = CreateObject("Scripting.Dictionary")
  4. Arr = Sheets("Sheet1").UsedRange: Set Ra = [Sheet1!A1]
  5. For R = 2 To UBound(Arr)
  6.     T = Arr(R, 2) & "|" & Arr(R, 3) & "|" & Arr(R, 4)
  7.     xD(T) = R & "|" & Arr(R, 6) & "|" & Arr(R, 12)
  8. Next
  9. '------------------------------
  10. Arr = Sheets("Sheet2").UsedRange: Set Rb = [Sheet2!A1]
  11. For R = 2 To UBound(Arr)
  12.     T = Arr(R, 2) & "|" & Arr(R, 3) & "|" & Arr(R, 4)
  13.     If T = "||" Then GoTo 102
  14.     SS = Split(xD(T) & "||", "|")
  15.     If Val(SS(0)) = 0 Then Union(Rb(R, 6), Rb(R, 12)).Interior.ColorIndex = 43: GoTo 102
  16.     For j = 1 To 2
  17.         C = Array(0, 6, 12)(j)
  18.         If SS(j) <> Arr(R, C) Then
  19.            Ra(SS(0), C).Interior.ColorIndex = 6
  20.            Rb(R, C).Interior.ColorIndex = 6
  21.         End If
  22.     Next j
  23.     xD.Remove T
  24. 102: Next
  25. '------------------------------
  26. For Each SS In xD.items
  27.    R = Val(Split(SS & "||", "|")(0))
  28.    If R > 0 Then Union(Ra(R, 6), Ra(R, 12)).Interior.ColorIndex = 43
  29. Next
  30. End Sub
複製代碼
[attach]31856[/attach]


=============================
作者: jackie-ap    時間: 2020-4-3 22:37

回復 3# 准提部林
版主 非常謝謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)