我有一张excel表(25x25),看起来像这样,
C1 C2 C3
R1 5 6 7
R2 1 7 9
R3 2 3 0
我的目标是让它看起来像这样,
C3 R3 0
C1 R2 1
C1 R3 2
C2 R3 3
C1 R1 5
C2 R1 6
C2 R2 7
C3 R1 7
C3 R2 9
它会生成一个按第一个值排名的新表。它还告诉相应的列和行名称。该表有重复,负数和小数。
我之所以这样做,是因为我想找到给定值的3个最接近的候选者(因此也就是C&R和R' s)。并且VLOOKUP()需要一个排序表。
另一个问题(向前迈出一步)是VLOOKUP()返回最接近的较小值,而不是实际上最小的值。有没有更好的方法来做到这一点或解决方法?所以结果是一个像这样的整洁的表,
Value to look up = 2.8
>> C2 R3 3
>> C1 R3 2
>> C1 R1 5
由于某些原因,我不能将VBA用于此项目。在MS Excel中只有内置函数的解决方案吗?
答案 0 :(得分:2)
如果您只需要使用本机工作表函数,则可以完成此操作;即使没有数组公式。
原始数据在A1:D4中,F3:H3中的公式为
=INDEX(B$1:D$1, AGGREGATE(15, 6, COLUMN($A:$C)/(B$2:D$4=H3), COUNTIF(H$3:H3, H3)))
=INDEX(A$2:A$4, AGGREGATE(15, 6, ROW($1:$3)/(B$2:D$4=H3), COUNTIF(H$3:H3, H3)))
=SMALL(B$2:D$4,ROW(1:1))
根据需要填写。
K5中的公式:N5是,
=INDEX(B$1:D$1, AGGREGATE(15, 6, COLUMN($A:$C)/(B$2:D$4=M5), COUNTIF(M$5:M5, M5)))
=INDEX(A$2:A$4, AGGREGATE(15, 6, ROW($1:$3)/(B$2:D$4=H3), COUNTIF(M$5:M5, M5)))
=IF(COUNTIF($B$2:$D$4, N5+$K$2)>=COUNTIF(N$5:N5, N5), N5+$K$2, $K$2-N5)
=AGGREGATE(15,6,ABS($B$2:$D$4-$K$2),ROW(1:1))
根据需要填写。
我在K5:N13矩阵中包含了足够的行,您可以看到如何处理两个 7 值。