【问题标题】:Table sort and lookup表排序和查找
【发布时间】:2016-03-30 18:10:48
【问题描述】:

我有一个看起来像这样的 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)。而 VLOOKUP() 需要一个排序表。

另一个问题(向前迈进了一步)是 VLOOKUP() 返回最接近的较小值,而不是实际的最小值。有没有更好的方法或解决方法?所以结果就是这样一张整洁的桌子,

Value to look up = 2.8
>> C2 R3 3
>> C1 R3 2
>> C1 R1 5

由于某些原因,我不能在这个项目中使用 VBA。在 MS Excel 中只有内置函数的任何解决方案?

【问题讨论】:

  • 第 1 部分:ADDRESS() 第 2 部分:INDEX(MATCH())
  • 从多个合并范围中选择透视表
  • superuser.com/questions/78439/…。搜索关键字是Excel unpivot
  • 为什么 2.8 的第三个'最接近的较小值' C1 R1 5 而不是C1 R2 1

标签: arrays excel sorting excel-formula vlookup


【解决方案1】:

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

        

使用 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 值是如何处理的。

【讨论】:

  • 谢谢 Jeeped 代码似乎适用于我的项目。你能解释一下AGGREGATE() 的ROW($1:$3)/(B$2:D$4=H3) 部分吗?我知道#DIV/0 是不匹配的,所以 AGGREGATE() 可以忽略这些错误。但我无法理解ROW($1:$3) 部分。谢谢。
  • ROW(1:3) 是行位置 $B$2:$D$4,而不是工作表上的实际行; COLUMN(A:C) 是列在 $B$2:$D$4 中的位置,而不是工作表上的实际列。
猜你喜欢
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 2014-02-22
  • 2021-12-20
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 2018-05-07
相关资源
最近更新 更多