表排序和查找

时间:2015-12-24 09:26:08

标签: arrays excel sorting excel-formula vlookup

我有一张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中只有内置函数的解决方案吗?

1 个答案:

答案 0 :(得分:2)

如果您只需要使用本机工作表函数,则可以完成此操作;即使没有数组公式。

flatten_matrix

原始数据在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 值。