返回列表 上一主題 發帖

資料比對

資料比對

請問各位, 如何將一張worksheet與另一張worksheet資料作比對... 如第一張sheet column A and coumn B內資料在第二張sheet 的資料是相同, 就在第二張sheet的column D = 第一張sheet 的column C, 但如果找不到相同資料, 那就在第二張sheet的最尾一行加上這行, 例如

sheet  1
A          B         C
1.    ABC      123
2.   DEC       234
3.   DDF      123
總數有100行

sheet  2
A.       B.        C            D
1.      BBB     234
2.      DEC    222      234
3.      FFF     333
總數有200行

謝謝各位幫忙....

回復 1# waterfox
  1. Sub XX()
  2. Set d = CreateObject("scripting.dictionary")
  3. For Each A In Sheet1.Range("A1:A" & [A1].End(xlDown).Row)
  4.   d(A & "," & A.Offset(0, 1)) = A.Offset(0, 2)
  5. Next
  6. For Each A In Sheet2.Range("A1:A" & [A1].End(xlDown).Row)
  7.   If d.Exists(A & "," & A.Offset(0, 1)) Then
  8.      A.Offset(0, 3) = d(A & "," & A.Offset(0, 1))
  9.      d.Remove (A & "," & A.Offset(0, 1))
  10.   End If
  11. Next
  12. Ar = d.keys
  13. For I = 0 To UBound(Ar)
  14.   Sheet2.[A1].End(xlDown).Offset(1, 0).Resize(1, 2) = Split(Ar(I), ",")
  15. Next I
  16. Sheet2.[C1].End(xlDown).Offset(1, 0).Resize(d.Count, 1) = Application.Transpose(d.items)
  17. End Sub
複製代碼

TOP

多謝你的回覆呀... 但如果有好多行都不在sheet 2內... 你以上的程式是如果Sheet1 有幾行是在sheet 2找不到的, 那只將找不到的第一行加到sheet 2最尾... 如果要將所有在sheet 1都找不到都加在sheet 2, 那如何處理... 另外如果除了column A, column B 要match 外... 如果要column C and column D都要match 那又如何... 謝謝你呀resigter 313.

TOP

回復 3# waterfox

但如果有好多行都不在sheet 2內... 你以上的程式是如果Sheet1 有幾行是在sheet 2找不到的, 那只將找不到的第一行加到sheet 2最尾... 如果要將所有在sheet 1都找不到都加在sheet 2, 那如何處理
=>原先的程式就是將sheet 1找不到都加在sheet 2的最尾
   sheet 1有3行在sheet 2是找不到的,就在sheet 2的最尾加上sheet 1的3行
   sheet 1有5行在sheet 2是找不到的,就在sheet 2的最尾加上sheet 1的5行


... 另外如果除了column A, column B 要match 外... 如果要column C and column D都要match 那又如何... 謝謝你呀resigter 313.
=>是不是先上傳你的excel檔案,比較知道的檔案的結構

TOP

OK.. 先謝謝... 我遲一點上傳給你看..

TOP

[版主管理留言]
  • Hsieh(2012-5-16 08:18): 上傳檔案請壓縮後上傳,並符合檔案大小與格式

以下是每個月都有一張存貨表, 例如1月及2月
[attach]10963[/attach]
[attach]10964[/attach]

要將每個月的存貨自動到整年的summary sheet, 但每個item都有不同的入貨價錢, 亦會有新的項目新加的, 就加在該第一column的item number, 例如 (1). 代表Rose, 但幾個月後(1). Rose 會用完存貨後, (1) 會用在其他新的產品上, 例如在三月份 (1) 可能被 另一產品代替, 但(1) Rose 又不可刪除. 所以可否在(1) Rose 以下自動加上一行並加入新的產品名稱及儲貨記錄?
[attach]10965[/attach]

謝謝你的幫忙..

TOP

Jan12.zip (121.48 KB)
Feb12.zip (111.66 KB)
Summary.zip (150.77 KB)

thanks

TOP

本帖最後由 hugh0620 於 2012-5-16 10:12 編輯

模擬的環境在同一個EXCEL檔中
SHEET1
A             B
ABC      123
DEC      234
DDF     123

SHEET2
A            B
BBB      234
DEC     222
DDF    234
  1. Sub EX()
  2. A = Sheet1.Range("A65536").End(xlUp).Row
  3. For I = 1 To A
  4.     Set F = Sheet2.Columns("A:A").Find(Sheet1.Range("A" & I))  '先比對A欄位是否
  5.     If Not F Is Nothing Then                                   '判斷式:F找不到的話
  6.        F = Sheet2.Columns("A:A").Find(Sheet1.Range("A" & I)).Row
  7.        Set F1 = Sheet2.Range("A" & F & ":A" & F).Find(Sheet1.Range("B" & I))
  8.        If F1 Is Nothing Then                                   '再判斷B值不存在就在下一欄新增
  9.           F2 = Sheet2.Range("IV" & F).End(xlToLeft).Offset(0, 1).Column
  10.           Sheet2.Cells(F, F2) = Sheet1.Range("B" & I)
  11.        End If
  12.     Else                                                      '當Sheet2找不到sheet1 A欄位資料時,就在最下面新增
  13.        A2 = Sheet2.Range("A65536").End(xlUp).Row
  14.        Sheet2.Range("A" & A2) = Sheet1.Range("A" & I)
  15.        Sheet2.Range("B" & A2) = Sheet1.Range("B" & I)
  16.     End If
  17. Next
  18. End Sub
複製代碼
學習才能提升自己

TOP

回復 7# waterfox

    建議您~ 資料的架構再調整一下會比較好唷~
                     資料庫的觀念~
                     每個月份的欄位都一樣~ 放在同一個SHEET~ 多加一個欄位[月份]來區別~
                     跟你區分成很多活頁來儲放資料~ 結果是一樣的~
                    但在處理上相對比較好處理一些~
學習才能提升自己

TOP

謝謝你的指導, 我明天會再嘗試一下.. 感激

TOP

        靜思自在 : 滴水成河。粒米成蘿,勿輕己靈,勿以善小而不為。
返回列表 上一主題