【问题标题】:How if use IFNA in VBA (combined with Index/Match)如何在 VBA 中使用 IFNA(结合索引/匹配)
【发布时间】:2019-12-03 18:54:50
【问题描述】:

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

我需要匹配 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 类的匹配属性......。任何帮助将不胜感激!

【问题讨论】:

  • WorksheetFunction.Match 如果不匹配会抛出该错误。一种替代方法是使用Application.Match,然后使用IsError 测试结果是否错误。
  • 你的意思是这样的:" Worksheets("PCAM Commitments").Cells(i, Value) = WorksheetFunction.IsError(WorksheetFunction.Index(lookRange, Application.Match(Worksheets("PCAM Commitments") .Cells(i, ID).Value, StartRange, 0), 2), "Include") "?...也不行
  • 不是WorksheetFunction.IsError,而是IsError 函数。您需要将其拆分为多行。
  • 另一种选择是将Evaluate 与您的原始公式一起使用。
  • 在我看来,最好的选择是摆脱 long WorksheetFunction 并使用其他 vba 工具。我是否正确理解您需要查看 PCAM 承诺表,从 A 列和 B 列中获取一对值,在 C 和 B 列的排除表中找到相同的对,并正确填写 PCAM 承诺表的 G 列?跨度>

标签: excel vba if-statement


【解决方案1】:

尝试使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2014-12-10
    • 2021-05-25
    相关资源
    最近更新 更多