首页 > 解决方案 > 如何在 VBA 中使用 IFNA(结合索引/匹配)

问题描述

我有两张床单。一种称为“排除”,另一种称为“PCAM 承诺”。排除表仅包含状态为“排除”的项目。PCAM 承诺表包含所有项目(因此“包括”和“排除”项目)。 排除表PCAM 承诺表

我需要匹配 PCAM 承诺表 G 列中的这些排除/包含值。由于“包含”状态的项目不在“排除”表上,我需要使用 IFNA 功能。

这个公式将完成这项工作: =IFNA(INDEX(Exclusions!B2:C100, MATCH('PCAM Commitments'!A2,Exclusions!B2:B100,0),2), "Include")

但我无法将此公式转换为 vba 代码。

Sub ExIn()

Dim i As Integer
Dim lookRange As Range
Dim StartRange As Range
Dim LastRow As Integer

Dim ID As Long
Dim Value As Long

ID = Application.Match("PO/SO", Rows(1), 0)
Value = Application.Match("Ex/In", Rows(1), 0)

LastRow = Sheets("PCAM Commitments").Cells(Rows.Count, "A").End(xlUp).Row
Set lookRange = Sheets("Exclusions").Range("B2:C136")
Set StartRange = Sheets("Exclusions").Range("B2:B136")


For i = 2 To LastRow
    Worksheets("PCAM Commitments").Cells(i, Value) = WorksheetFunction.IfNa(WorksheetFunction.Index(lookRange, WorksheetFunction.Match(Worksheets("PCAM Commitments").Cells(i, ID).Value, StartRange, 0), 2), "Include")

Next i

End Sub

这就是我现在所拥有的。每当我运行它时,都会弹出一条错误消息,说“无法获取 WorksheetFunction 类的匹配属性......。任何帮助,将不胜感激!

标签: excelvbaif-statement

解决方案


尝试使用 Vlookup 和 Application 而不是 Worksheetfunction,如下所示:

With Application
For i = 2 To LastRow
    Worksheets("PCAM Commitments").Cells(i, Value) = .IfNa(.VLookup(Worksheets("PCAM Commitments").Cells(i, ID).Value, lookRange, 2, False), "Include")
Next i
End With

推荐阅读