我正在尝试找到一个公式,其中我可以查看一行中的列范围并返回该行中出现第一个非零值的列标题,从左到右移动。
以下是我的数据的截图:
我希望在 H 列中看到的每一行结果如下:
9 = 10/31/2011
10 = 11/30/2011
11 = 11/30/2011
12 = 12/31/2011
我尝试了一些数组公式并搜索了函数,但尚未找到任何成功的方法。我希望其他 Excel 专家能提供一些建议。
如果可以的话,我现在想避免编写 UDF。
答案1
当然,试试这个
=INDEX(J$8:N$8,MATCH(TRUE,INDEX(J9:N9<>0,),0))
答案2
我接受了上述答案,但想展示我发现的另一种方法,以防它对任何人有帮助。
=OFFSET($I$8,0,MATCH(0,J10:N10,1)+1)
你也可以这样写:
=INDEX(J$8:N$8,MATCH(0,J9:N9,1)+1)
答案3
公认回答由 @raystafarian 补充解释:
=INDEX(J$8:N$8,MATCH(TRUE,INDEX(J9:N9<>0,),0))
这INDEX 函数返回表或范围内的值或对值的引用。
INDEX(array, row_num, [column_num])
这MATCH 函数在单元格区域内搜索指定项目,然后返回该项目在该区域中的相对位置。
MATCH(lookup_value, lookup_array, [match_type])
因此在这种情况下,
=INDEX(J9:N9<>0,)
=MATCH(TRUE,INDEX(J9:N9<>0,),0)
给出第一个匹配的位置(相对列号),因此第 9 行是 1,第 10 行和第 11 行是 2,第 12 行是 3
=INDEX(J$8:N$8,MATCH(TRUE,INDEX(J9:N9<>0,),0))
使用相对列位置编号(1、2、2 和 3)从数组 J$8:N$8 中获取实际值
答案4
无法使上述公式起作用,因为公式将返回非零的最大列(数字)。我使用了 =MATCH(SMALL(J10:N10,1),J10:N10,0)。小值会忽略零值。