返回公式选择的Excel函数

时间:2012-10-30 21:39:57

标签: excel excel-vba excel-formula vba

我正在尝试编写一个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

我的搜索量非常大,但我只是不知道输入和返回的类型以便让函数返回。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

我相信你正在解释的正确方法是通过公式中的IF:

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

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

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

答案 1 :(得分:1)

为将保存全局设置的单元格命名,例如“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更简单的语法功能