Excel技术问询:INDEX获取Jun表最后非空行及MAX公式原理
问题解答
ROW()函数的作用
ROW(Jun!C:C)的作用是生成一个包含Jun工作表C列所有行号的数组——第1行对应1,第2行对应2,一直到Excel允许的最大行号(通常是1048576)。简单说就是给C列每个单元格“贴上”它所在的行号标签。
MAX部分的工作原理
咱们拆解来看:
Jun!C:C<>"":对C列每个单元格做非空判断,非空单元格返回TRUE,空单元格返回FALSE。在Excel数组运算逻辑里,TRUE会自动转为数字1,FALSE转为0。- 两者相乘:
(Jun!C:C<>"")*ROW(Jun!C:C),非空单元格对应的行号会被保留(1×行号=行号),空单元格对应的行号则变成0(0×行号=0)。这一步后会得到一个数组,里面只有非空行的位置是对应行号,其余全是0。 MAX()的作用:从上述数组里取最大值,这个最大值就是C列最后一个非空单元格的行号——毕竟行号是递增的,最后一个非空行的行号肯定是数组里最大的那个。
为什么单独测试MAX得到1?
直接在单元格输入MAX((Jun!C:C<>"")*ROW(Jun!C:C))时,Excel默认按普通公式计算,只会处理第一行的内容:如果C1是空,结果就是0×1=0;如果C1非空,结果就是1×1=1,MAX只能取这一个值,所以得到1。
但把这部分放进INDEX函数里时,Excel会自动触发数组运算(旧版Excel需要手动按Ctrl+Shift+Enter确认),此时会遍历C列所有行,计算出完整数组后再取最大值,自然就能得到最后非空行的行号,配合INDEX就能取出对应单元格的值。
内容的提问来源于stack exchange,提问作者zzzgoo
相关产品推荐
相关产品推荐

