【问题标题】:Run VBA VLOOKUP Code only on Filtered/Visible Cells仅在过滤/可见单元格上运行 VBA VLOOKUP 代码
【发布时间】:2020-06-20 00:02:47
【问题描述】:
Sub ActivityMatching()

Worksheets("AuroraData").Activate
Set lookRange = Sheets("AuroraData").Range("A2:D1000")

Worksheets("PO List").Activate
ActiveSheet.Range("CD1").AutoFilter Field:=82, Criteria1:="Yes"     //set the filter to "Yes" in Col CD
LastRow = Sheets("PO List").Cells(Rows.Count, "AK").End(xlUp).Row

With Application

    For i = 3 To LastRow
            Worksheets("PO List").Cells(i, 52) = .VLookup((Worksheets("PO List").Cells(i, 37).Value & Worksheets("PO List").Cells(1, 52).Value), lookRange, 4, False)
    Next i

End With

Worksheets("PO List").Activate

End Sub

我正在尝试使用 VBA 代码在两张纸上执行 VLOOKUP。如果我运行上面的代码,这是我得到的结果(在 AZ 列中)。

VLOOKUP 部分有效。问题是我只想在列 CD 中具有“是”值的行上运行 VBA 代码。如果一行在 CD 列中有“否”,我希望 VBA 代码跳过它并且不做任何事情(这些行应该是手动填充的,所以我不希望我的 VBA 代码删除现有数据在这些行中)。

我不知道该怎么做……下面是我尝试使用 xlCellTypeVisible 的方法,但它不起作用。我仍然在这些“否”行中得到 #N/A 值。

With Application
    For Each rw In filter_rng.SpecialCells(xlCellTypeVisible)
         For i = 3 To LastRow
            Worksheets("PO List").Cells(i, 52) = .VLookup((Worksheets("PO List").Cells(i, 37).Value & Worksheets("PO List").Cells(1, 52).Value), lookRange, 4, False)
        Next i
     Next rw

我应该如何编辑我的代码,以便它可以跳过这些列 CD 中带有“否”的行?提前致谢!

【问题讨论】:

    标签: vba vlookup


    【解决方案1】:

    检查列偏移和索引是否正常

    Option Explicit
    
    Sub ActivityMatching()
    
    Dim wsToLook As Worksheet
    Set wsToLook = ThisWorkbook.Sheets("AurorData")
    Dim rngToLook As Range
    Set rngToLook = wsToLook.Range("A2:D1000")
    
    Dim wsMain As Worksheet
    Set wsMain = ThisWorkbook.Sheets("PO List")
    
    Dim iCell As Range
    Dim rngToInsert As Range
    Dim lastRow As Long
    Dim whatToFind As Variant
    
        With wsMain
    
            .Range("A1:CD1").AutoFilter Field:=82, Criteria1:="Yes"    
            lastRow = .Cells(.Rows.Count, "AK").End(xlUp).Row
    
            Set rngToInsert = .Range("AZ3:AZ" & lastRow).SpecialCells(xlCellTypeVisible)
    
            For Each iCell In rngToInsert
                whatToFind = iCell.Offset(, -15).Value & .Cells(1, 52).Value
                iCell.Value = Application.VLookup(whatToFind, rngToLook, 4, False)
            Next iCell
    
        End With
    
    End Sub
    

    你的代码有问题

    For Each rw In filter_rng.SpecialCells(xlCellTypeVisible)
         For i = 3 To LastRow
              ' here you was iterating through every "i" row
              ' and you was doing that many times 
              ' equal to amount of "yes" in a range
              ' what makes no sense ;)
              ' filter_rng.SpecialCells(xlCellTypeVisible).Cells.Count * (lastRow - 2)
    
              Worksheets("PO List").Cells(i, 52) = something
    
         Next i
    Next rw
    

    【讨论】:

    • 谢谢!您的代码有效!特别感谢对我原始代码的解释,现在我知道我做错了什么。
    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多