返回列表 上一主題 發帖

資料比對

本帖最後由 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

回復 11# waterfox


    Sorry~ 最近工作比較忙~ 所以~ 比較沒有時間上來~
    您的問題主要是將[Stock on hand]拋轉到[Summary]中~
    可試試附檔~  但是還有一個第方沒有寫唷~
    就是你在[Stock on hand] 有一個項目99 在 [Summary] 是沒有的
    因為不知道你整個操作的邏輯~ 所以~ 先完成針對將資料拋轉~
    再來一步一步的來調整~ 你所需要的~
      record-TEST.rar (81.28 KB)
學習才能提升自己

TOP

回復 13# waterfox

  這是我上載檔案中的程式碼~
  1. Private Sub CommandButton1_Click()   '資料拋轉
  2. '========  A =>每一列跑的次數  ====================
  3. A = Sheet4.Range("IV2").End(xlToLeft).Column
  4. A = (A - 4) / 3
  5. If A - Int(A) > 0 Then
  6.    MsgBox "資料欄位有誤"
  7.    Exit Sub
  8. End If
  9. A = A - 1
  10. '========  B => 總共要跑的筆數  ====================
  11. B = Sheet4.Range("A65536").End(xlUp).Row

  12. For I = 3 To B
  13.     Set C = Sheet2.Columns("B:B").Find(Sheet4.Range("B" & I))
  14.    
  15.     If Not C Is Nothing Then
  16.     C = Sheet2.Columns("B:B").Find(Sheet4.Range("B" & I)).Row

  17.     For J = 0 To A    '(EX. 0->11 =12次)
  18.         D = Sheet4.Cells(I, 7 + J * 3)
  19.         If D = "" Then
  20.         Else
  21.         Do Until Sheet2.Range("F" & C + K) = ""
  22.            If Sheet2.Range("F" & C + K) = D Then
  23.               If Sheet4.Cells(I, 5 + J * 3) > 0 Then
  24.               Sheet2.Cells(C + K, 7 + J) = Sheet4.Cells(I, 5 + J * 3)
  25.               End If
  26.               If Sheet4.Cells(I, 6 + J * 3) > 0 Then
  27.               Sheet2.Cells(C + K, 21 + J) = Sheet4.Cells(I, 6 + J * 3)
  28.               End If
  29.               P = 1
  30.               Exit Do
  31.            End If
  32.            K = K + 1
  33.         Loop
  34.         If P = 0 Then
  35.            Sheet2.Rows(C + K).Insert Shift:=xlDown
  36.            Sheet2.Range("F" & C + K) = Sheet4.Cells(I, 7 + J * 3)
  37.            If Sheet4.Cells(I, 5 + J * 3) > 0 Then
  38.             Sheet2.Cells(C + K, 7 + J) = Sheet4.Cells(I, 5 + J * 3)
  39.            End If
  40.            If Sheet4.Cells(I, 6 + J * 3) > 0 Then
  41.             Sheet2.Cells(C + K, 21 + J) = Sheet4.Cells(I, 6 + J * 3)
  42.            End If
  43.         End If
  44.         End If
  45.     K = 0
  46.     P = 0
  47.     Next
  48.     End If
  49. Next

  50. End Sub
複製代碼
學習才能提升自己

TOP

        靜思自在 : 受人點水之恩,須當湧泉以報。
返回列表 上一主題