我将一个表放在一起作为数据库。我正在尝试编写一个宏来搜索我的表中的“系统大小”列以查找“2500”,然后搜索“标准”列以查找“标准”,然后搜索“类别”列以查找“FL”然后我想要复制该值选择项目列,该列与这些值在另一个工作表中找到的行相关。例如,宏将在列E(系统大小)中搜索所有“2500”,然后它将在列F(标准)中搜索所有“标准”,然后它将在列G(类别)中搜索所有“FL”。然后,我希望它为列C(选择项)中的值复制满足这些要求的每一行并将其粘贴到另一个工作表。以下是我到目前为止的代码,但我只能搜索一个单元而不是整个列。可能有更好的方法,但这是我找到的唯一方法。
Sub ImDoingMyBest()
'
' ImDoingMyBest Macro
'
'
If Sheets("Database").Range("E2").Value Like "*2500*" Then
Sheets("Database").Range("C2").Copy
Sheets("Quote Sheet").Select
Range("B26").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
End If
End Sub
答案 0 :(得分:0)
搜索整个列的方法是使用for循环;例如:
For i = 1 To 10000
If Sheets("Database").Range("E" & i).Value Like "*2500*" Then
Sheets("Database").Range("C" & i).Copy
...
...
End If
Next i
或者(和我的偏好)使用单元格(行,列)格式而不是Range - 这可以避免连接Range引用。这需要
Range("E" & i)
并改为
Cells(i, 5)
这是更简洁的代码(IMO)。
答案 1 :(得分:0)
跟进Siddarth Rout的评论,下面的代码使用Autofilter来隔离符合条件的“数据库”表中的行,然后将C列中的相应值复制到从名为C26的单元格B26开始的范围内“报价单”。
Sub FilterAndCopy()
Dim dataWs As Worksheet
Dim copyWs As Worksheet
Dim totRows As Long
Dim lastRow As Long
Set dataWs = Worksheets("Database")
Set copyWs = Worksheets("Quote Sheet")
With dataWs
.AutoFilterMode = False
With .Range("C:G")
.AutoFilter Field:=3, Criteria1:="2500"
.AutoFilter Field:=4, Criteria1:="Standard"
.AutoFilter Field:=5, Criteria1:="FL"
End With
End With
totRows = dataWs.Range("C:C").Rows.count
lastRow = dataWs.Range("C" & totRows).End(xlUp).Row
dataWs.Range("C2:C" & lastRow).Copy
copyWs.Range("B26").PasteSpecial Paste:=xlPasteValues
dataWs.AutoFilterMode = False
End Sub