代码之家  ›  专栏  ›  技术社区  ›  KGB91

如果值相同,请从Excel的列i中一次指定一个值

  •  0
  • KGB91  · 技术社区  · 7 年前

    在Excel中查找列值时遇到问题,我得到了一些帮助: Find column value Excel

    该表如下所示:

    A   17  8,5 5,666666667 4,25    3,4 2,833333333 2,428571429
    B   5   2,5 1,666666667 1,25    1   0,833333333 0,714285714
    C   5   2,5 1,666666667 1,25    1   0,833333333 0,714285714
    G   4   2   1,333333333 1       0,8 0,666666667 0,571428571
    

    我得到帮助的代码基本上根据最大数值的顺序选择A、B、C和G。最大值为17,即A的一个点,然后是8,5,这为A提供了另一个点。这很好。

    然而,接下来是5。我现在得到两次B,而不是第一次得到B和C(顺序无关紧要,但我不想在B和C的值相同时得到B的两个点)。如何修复此问题?

    (这个例子所说明的真正问题是瑞典多党派地方委员会的席位数量,其中不同党派的席位数量是基于市议会的席位数量。)

    编辑:公式: =INDEX($J$16:$J$25,AGGREGATE(14,6,ROW($K$16:$W$25)/(K28=$K$16:$W$25),1)-ROW($J$16)+1)

    编辑2:想要的结果:

    Mandate    Party
    1          A
    2          A
    3          A
    4          B
    5          C
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Ron Rosenfeld    7 年前

    要通过公式做到这一点,我认为一个简单的方法是

    • 取消Pivot 使用公式的原始数据
    • 应用 unique rank 该数据的公式
    • 然后使用 VLOOKUP 返回等级 1-n

    以下公式和定义的名称将非常有用

    origTbl     =Sheet2!$A$1:$H$4
    unpivotTbl  =Sheet2!$A$8:$C$35
    
    A8      =RANK(C8,$C$8:$C$35,0)+COUNTIF($C$8:C8,C8)-1
    B8      =INDEX(origTbl,INT((ROWS($1:1)-1)/7)+1,1)
    C8      =INDEX(origTbl,INT((ROWS($1:1)-1)/7)+1,MOD(7+ROWS($1:1)-1,7)+2)
    
    • 向下填充 A8:C8 至行 35

    在中的公式中 B8 C8 这个 7 是中的列数 origTbl 减1(例如: COLUMNS(origTbl)-1 )

    您在中所做的任何更改 原始BL 将反映在最终表格中 对于外观,您当然可以将UnPivot表隐藏在某个地方。

    注意:在我的语言环境中,十进制分隔符是点

    enter image description here