【问题标题】:Excel function that returns formula choice返回公式选择的 Excel 函数
【发布时间】:2012-10-31 06:28:57
【问题描述】:

我正在尝试编写一个 Excel VBA 函数,该函数将根据工作表中其他位置的全局设置返回两个输入参数之一作为输入单元格的公式。 IE,在工作表的其他地方有人设置了 A 或 B,然后调用函数 AorB 的公式将根据全局设置返回 A 或 B。

类似这样的:

Function AOrB(A As Variant, B As Variant) As Variant
    If someSetting = A Then
        AOrB.formula = A
    ElseIf someSetting = B Then
        AOrB.formula = B
    End If
End Function

我已经大量搜索,但我只是不知道输入和返回什么类型以允许函数返回。

任何帮助将不胜感激。

【问题讨论】:

  • 您无法以这种方式返回公式,只能返回一个值。根据您的设置,可以通过两种方式计算该值,但该函数只会返回一个值。
  • 除非你真的很时髦 - stackoverflow.com/questions/8520732/… - 正如坚果所说,这只能返回一个值

标签: excel excel-formula vba


【解决方案1】:

从 UDF 更改公式不是一个好主意。这是可能的,但很复杂。

我相信执行您所解释的正确方法是通过公式中的 IF:

=IF(someSetting = A, AFormula, If(someSetting = B,BFormula,""))

如果someSetting 是您在代码中存储的内容,您可以创建一个UDF 来检索该值。像这样:

Private mySetting As Variant
Function SomeSetting() As Variant
    SomeSetting = mySetting
End Function

【讨论】:

  • “您不能从 UDF 更改单元格公式” - 您可以。但这很复杂。见我上面的链接
  • 我试图通过开发 UDF 来减少工作表的复杂性,以避免使用许多 IF 语句。事实上,我有数百个单元格都以 IF(somesetting = A.......... .
  • 嗯...我不确定您是否会认为这更简单,但您可以修改 UDF SomeSetting 以通过将变量传递给它来检索您的所有设置。
【解决方案2】:

为将保存全局设置的单元格命名,例如“ABChoice”。 (您可以通过单击显示当前单元格位置的编辑栏左侧并输入所需名称来完成此操作。

然后重写公式:

Function AOrB()
    If ThisWorkbook.Range("ABChoice") = "A" Then
        AOrB = "A"
    ElseIf ThisWorkbook.Range("ABChoice") = "B" Then
        AOrB = "B"
    Else
        AOrB = "A" 'could switch to B, whichever is the default
    End If
End Function

您可以使用数据验证(在“数据”菜单下)来确保用户只能输入“A”或“B”,但如果您选择了默认状态,那么使用最后的 Else 子句就没有必要了。

这实际上与仅命名全局单元格并在以后的公式中引用它没有什么不同,这不需要 VBA。我假设您的功能在幕后有点复杂,这需要 UDF。如果没有,请使用命名范围。

我实际上建议您使用 1 或 2 而不是“A”或“B”,因为这样您可以在需要引用全局设置时使用 CHOOSE 函数,它的语法比必须使用 IF 更简单函数。

【讨论】:

  • +1 供选择...CHOICE(TestCell,DoIf1,DoIf2) 确实使某些公式更具可读性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多