【问题标题】:IF w/ VLOOKUP until last rowIF 带 VLOOKUP 直到最后一行
【发布时间】:2021-01-11 06:34:21
【问题描述】:

我使用此脚本的目标是使用公式 VLOOKUP 从工作表“BonDeCommande”(A 列)中搜索另一个名为“BonDeReception”(也是 A 列)的工作表中的单元格。

如果在表数组中找到对应的值,则必须在lookup_value(“BonDeCommande”上的A列)的同一行的J列处写入“Oui”。

脚本:

Sub Macro1()


Dim Search As Variant

Dim i As Range
Dim j As Range

LastRow = Worksheets("BC").Range("A" & Rows.Count).End(xlUp).Row
LastR = Worksheets("BR").Range("A" & Rows.Count).End(xlUp).Row
    
For Each i In Range("A2:A" & LastRow)
    For Each j In Range("A2:A" & LastR)
    Range("J2").Select
    Search = Application.VLookup(BC.Range("A2:A" & "i"), BR.Range("A2:A" & "j"), 1, False)


    If Search = "A" & "i" Then
       Result = "OUI"

    Else
        Result = "NON"
        Range("J" & "i").Value = Result
    
    End If
    Next j
Next i

End Sub

但是,代码不起作用,我收到一条运行时错误 424 消息,突出显示了这一行:

Search = Application.VLookup(BC.Range("A2:A" & "i"), BR.Range("A2:A" & "j"), 1, False)

您能告诉我我在代码上做错了什么吗?或者有没有更简单的方法。

提前致谢!

【问题讨论】:

  • ij 也是范围,您希望它们是数字。
  • 那么,我是否必须改为将其更改为 Variant?我做到了,我收到了同样的错误信息。也试过 As Integer 但对于每个控制变量必须是 Variant 或 Object
  • 你需要决定你是在寻找一个数字还是一个范围,然后在使用上保持一致。

标签: vba if-statement foreach vlookup


【解决方案1】:

您将范围视为数字,也不需要第二个循环:

Sub Macro1()


    Dim Search As Variant
    
    Dim i As Range
    
    Dim LastRow As Long
    LastRow = Worksheets("BonDeCommande").Range("A" & Rows.Count).End(xlUp).Row
    
        
    For Each i In Worksheets("BonDeCommande").Range("A2:A" & LastRow)
        Search = Application.VLookup(i.Value, Worksheets("BonDeReception").Range("A:A"), 1, False)
        If Not IsError(Search) Then
            Result = "OUI"
        Else
            Result = "NON"
        End If
        i.Offset(,9).Value = Result
    Next i

End Sub

但这一切都可以通过一个公式来完成:

=IF(ISNUMBER(MATCH(A2,BonDeReception!A:A,0)),"OUI","NON")

【讨论】:

  • 成功了!谢谢你,你真的救了我的命哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
相关资源
最近更新 更多