【问题标题】:how can I call a vba function from within vlookup如何从 vlookup 中调用 vba 函数
【发布时间】:2015-03-13 11:41:01
【问题描述】:

我有以下公式,我认为它会起作用 =if(B1=1,fxcmde3(),if(B1=2,fxcmde4(),if(B1=3,fxcmde5(),if(B1=4,fxcmde6(),if(B1= 5,fxcmde7(),if(B1=6,fxcmde8(),””))))))

其中每个 fxcmde4() 等都是一个 vba 函数,例如

Function fxcmdc3() As Variant
fxcmdc3 = Sheets("Sheet8").Range("DC3").Value
End Function

但是,我将不得不编写大约 1000-2000 个变体来引用我拥有的 64 个左右的函数。另外,我可能每次都要写出公式。

这是因为我无法通过引用单元格来运行 vba 函数以加快速度。如果我这样做了,那么 =AF3 将在单元格 AF3 包含 fxcmde3() 的地方工作,但这不起作用,因此 vlookup 或任何其他引用此函数的方法都不起作用。

我的 excel 公式将类似于 =if(B1=1,fxcmde3(),if(B1=2,fxcmde4(),if(B1=3,fxcmde5(),if(B1=4,fxcmde6(),if(B1=5,fxcmde7(),if(B1=6,fxcmde8(),””)))))) 比如说单元格M2 然后在 M3 一直到 M8 引用 gto e 到 k =if(B1=1,fxcmdf3(),if(B1=2,fxcmdf4(),if(B1=3,fxcmdf5(),if(B1=4,fxcmdf6(),if(B1=5,fxcmdf7(),if(B1=6,fxcmdf8(),””)))))) 然后在M3我将有相同的程序(参考e到k)除了参考B2

因此这将一直持续到 M1000 行

B1 b2 到 b1000 将只有值 1-7 来指代对应的 d 到 k 因此我可以使用查找或一些我不知道的昂贵或耗时的包装函数(因此为什么我在这里)这样做

【问题讨论】:

    标签: excel wrapper vlookup vba


    【解决方案1】:

    如果您想使用的所有功能都这么简单,请不要通过 VBA 用户定义的功能来使用。只需对工作表和单元格使用普通的 excel 引用即可。

    =IF(B1=1,Sheet8!$DC$3,If(B1=2,...)

    或者你有什么理由要避免这种方法?

    编辑 1

    您是否尝试以这种方式引用该函数?

    【讨论】:

    • 是的,因为我需要在运行 UDF 时粘贴单元格。即当 B1 更改为 1 时。即使其值从复制位置发生更改,返回的值也会保留在那里。我认为如果 UDF 在括号中包含单元格引用,这可能会起作用。 Function fxcmdc3(DC3) As Variant fxcmdc3 = Sheets("Sheet8").Range("DC3").Value End Function 之类的东西虽然可能不是因为我有 56 个 UDF 可供参考
    • 你能解释一下吗?我没听懂。
    • 它基本上是当我在将此值复制到我编写公式的位置后删除 Sheet8 DC3 时使用您的 IF 函数时的情况。该值来自我编写公式的位置。如果我使用我的 vba 函数(相当于右键单击复制,粘贴特殊粘贴值),那么它会停留在函数最初运行时离开它的位置。有意义吗?
    • 其实我想我可能只需要写6次就可以复制粘贴到相应的B1-B1000
    • 我想我明白你想要什么了。但我必须警告您,您的函数 等同于粘贴值。如果您在函数中引用的值发生更改(源值)并且发生重新计算事件,则结果(输出值)将相应更新。我建议使用公式,在需要的地方复制,然后选择所有内容,然后粘贴为值。这将摆脱公式,对源值的更改不会影响输出。
    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多