0

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

2 回答 2

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

或者(和我的偏好)使用 Cells( row , column ) 格式而不是 Range - 这避免了连接 Range 引用。这需要

Range("E" & i)

并更改为

Cells(i, 5)

这是更整洁的代码(IMO)。

于 2013-02-15T17:58:25.597 回答
0

跟进 Siddarth Rout 的评论,以下代码使用 Autofilter 来隔离“数据库”表中符合您的条件的行,然后将 C 列中的相应值复制到名为“报价表”的表的单元格 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
于 2013-02-17T05:29:59.563 回答