我有如下所示的 Excel 数据:
CHEVY_12 FORD_12 FORD_13 CHEVY_13
t1 462.0646058 5.507611655 887.4193417 197.1054415
t2 427.4865042 646.2186952 685.0746363
t3 175.4137935 73.77079157
列都混在一起了,列标题没有任何有意义的顺序。
我的目标是将这个表中的数据放入一个表中,使其看起来像这样:
<cell A1> Chevy Ford
2012 175.4137935 646.2186952
2013 73.77079157 887.4193417
但是,在数据表中,并非所有列都有、 和的数据t1
,因此直线行不通。基本上我尝试使用的程序有四个部分(所有公式都假设我们正在谈论雪佛兰 2012 单元格,但请参阅随附的屏幕截图了解所有血腥细节):t2
t3
HLOOKUP
创建将在数据表中查找的列标题。假设结果表在单元格 A1 中具有最左角(如图所示),我
=CONCATENATE(UPPER(B$1), "_", MID($A2, 3, 2))
在第一个单元格(Chevy,2012)等中执行此操作,如图所示。在数据表中找到与步骤 1 中构造的标题匹配的标题的列。我只是用于
=MATCH(B3, $F$6:$I$6, 0)
此。根据列标题查找每列中包含数据的最后一行。我用
=MATCH(9E+307, OFFSET($E$6, 1, B9, MATCH(REPT("z", 255), $E$7:$E$9), 1))
这个。由于我不知道最大行数(换句话说,我将有多少t1
,t2
,等),所以我还必须在行标签中找到带有文本的最后一行。t3
我使用此链接中的公式来查找范围内的最后一个数字 (MATCH(9E+307,range)
) 或文本 (MATCH(REPT("z",255),range)
)。使用上面构建的部分
HLOOKUP
在数据表中执行最终。
这是最终的电子表格:
数据表位于单元格中$E$6:$I$9
,如下所示:
有没有更简单的方法来执行这样的查找?我将所有这些部分组合成一个公式,如下所示(示例公式查找雪佛兰的数据,2012):
=HLOOKUP(CONCATENATE(UPPER(B$2), "_", MID($A3, 3, 2)), $F$6:$I$9, MATCH(9E+307, OFFSET($E$6, 1, MATCH(CONCATENATE(UPPER(B$2), "_", MID($A3, 3, 2)), $F$6:$I$6, 0), MATCH(REPT("z", 255), $E$7:$E$9), 1)) + 1)
但显然这真的很乱,我想知道是否有更简单的方法。我想用一个公式来做到这一点(如上一个例子),但最后一个公式做了我不喜欢的事情,比如执行两次连接)。我正在使用 Excel 2013。