我在 Excel 中有一个表格,其中有以下 2 个标题行布局:
A B C D E F G H I
1 qtr01, qtr02, qtr03, qtr04, qtr01, qtr02, qtr03, qtr04, qtr01
2 2013, 2013, 2013, 2013, 2012, 2012, 2012, 2012, 2015
如何使用公式找到匹配的列号(即列号 6)qtr02
?2012
注意:列和行在一定范围内是动态的。例如,由于插入了新的列记录,包含“qtr”信息的行可能会从第 1 行移到第 3 行,而与 qtr02 和 2012 匹配的标题可能会从 F 列移到 G 列。此动态更改取决于收到的源文件。
答案1
要获取列号,请使用
=MATCH(1, (1:1="qtr02")*(2:2=2012), 0)
这是一个“数组公式”,因此,输入后必须按Ctrl+ Shift+ Enter。
1:1
指代所有行1
。如果愿意,您可以使用A1:I1
来仅指代包含数据的单元格。(1:1="qtr02")
qtr02
在行中(或指定的单元格,视情况而定)查找1
,并构造结果的布尔数组。在本例中,数组为,{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE}
因为第二列和第六列包含qtr02
。- 同样,
(2:2=2012)
创建一个数组,其中2012
s 位于第 行2
:即{FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE}
。 *
当然是乘法。由于这是一个算术运算符,它将操作数转换为数字:FALSE
→0
和TRUE
→1
。然后它将两个数组成对相乘。这会导致1
在每个操作数数组具有1
(TRUE
) 的每个位置以及0
其他地方(换句话说,两个条件都为真的列)都产生一个。这相当于逻辑和函数。Excel 有一个名为的函数,AND()
其功能完全相同,但不幸的是,它不适用于数组。使用*
是一个笨拙的技巧,可以绕过AND()
函数中的这一限制。- 然后,当然,找到数组中第一个包含的元素 。
MATCH(1, array, 0)
1