【问题标题】:Shorten excel formula by user defined function VBA通过用户定义的函数VBA缩短excel公式
【发布时间】:2018-06-06 01:59:41
【问题描述】:

我的最终目标是使用 VBA 中的用户定义函数来缩短这个公式,以下是我的参数 A1:C10、A1:A10、E1、B1:B10、F1(这会有所不同,这只是一个纯粹的例子)

Excel公式:

=index(A1:C10,match(1,(A1:A10=E1)*(B1:B10=F1),0),G1)

使用用户定义的函数,它会是这样的:

=pick(A1:C10, A1:A10, E1, B1:B10, F1, G1)

我的 VBA 代码是这样的,但是,它不起作用。请高手,帮帮我。非常感谢。

Function pick(range As range, con1 As range, con1a As range, con2 As range, con2a As range, col As range) As Variant

pick = WorksheetFunction.Index(range, Match(1, (con1 = con1a) * (con2 = con2a), 0), col)

End Function

【问题讨论】:

  • VBA不能做con = con1a等矩阵运算。您需要循环执行此操作。
  • 嗨,你介意分享一下你将如何做这种事情的代码吗?对不起,我是菜鸟,希望能向这个小练习者学习。谢谢
  • 展示一个具有预期输出的示例也会有所帮助。

标签: vba function matrix range excel-udf


【解决方案1】:

使用评估方法:

Function pick(range As range, con1 As range, con1a As range, con2 As range, con2a As range, col As range) As Variant

pick = Application.Caller.Parent.Evaluate("Index(" & range.Address(1,1,,1) & ",Match(1, (" & con1.Address(1,1,,1) & " = " & con1a.Address(1,1,,1) & ") * (" & con2.Address(1,1,,1) & " = " & con2a.Address(1,1,,1) & "), 0), " & col.Address(1,1,,1) & ")")

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 2022-09-28
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多