Board logo

標題: [發問] 請教如何讓VBA自動比對相同數值後,複製到它處? [打印本頁]

作者: jonn0510    時間: 2012-8-5 08:56     標題: 請教如何讓VBA自動比對相同數值後,複製到它處?

請教老師:
儲存格E 若等於 儲存格C 時,則複製("B:H") 到M3 如何用VBA來判斷?謝謝
如附件
B      C    D     E      F      G    H
1        17        -6        06        07        16        20
2        14        -6        06        11        16        20
3        26        -5        26        06        16        20
4        20        -9        06        16        22        27
5        17        -6        06        07        16        27
6        17        -6        17        16        20        22
7        -9        -6        06        06        16        31
------------------------------------
B      C    D     E      F      G    H
3        26        -5        26        06        16        20
6        17        -6        17        16        20        22
作者: kimbal    時間: 2012-8-5 13:02

  1. Sub test()
  2.     Dim outRow As Long
  3.     outRow = 0
  4.     For Each C In Range(Range("C3"), Range("C3").End(xlDown))
  5.         If C.Value = C.Offset(0, 2) Then
  6.             Range(C.Offset(0, -1), C.Offset(0, 5)).Copy
  7.             Range("M3").Offset(outRow).PasteSpecial
  8.             outRow = outRow + 1
  9.         End If
  10.     Next
  11. End Sub
複製代碼
其實,可以考慮一下用篩選 復制方法, 不用慢慢對代碼
作者: jonn0510    時間: 2012-8-5 20:31

回復 2# kimbal
kimbal老師:
感謝您的指導,謝謝您
另外您提到"其實,可以考慮一下用篩選 復制方法, 不用慢慢對代碼".原本有打算用篩選,但是資料很龐大,且經常會用到,於是想一勞永逸.所以才會上網請教.

非常感謝您
作者: diabo    時間: 2012-8-6 00:35

回復 3# jonn0510

資料龐大可以考慮 SQL 的做法  
記得
1. 設定引用項目 Microsoft ActiveX Data Objects 2.8 Library
2. Sheet1的B2:H2 空白的補上欄位名稱...
  1. Sub test()

  2. '建立ADODB Connection物件變數
  3. Dim cn As ADODB.Connection
  4. Set cn = New ADODB.Connection

  5. '建立ADODB Recordset物件變數
  6. Dim rs As ADODB.Recordset
  7. Set rs = New ADODB.Recordset
  8.          
  9. '建立資料庫連線
  10. With cn
  11.      .Provider = "MSDASQL"
  12.      .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
  13.       "DBQ=" & ThisWorkbook.FullName & ";"
  14.      .Open
  15. End With

  16. 'SQL字串
  17. mySQL = "Select * FROM [Sheet1$B2:H25] WHERE [主]=[副]"
  18.      
  19. '解決無法釋放記憶體的BUG
  20. ThisWorkbook.ChangeFileAccess xlReadOnly
  21. Set rs = cn.Execute(mySQL)
  22. ThisWorkbook.ChangeFileAccess xlReadWrite
  23.          
  24. '將結果COPY到指定位置
  25. Sheets("Sheet1").Range("M12").CopyFromRecordset rs

  26. End Sub
複製代碼

作者: jonn0510    時間: 2012-8-19 20:47

回復 4# diabo

diabo大大:
不好意思,這麼久才回覆,因為小弟不太能理解 所謂的 SQL 的做法,因此去查了一下書.
可惜有看沒有懂!不過還是要感謝您願意提供方案.謝謝您




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