返回列表 上一主題 發帖

[發問] 在同一列同時比對兩欄資料方法

回復 1# 假面超人
進階篩選即可
play.gif
學海無涯_不恥下問

TOP

回復 9# 假面超人

進階篩選很容易達成
play.gif
如果堅持寫迴圈
  1. Sub ex()
  2. Dim Ar()
  3. With Sheet1
  4. For Each a In .Range(.[A2], .[A2].End(xlDown))
  5.    With Sheet2
  6.       For Each b In .Range(.[A2], .[A2].End(xlDown))
  7.          If b = a Then
  8.          ReDim Preserve Ar(s)
  9.          Ar(s) = Array(b.Value, b.Offset(, 1).Value, b.Offset(, 2).Value, b.Offset(, 4).Value)
  10.          s = s + 1
  11.          End If
  12.       Next
  13.    End With
  14.    Sheet3.[A65536].End(xlUp).Offset(1).Resize(s, 4) = Application.Transpose(Application.Transpose(Ar))
  15.    Erase Ar
  16.    s = 0
  17. Next
  18. End With
  19. End Sub
複製代碼
學海無涯_不恥下問

TOP

本帖最後由 Hsieh 於 2012-8-6 18:48 編輯

回復 17# 假面超人
是要照Sheet1的排序嗎?
  1. Sub nn()
  2. Dim Ar(), A As Range, B As Range
  3. With Sheets("Sheet1")
  4. For Each A In .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))  第一頁A2以下做迴圈
  5.   For Each Sh In Sheets(Array("Sheet2", "Sheet3")) '原資料所在工作表
  6.   With Sh
  7.      For Each B In .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))  '在A2以下儲存格做迴圈
  8.         If B = A Then  '跟第一頁A欄儲存格做比對,如果符合
  9.            ReDim Preserve Ar(s)  '擴大陣列
  10.            Ar(s) = Array(B.Value, B.Offset(, 1).Value, B.Offset(, 2).Value, B.Offset(, 4).Value)  '將值寫入陣列
  11.            s = s + 1  '準備下一次擴大陣列
  12.         End If
  13.      Next
  14.   End With
  15.   Next
  16.   With Sheets("最終結果")
  17.      If s > 0 Then .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(s, 4).Value = Application.Transpose(Application.Transpose(Ar))  '如果陣列有寫入,就將陣列寫入結果
  18.      Erase Ar: s = 0  '清空陣列,並準備下一個陣列初始大小
  19.   End With
  20. Next
  21. End With
  22. End Sub
複製代碼
學海無涯_不恥下問

TOP

本帖最後由 Hsieh 於 2012-8-6 22:38 編輯

回復 23# 假面超人
  1. Sub nn()
  2. Dim Ar(), A As Range, B As Range
  3. With Sheets("Sheet1")
  4. For Each A In .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))  '第一頁A2以下做迴圈
  5.   For Each Sh In Sheets(Array("Sheet2", "Sheet3")) '原資料所在工作表
  6.   With Sh
  7.      For Each B In .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))  '在A2以下儲存格做迴圈
  8.         If B = A Then  '跟第一頁A欄儲存格做比對,如果符合
  9.            ReDim Preserve Ar(s)  '擴大陣列
  10.            Ar(s) = Array(B.Value, B.Offset(, 1).Value, B.Offset(, 2).Value, B.Offset(, 4).Value)  '將值寫入陣列
  11.            s = s + 1  '準備下一次擴大陣列
  12.         End If
  13.      Next
  14.   End With
  15.   Next
  16.   With Sheets("最終結果")
  17.      If s > 0 Then .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(s, 4).Value = Application.Transpose(Application.Transpose(Ar)) Else _
  18. .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 4).Value =Array(A.value,"","","")  '如果陣列有內容,就將陣列寫入結果,否則寫入一列空白
  19.      Erase Ar: s = 0  '清空陣列,並準備下一個陣列初始大小
  20.   End With
  21. Next
  22. End With
  23. End Sub
複製代碼
17列的If陳述式,因為If...Then...在同一行所以不須End If詳細語法請參考VBA說明
學海無涯_不恥下問

TOP

        靜思自在 : 屋寬不如心寬。
返回列表 上一主題