从索引指定的特定列中获取第一个非空值。 Excel

get first non-blank value from a specific column, specified by an index. Excel

此数组公式允许我通过在 A 列中搜索第一个非空白值来填充 D4(请参阅 link - https://exceljet.net/formula/get-first-non-blank-value-in-a-list

=INDEX(A2:A1000,MATCH(FALSE,ISBLANK(A2:A1000),0))

不过,我想对其进行优化,以便搜索的列根据在 C4 中输入的值而变化。

例如,如果 C4 中的值为 1,那么我将得到值 13.86。如果 C4 中的值为 2,我将得到值 10。请看这里 - click for link to example data

我尝试用 IF 函数修改上面的数组公式,但没有成功。我是个新手,所以请多关照:)

=IF(C4=1,(INDEX(A2:A1000,MATCH(FALSE,ISBLANK(A2:A1000)))),IF(C4=1,(INDEX(B2:B1000,MATCH(FALSE,ISBLANK(B2:B1000)))),0))

在D5中作为数组公式(带CSE),

=INDEX(A2:B1000, MATCH(FALSE, ISBLANK(INDEX(A2:B1000, 0, C4)),0), C4)

好的。它看起来会让人望而生畏,但如果你仔细观察,相信我,它真的是一个非常简单的结合其他几个公式

D4或所需单元格中输入以下公式并按Ctrl+Shift+Enter

=INDEX(INDIRECT(SUBSTITUTE(ADDRESS(1,K4,4),"1","")&1&":"&SUBSTITUTE(ADDRESS(1,K4,4),"1","")&100),MATCH(FALSE,ISBLANK(INDIRECT(SUBSTITUTE(ADDRESS(1,K4,4),"1","")&1&":"&SUBSTITUTE(ADDRESS(1,K4,4),"1","")&100)),0))

这里 K4 是我的输入单元格(对于你的情况是 C4),我考虑了 1:100 的范围,这与你的 1:1000 不同。所以相应地改变。

解释

  1. ADDRESS 函数 returns 基于您输入的地址文本。对于输入 8,它将给出 H1

=INDEX(INDIRECT(SUBSTITUTE("H1","1","")&1&":"&SUBSTITUTE("H1","1","")&100),MATCH(FALSE,ISBLANK(INDIRECT(SUBSTITUTE("H1","1","")&1&":"&SUBSTITUTE("H1","1","")&100)),0))

  1. SUBSTITUTE 函数然后剥离 1 并仅给出输出 H,然后与 INDIRECT 函数一起使用以获得范围。

=INDEX(INDIRECT("H"&1&":"&"H"&100),MATCH(FALSE,ISBLANK(INDIRECT("H"&1&":"&"H"&100)),0))

=INDEX(INDIRECT("H1:H100"),MATCH(FALSE,ISBLANK(INDIRECT("H1:H100")),0))

休息正是你的公式。