我想使用以下公式:
INDEX(A6:A94,MODE(MATCH(A6:A94,A6:A94,0)))
除了确切的行数不明确(使用 VBA 导入)。如何引用从 A6 开始的所有非空白单元格以用于上述公式?
它应该是这样的:INDEX(A6:A{last non blank},MODE(MATCH(A6:A{last non blank},A6:A{last non blank},0)))
谢谢你!
答案1
有很多方法可以引用可变大小的范围。还有几种方法可以找到列中的最后一个非空白。
首先,如何找到列中最后一列非空的行A:A
:
我将把这些公式包装在一个语句中,如果出错,该语句IFERROR
将返回。这是因为你声明你的数据从第 6 行开始,所以如果出现问题,这将让你返回而不是一些错误消息。如果你6
A6
想显示错误,则只需删除IFERROR
包装即可。
如果您的数据全部是数字,请使用以下方法:IFERROR(MATCH(10^308,A:A),6)
如果您的数据全部是文本,请使用以下方法:IFERROR(MATCH(REPT(CHAR(255),255),A:A),6)
如果您的数据是数字和文本,则找出两者中的最大值:MAX(IFERROR(MATCH(10^308,A:A),6),IFERROR(MATCH(REPT(CHAR(255),255),A:A),6)
Ctrl您也可以使用数组公式,但我倾向于避免使用它们,因为它们通常比较慢。它将如下所示,并使用+ Shift+输入Enter。(如果公式两侧出现花括号 { },您就会知道它是正确的。)
MAX(ROW(A:A)*NOT(ISBLANK(A:A)))
二、如何引用范围A6:A{last non blank row}
:
由于您需要三次相同的引用,因此添加辅助单元格可能是一个好主意。有多种方法可以实现我们想要的结果,但我将展示几种。假设辅助单元格是,B1
而您想要的公式是B2
。我将使用“最后一行”示例公式作为文本,因为我相信这就是您的数据。您应该将其更改为您需要的任何内容。
方法INDEX
:(可能是最好的选择)
B1 = IFERROR(MATCH(REPT(CHAR(255),255),A:A),6)
B2 = INDEX(A6:INDEX(A:A,B1),MODE(MATCH(A6:INDEX(A:A,B1),A6:INDEX(A:A,B1),0)))
方法INDIRECT
:
B1 = "A6:A"&IFERROR(MATCH(REPT(CHAR(255),255),A:A),6)
B2 = INDEX(INDIRECT(B1),MODE(MATCH(INDIRECT(B1),INDIRECT(B1),0)))
方法OFFSET
:
B1 = IFERROR(MATCH(REPT(CHAR(255),255),A:A),6)
B2 =INDEX(OFFSET(A6,0,0,B1-5),MODE(MATCH(OFFSET(A6,0,0,B1-5),OFFSET(A6,0,0,B1-5),0)))