Excel函数返回公式select

我正在尝试编写一个Excel VBA函数,它将根据表单中其他位置的全局设置,返回两个input参数之一作为input单元格的公式。 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 

我查了很多,但我只是不知道什么types的input和返回,以便允许函数返回。

任何帮助,将不胜感激。

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

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

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

如果someSetting是代码中存储的东西,则可以使UDF检索该值。 像这样:

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

给举行全球设置的单元格名称,如“ABChoice”。 (您可以通过单击公式栏左侧,显示当前单元格位置并input所需的名称来完成此操作。

然后重写公式:

 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 

您可以使用数据validation(在数据菜单下)来确保用户只能input“A”或“B”,但是使用最后的Else子句使得不必要,假设您有一个选定的默认状态。

这实际上只是命名全局单元格,并在后面的公式中引用它,而不需要VBA。 我假设你的function稍微复杂一些幕后,这是需要一个UDF。 如果没有,只需使用命名的范围。

我实际上build议你使用1或2而不是“A”或“B”,因为那么当你需要引用全局设置时,你可以使用CHOOSE函数,它的语法比使用IF函数简单。