Excel formula 跨多个数组的百分位函数

Excel formula 跨多个数组的百分位函数,excel-formula,excel-2010,Excel Formula,Excel 2010,所以我现在有excel中的数据 A B C 2015-1 Test 1 23 2015-2 Test 1 12 2015-3 Test 1 43 2015-4 Test 1 32 2015-5 Test 1 3 2015-6 Test 1 90 2015-1 T

所以我现在有excel中的数据

  A             B           C
2015-1        Test 1        23    
2015-2        Test 1        12
2015-3        Test 1        43
2015-4        Test 1        32
2015-5        Test 1        3
2015-6        Test 1        90
2015-1        Test 2        200
2015-2        Test 2        123
2015-3        Test 2        21
2015-4        Test 2        40
2015-5        Test 2        17
2015-6        Test 2        138
2015-1        Test 3        160
2015-2        Test 3        55
2015-3        Test 3        30
2015-4        Test 3        74
2015-5        Test 3        67
2015-6        Test 3        89
现在,我有了它,用户可以查看特定时间段(不一定是所有日期)的数据(例如,从2015-1到2015-4)。因此,当用户选择他们想要的日期时,我想在B列中的所有不同测试场景中获取该日期的数据百分比(C列)。现在只有3个,但最多会有100个不同的测试用例

我知道它可以做=百分位((test1_数据,test2_数据,test3_数据),1),
但是我将不得不对100多个不同的测试用例进行百分位数计算,而我现在设置它的方式似乎效率很低。有没有一种方法可以做到这一点,而不必手动输入100个不同的数组

根据您的表格,按照以下公式进行操作。(这是一个数组公式,在单元格中输入公式时应使用CTL+SHIFT+ENTER来激活函数。)

{=PERCENTILE(
如果(NUMBERVALUE(左($A$1:$A$18,4))=BegYear,
如果(NUMBERVALUE(右($A$1:$A$18,1))=BegMonth,
$C$1:$C$18))),1)}
  • EndYear
    是对包含上一年的单元格的引用
  • BegYear
    是对包含第一年的单元格的引用
  • EndMonth
    是对包含上个月(或任何第二个单位)的单元格的引用
  • BegMonth
    是对包含第一个月(或任何第二个单位)的单元格的引用
只需扩展参考文件
$A$1:$A$18
$C$1:$C$18
,就可以包含您想要的任意多个测试用例

公式说明

  • 前两份国际单项体育联合会声明侧重于本年度。它们将
    LEFT()
    四位数字作为字符串
    NUMBERVALUE()
    然后将字符串转换为值。然后,您可以使用if语句从逻辑上评估测试日期是否属于所需的日期范围

  • 后两个if语句在最后一个位数(月?)上做的事情完全相同

  • 如果所有语句都为true,则嵌入的if语句将从C列返回关联值的数组,如果其中一个语句不为true,则返回FALSE

  • PERCENTILE()
    将接受数组,忽略返回为FALSE的项,并提供所有四个if语句都为true的值范围的第k个百分位数

  • *请注意,我不知道你的第二个数字的意义。如果超过9,您可能需要调整数据。在这种情况下,您可以将所有2015-9条目替换为2015-09,并将
    RIGHT()
    函数的第二个参数更改为2,或者执行类似于
    MID($A$1:$A$18,6,2)
    的操作,或者最后一个数字可以替换为年参数后的任意多个字符

    {=PERCENTILE(
    IF(NUMBERVALUE(LEFT($A$1:$A$18,4))<=EndYear,
    IF(NUMBERVALUE(LEFT($A$1:$A$18,4))>=BegYear,
    IF(NUMBERVALUE(RIGHT($A$1:$A$18,1))<=EndMonth,
    IF(NUMBERVALUE(RIGHT($A$1:$A$18,1))>=BegMonth,
    $C$1:$C$18)))),1)}