根据下拉框中的选择更改公式

时间:2014-02-17 02:20:59

标签: excel excel-vba excel-2010 vba

我正在尝试创建一种在Excel工作表上进行更改的快速方法,我想知道是否有人能够以有效的方式启发我以解决以下问题。

假设我有三个数字的行,比方说A1:C1(但是,数据不在实际数据集的相邻列中):

5, 10, 15

我希望在该行的末尾有一个下拉框(A4),其中显示了可以在这些数字上使用的函数列表(例如:SUM,AVERAGE,MAX,MIN)以及用于指示A5中的公式。

一种简单的方法是创建一个IF语句和一个可能性的下拉框:例如

= IF($A4 = "average", AVERAGE(A1:A3), IF($A4= "min", MIN(A1:A3), etc..

然而,如果有大量的功能选择,这将是乏味的。所以我想知道是否有一个快速的方法来做到这一点?

也许像

= function(A1:A3) 

函数将根据下拉框中的短语进行更改,下拉框取决于工作表上其他位置的函数列表。

2 个答案:

答案 0 :(得分:2)

你必须“重新发明轮子”吗?似乎已经为您完成了所有操作,使用Insert>表 - 表:

SO21819663 example

答案 1 :(得分:1)

有趣的问题。 :)

参见此示例

让我们说你的工作表看起来像这样

enter image description here

<强>代码:

将其粘贴到模块中

Function GuessFunction(Rng As Range, FuncType As String) As Variant
    Dim wFn As WorksheetFunction

    GuessFunction = "Error - Please Check Input"

    Set wFn = Application.WorksheetFunction

    Select Case UCase(FuncType)
        Case "AVERAGE": GuessFunction = wFn.Average(Rng)
        Case "SUM": GuessFunction = wFn.Sum(Rng)
        Case "MAX": GuessFunction = wFn.Max(Rng)
        Case "COUNT": GuessFunction = wFn.Count(Rng)
        '
        '~~> Add More
        '
    End Select
End Function

接下来在单元格中输入公式=GuessFunction(A1:H1,I1),您就完成了。

<强>输出:

enter image description here


<强> ALTERNATIVE

使用EVALUATE

的另一种方法
Function GuessFunction(Rng As Range, FuncType As String) As Variant
    GuessFunction = "Error - Please Check Input"
    GuessFunction = Application.Evaluate("=" & FuncType & "(" & Rng.Address & ")")
End Function

优点:

您不必为每个公式指定单独的代码,就像我们在上面Select Case中所做的那样。

CONS:

您只能使其适用于SUM/MAX/MIN类似FORMULA(ADDRESS)类型的公式。您不能将其用于VLOOKUP