使用变量在 VBA 中创建一个百分位数 if 函数

Creating a percentile if function in VBA with variables

我目前一直在尝试创建一个函数来计算符合条件的数据的百分位数。我的数据要长得多,但格式如下:

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)"

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

谢谢

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

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)"