如何找到 & return 未知范围内的所有非零值?

How to find & return all non-zero values within an unknown range?

=IF(ROWS(AA:AA38)>COUNTIF(U:U00,"<>0"),"",INDEX(U:U00,SMALL(IF(U:U00>0,ROW(U:U00)-ROW(U)+1),ROWS(AA:AA38))))

我正在尝试使用此公式查找并 return 数据列中的所有非零值(从第 38 行开始),但我不知道会有多少行在我导入数据之前。我希望能够自动排序,但如果我使用 (U:U) 或选择比实际填充行数大得多的数字(例如 U:U000),我会得到一个错误。

有没有办法:

a) 让 excel 自动将 (U:U$####) 更改为填充数据的行数? (即,如果有 400 行,它将变为 (U:U0)。)

b) 找到一个可以在不知道行数的情况下找出所有非零值的替代公式?

编辑:

正如您从下图中看到的那样,我已经设置了我的电子表格,因此它不仅 return 是非零值(来自 U 列),还有时间(来自列AG) 它对应的。问题是当我尝试增加范围时。

我将查看大量数据量不同的不同数据文件,因此我希望能够将其自动化 - 而不必 fiddle 处理所有 [=16] =] 每次我需要更改范围时。这有意义吗?

可以用 VBA 代替吗?

Example Data

在某个专栏中试试这个:

=IFERROR(INDEX($U:$U,SMALL(ROW(myRange)*(myRange<>0),SUMPRODUCT(N(myRange=0))+ROWS(:1))),"")

这是一个数组公式,必须按住 ctrl + shift 并按 enter[= 确认41=]

在某个单元格中输入它。看到它 return 是所需的值,然后向下填充直到它 return 是空白。

myRange 是大于最大行大小的任意范围。我用了 u38:u20000

EDIT:为了 return 来自与 U 不同列中的匹配行的值,只需更改 array 中的参数INDEX 函数从 $U:$U 到所需的列,例如:$AG:$AG

EDIT2: 如果您需要忽略列 U 中的错误值,试试这个 CSE 输入的公式:

=IFERROR(INDEX(U:U,SMALL(ROW(myRange)*(IFERROR(--myRange,0)<>0),SUMPRODUCT(N(IFERROR(--myRange,0)=0))+ROWS(:1))),"")

这只是对现有公式的修正,使其适用于更广泛的范围,允许负值并忽略空单元格,但(正如我所怀疑的)其他人可能会提出更有效的解决方案!

=IF(ROWS(AA:AA38)>COUNTIFS(U:U000,"<>0",U:U000,"<>"),"",INDEX(U:U000,SMALL(IF(U:U000<>0,ROW(U:U000)-ROW(U)+1),ROWS(AA:AA38))))

这可以通过使用名称管理器声明动态范围来提高效率:-

=Sheet1!$U:INDEX(Sheet1!$U:$U000,COUNT(Sheet1!$U:$U000))

并调用它(比如)DynamicRange。

则公式变为:-

=IFERROR(INDEX(DynamicRange,SMALL(IF(DynamicRange<>0,ROW(DynamicRange )-ROW(INDEX( DynamicRange,1 ))+1 ),ROWS(:1))),  "")

这些是数组公式,必须使用 CtrlShiftEnter[=14 输入=]