返回列表 上一主題 發帖

[發問] 如何比對Data相異者 ,均copy 彙整到sheets(1)中

本帖最後由 GBKEE 於 2015-4-7 15:58 編輯

回復 1# yangjie
1:100 多筆資料(第一欄至第十二欄) 導入字典物件
2:比對 1000多筆資料(第一欄至第十二欄)不在字典物件的導入陣列中
  1. Option Explicit
  2. Sub EX()
  3.     Dim d As Object, R As Range, S As String, AR(), i As Integer
  4.     Set d = CreateObject("scripting.dictionary")  '設立字典物件
  5.     ReDim Preserve AR(i)
  6.     AR(i) = Sheets("100多筆").UsedRange.Rows(1).Value
  7.     For Each R In Sheets("100多筆").UsedRange.Rows
  8.         S = Join(Application.Transpose(Application.Transpose(R.Value)), ",")
  9.         d(S) = ""
  10.     Next
  11.     For Each R In Sheets("1000多筆").UsedRange.Rows
  12.         S = Join(Application.Transpose(Application.Transpose(R.Value)), ",")
  13.         If d.exists(S) = False Then  '字典物件的Key不存在
  14.             i = i + 1
  15.             ReDim Preserve AR(i)
  16.             AR(i) = R.Value
  17.         End If
  18.     Next
  19.     AR = Application.Transpose(Application.Transpose(AR))
  20.     Sheets("Sheet3").[a1].Resize(i + 1, UBound(AR, 2)) = AR
  21. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# yangjie
UBound(AR)  陣列第1維的元素上限索引值,
UBound(AR, 2)  陣列第2維的元素上限索引值
  1. Option Explicit
  2. Sub EX()
  3.     Dim d As Object, R As Range, S As String, AR(), i As Integer, ii As Integer
  4.     Set d = CreateObject("scripting.dictionary")  '設立字典物件
  5.     If Application.CountA(Sheets("Sheet3").Cells) = 0 Then
  6.      '3.Sheets("Sheet3").[a1].Resize(i + 1, UBound(AR, 2)) = AR   如何修改為最後一列
  7.         ReDim Preserve AR(i)
  8.         AR(i) = Sheets("100多筆").UsedRange.Cells(1).Resize(, 12).Value
  9.         i = i + 1
  10.     End If
  11.     '1.因為 欄位有21欄但判讀相異準則1~12欄 copy是21欄,dictionary 應如何寫
  12.     For Each R In Sheets("100多筆").UsedRange.Columns(1).Resize(, 12).Rows
  13.         S = Join(Application.Transpose(Application.Transpose(R.Value)), ",")
  14.         '是否有更好之方式? 若是判讀相異準則為第一第四第九第十欄
  15.         'S = R.Cells(1, 1) & R.Cells(1, 4) & R.Cells(1, 9) & R.Cells(1, 10)
  16.         'S = R(1, 1) & R(1, 4) & R(1, 9) & R(1, 10)
  17.         d(S) = ""
  18.     Next
  19.     For Each R In Sheets("1000多筆").UsedRange.Columns(1).Resize(, 12).Rows
  20.         S = Join(Application.Transpose(Application.Transpose(R.Value)), ",")
  21.         'S = R.Cells(1, 1) & R.Cells(1, 4) & R.Cells(1, 9) & R.Cells(1, 10)
  22.         
  23.         If d.exists(S) = False Then  '字典物件的Key不存在
  24.         'If d(1).exists(S) = False Then  '字典物件的Key不存在
  25.         '2 其中d(1)是甚麼?  我的筆誤,原本d要設為陣列,
  26.             ReDim Preserve AR(i)
  27.             AR(i) = R.Value
  28.             i = i + 1
  29.         End If
  30.     Next
  31.     AR = Application.Transpose(Application.Transpose(AR))
  32.     'Sheets("Sheet3").[a1].Resize(i + 1, UBound(AR, 2)) = AR
  33.     '3.Sheets("Sheet3").[a1].Resize(i + 1, UBound(AR, 2)) = AR   如何修改為最後一列
  34.     With Sheets("Sheet3")
  35.        .Cells(.Rows.Count, "a").End(xlUp).Offset(Abs(Application.CountA(.Range("A:A")) > 1)).Resize(i, UBound(AR, 2)) = AR
  36.     End With
  37. End Sub
複製代碼
為何要兩次轉置
如圖


感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

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