首页 > 解决方案 > 在下一个可见单元格上应用 VLOOKUP

问题描述

下面的代码执行 vlookup,然后自动填充数据,然后将过滤器应用于#N/A. 在这里,我需要VLOOKUP使用过滤器在同一列中执行另一个操作,#N/A但我不确定这一点,因为我们如何选择下面的单元格F1并应用于VLOOKUP可见数据。你能帮我解决这个问题吗?

Sub Vlookup()
    Worksheets("error rate").Activate
    Range("F2") = "=Vlookup(B2,'sales'!B:C,2,0)"
    Range("F2").Select
    Range("F2").AutoFill Range("F2:F" & Range("B" & Rows.Count).End(xlUp).Row)
    Range("F:F").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Range("B1").AutoFilter Field:=6, Criteria1:="#N/A"
    Range = Rng.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 6)
End Sub

标签: excelvba

解决方案


一些事情

  1. 避免使用Activate/Select. 您可能想查看如何避免在 Excel VBA 中使用 Select

  2. 定义和使用对象。使用您的代码变得更加容易。

  3. 无需在一个单元格中输入公式然后自动填充,只需在整个范围内一次性输入公式,如下所示。

  4. 我看到目标是获取所有值。那么就不需要输入公式,过滤和租用公式了。使用IFERROR和使用单个嵌套公式IF。例如,如果公式"=Vlookup(B2,'sales'!B:C,2,0)"没有给您结果,并且您想从说列中提取值,D则使用公式=IFERROR(VLOOKUP(B2,Sales!B:C,2,0),VLOOKUP(B2,Sales!B:D,3,0))。我只是嵌套VLOOKUP(B2,Sales!B:D,3,0)在里面IFERROR()。该公式的作用是检查是否存在错误,VLOOKUP(B2,Sales!B:C,2,0)如果存在,则尝试使用VLOOKUP(B2,Sales!B:D,3,0)

代码

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long
    
    '~~> Set this to the relevant sheet
    Set ws = ThisWorkbook.Sheets("error rate")
    
    With ws
        '~~> Find last row
        lRow = .Range("B" & .Rows.Count).End(xlUp).Row
        
        '~~> Work with the relevant range
        With .Range("F2:F" & lRow)
            '~~> Enter the formula in the entire range in one go
            .Formula = "=IFERROR(VLOOKUP(B2,Sales!B:C,2,0),VLOOKUP(B2,Sales!B:D,3,0))"
            
            '~~> OPTIONAL
            '~~> Instead of copy and paste as values use this.
            '.Value = .Value
        End With
    End With
End Sub

推荐阅读