【发布时间】: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