繁体   English   中英

在具有筛选条件的VBA中使用Vlookup

[英]Using Vlookup In VBA With Filter Conditions

我想在这里完成的是

1)是要对O列中的值进行迭代,对于非null的值,请进行迭代-过滤名为DATA的工作表,以仅显示B列= X的值,并使用VLOOKUP()将查找值返回到P列中的对应行
2)如果O列为空,则过滤标题为DATA的表以仅显示B列> X的值,并使用VLOOKUP()将查找值返回到P列的相应行。

我尝试使用以下语法,但出现错误

对象“ _Worksheet”的方法“ Rarnge”失败

我需要在下面的代码中做些什么不同的操作,以获取返回所需值的语法?

Dim destSheet As Worksheet: Set destSheet = Sheets("Main")

For i = Range("A" & Rows.Count).End(3).Row To 2 Step -1
    If Not IsEmpty(Cells(i, "O").Value) Then
        Sheets("Data").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A:$C").AutoFilter Field:=2, Criteria1:="<>"
        Sheets("Main").Select
        Application.CutCopyMode = False
        form2 = "=IFERROR(VLOOKUP(RC[-15],Lookup!C[-15]:C[-13],3,FALSE),"""")"
        destSheet.Range("P:P" & lr).Formula = form2
    Else
        Sheets("Data").Select
        Selection.AutoFilter
        Sheets("Main").Select
        Application.CutCopyMode = False
        form3 = "=IFERROR(VLOOKUP(RC[-15],Lookup!C[-15]:C[-13],3,FALSE),"""")"
        destSheet.Range("P:P" & lr).Formula = form3
    End If
Next i

对我来说,很难理解您要做什么,如果我弄错了,请纠正我。

首先,在运行宏时选择表不是首选方法,除非您有意这样做,所以请避免使用它。

其次,您不需要过滤任何内容,可以通过检查代码中的条件来对其进行控制。 您无需实际执行任何操作,而可以在理论上在代码中进行操作,并显示输出。 查看此代码,并询问您需要帮助的地方以了解。

Sub VLookups()

Dim destSheet As Worksheet: Set destSheet = Sheets("Main")
Dim i As Long
Dim myVal As Variant

Set lookupRange = Sheets("Data").Range("$A:$C") 'This is your lookup range

For i = 2 To Range("O" & Rows.Count).End(xlUp).Row 'Iterate from 2nd row till last row
    myVal = Application.VLookup(destSheet.Cells(i, "A").Value, lookupRange, 2, False)
    If IsError(myVal) Then GoTo Skip 'If searched value not found then skip to next row

    If Not IsEmpty(Cells(i, "O").Value) Then 'If Cell in Column O not empty
        If myVal = "YOUR X VALUE FOR COLUMN B" Then 'If Your Column B X value exists
            destSheet.Cells(i, "P").Value = Application.VLookup(destSheet.Cells(i, "A").Value, _
            lookupRange, 3, False) 'Column P Cell is populated by Data Sheet Column C Cell
        End If
    Else 'If Cell in Column O empty
        If myVal <> "YOUR X VALUE FOR COLUMN B" Then 'If Your Column B X value not exists
            destSheet.Cells(i, "P").Value = Application.VLookup(destSheet.Cells(i, "A").Value, _
            lookupRange, 3, False) 'Column P Cell is populated by Data Sheet Column C Cell
        End If
    End If
Skip:
Next i
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM