【问题标题】:Creating function via string in Excel在 Excel 中通过字符串创建函数
【发布时间】:2015-06-12 18:19:46
【问题描述】:

我正在尝试找到一种更简单的方法来计算以下统计数据:平均值、标准、最小值和最大值。到目前为止,我已经尝试将函数名 (E9)、起始列 ($E$6)、起始行 ($F$2)、结束列 ($G$6) 和结束行 ($F$3) 组合在一起。结果是AVERAGE(A2:C10)。我希望它返回AVERAGE(A2:C10) 的值,即6.23。有没有办法把它变成 Excel 可以识别的方程?此概念将用于查找大型数据集的平均值、标准差、最小值和最大值。提前致谢!

【问题讨论】:

  • 正如@pnuts 所指出的,可以构造单元格范围,但不能构造函数。为此,请在 VBA 中编写一个用户定义函数(又名UDF)来构建字符串并使用Application.Evaluate(<your full formula string here>) 来生成实际处理。
  • @pnuts - 更奇怪的是,在阅读了您的最后一条评论后,我顿悟了。

标签: string excel function statistics


【解决方案1】:

经过一番思考,您可以构建一个交叉引用表,该表使用SUBTOTAL 提供公式的功能,同时使用INDIRECT 提供范围。

Function   Function_Num   Function_Num (excludes hidden values)
Average    1              101
Min        5              105
StDev      7              107

SUBTOTAL function 提供了可用功能的完整列表here。使用 X1:Z4 中的表格,您构造的公式将是,

=subtotal(vlookup(E9, X:Z, 2, false), 间接(e6&f3&":"&g6&f3))

请注意,SUBTOTAL 中并非每个本机工作表函数都可用,但您指定的三个和其他几个一样。

附录:

  1. 数据验证列表可以使用 E9:G9 的 Source: 列表作为 X2:X4 或定义为 ='Sheet1'!$X$2:INDEX('Sheet1'!$X:$X, MATCH("zzz", 'Sheet1'!$X:$X)) 的命名范围进行“最后一个字母”查找。
  2. 数据查找范围本身可以定义为动态命名范围,其Source:=Sheet1!$X$2:INDEX(Sheet1!$Z:$Z, MATCH(1E+99, Sheet1!$Z:$Z)),用于“最后一个数字”查找。
  3. 100 function_num 标识符在数据 ► 排序和筛选 ► 筛选命令“隐藏”的行上的工作方式相同。
  4. 对于 Excel 2010 及更高版本,AGGREGATE function 可能会提供额外的功能。

【讨论】:

  • 这是对小计的创造性使用。我必须记住那个。
【解决方案2】:

如果您想探索未记录的“功能”世界,您可以使用 EVALUATE 函数(如果它是在命名范围内定义的)。它主要适用于 Excel 2013,如下所述:http://www.vertex42.com/ExcelArticles/evaluate-function.html

缺点是它似乎不会更新,除非基础公式或结果单元格更新。它不能自行正确响应 AVERAGE/SUM 中数据的变化。如果您经常更改公式(或使用间接公式,因为我相信 INDIRECT 会强制重新计算),这可能不是问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多