搜索列中的每个单元格以查找特定值,并从找到该值的行中的另一个单元格复制值

时间:2013-02-15 16:58:16

标签: excel excel-vba vba

我将一个表放在一起作为数据库。我正在尝试编写一个宏来搜索我的表中的“系统大小”列以查找“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

2 个答案:

答案 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