【发布时间】:2019-09-06 18:25:48
【问题描述】:
我想为以下 Excel 索引匹配公式创建一个 UDF:
{=INDEX($A$1:$J$7,MATCH(B9,$A$1:$A$7,0),MATCH(1,($A$1:$J$1=B10)*($A$2:$J$2=B11),0))}
AA AA AA BB BB BB CC CC CC
a b c a b c a b c
1 10 55 24 48 95 19 5 28 65
2 16 48 3 62 46 50 59 80 17
3 63 47 19 23 67 26 14 16 9
4 55 91 4 55 72 79 27 39 50
5 75 53 7 42 45 19 58 41 12
Condition1 3
Condition2 AA
Condition3 c
index-Match 19 =INDEX($A$1:$J$7,MATCH(B9,$A$1:$A$7,0),MATCH(1,($A$1:$J$1=B10)*($A$2:$J$2=B11),0))}
注意:CTRL + SHIFT + ENTER 在 excel 中返回数组结果
这在 excel 工作表中有效,但是当我尝试将其转换为 VBA 时,出现错误。
我认为我需要在以下代码中的某处应用 FormulaArray,非常感谢任何帮助。
我尝试了以下代码,但得到了#VALUE!
Public Function UDF_IndexMatch(Condition1, Condition2, COndition3)
UDF_IndexMatch = Application.WorksheetFunction.Index(Range("$A$1:$J$7"), _
Application.WorksheetFunction.Match(Condition1, Range("$A$1:$A$7"), 0), _
Application.WorksheetFunction.Match(1, (Range("$A$1:$J$1") = Condition2) * (Range("$A$2:$J$2") = COndition3), 0))
End Function
最终结果应该是这样的:
= UDF_IndexMatch(Condition1, Condition2, COndition3)
return:对应的索引匹配结果
【问题讨论】:
-
总是
"$A$1:$J$7"还是您也需要用户设置范围的能力? -
@ScottCraner 最终我将为表格/范围选择创建另一个参数,但现在只是为了让公式正常工作,“$A$1:$J$7”很好。
标签: excel vba indexing match user-defined-functions