【问题标题】:Creating a percentile if function in VBA with variables在 VBA 中使用变量创建百分位数 if 函数
【发布时间】:2016-09-07 08:22:18
【问题描述】:

我目前正试图创建一个函数,该函数使用符合标准的数据计算百分位数。我的数据要长得多,但格式如下:

A          B
462        2015
675        2015
494        2014
802        2015
380        2014

所以在这种情况下,百分位数数组是 A 列,标准范围是 B 列。下面的语句计算 A 列中与 B 列中 2015 年相对应的值的第 90 个百分位数。我能得到这个的唯一方法工作是让 VBA 使用 .formulaArray 属性评估引号中的语句。使用上面的 5 行示例(我认为您需要超过 5 行来计算百分位数):

Cells(1, 10).FormulaArray = "=PERCENTILE.EXC(IF(A2:A5 = 2015,B2:B5),0.9)"

这有效,除非我用函数中的范围/值替换变量。这不起作用:

dim lastyear as integer
dim yearcol as range
dim valuescol as range

lastyear = 2015
valuescol = range(cells(1,1),cells(5,1))
yearcol = range(cells(1,2),cells(5,2)

Cells(1, 10).FormulaArray = "=PERCENTILE.EXC(IF(yearcol = lastyear, valuescol,0.9)"

如果有人有任何建议,我将不胜感激。

谢谢

【问题讨论】:

    标签: vba conditional array-formulas percentile


    【解决方案1】:

    您需要将变量移到引号之外:

    dim lastyear as integer
    dim yearcol as range
    dim valuescol as range
    
    lastyear = 2015
    Set valuescol = range(cells(1,1),cells(5,1))
    Set yearcol = range(cells(1,2),cells(5,2))
    
    Cells(1, 10).FormulaArray = "=PERCENTILE.EXC(IF(" & yearcol.address(0,0) & " = " & lastyear & ", " & valuescol.address(0,0) & ",0.9)"
    

    【讨论】:

    • 感谢您的回复。我仍然在变量上遇到类型不匹配。也许我必须以不同的方式声明范围变量,因为它位于公式数组中?
    • @sevans 看到编辑,我忘了我们需要使用地址而不是范围变量本身。
    • 非常感谢您的帮助;你结束了一个多小时的谷歌搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2012-11-12
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 2019-08-25
    • 2014-09-06
    相关资源
    最近更新 更多