如何查找并返回未知范围内的所有非零值?

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

我试图用这个公式来查找并返回一列数据中的所有非零值(从第38行开始),但是我不知道在导入数据之前会有多less行。 我希望能够自动化sorting,但是如果我使用( U:U )或者select比实际填充行数多得多的数字(例如U$38:U$20000 ),则会出现错误。

有没有办法:

a)获得excel自动将( U$38:U$#### )更改为填充数据的行数? (即如果有400行,则会变成( U$38:U$400 )。)

要么

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

编辑:

如下图所示,我设置了电子表格,它不仅返回非零值(来自U列),而且还返回它所对应的时间(来自列AG)。 问题是当我尝试增加范围。

我将会看到许多不同数据文件的数据量不同,所以我希望能够实现自动化 – 而且每次我需要的时候,不必U$38:U$1000所有U$38:U$1000的钱改变范围。 那有意义吗?

用VBA可以吗?

示例数据

试试这个在一些列:

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

这是一个数组公式,并且必须通过按住Ctrl + Shift同时按Enter来确认

在某个单元格中input 看到它返回所需的值,然后填写,直到它返回空白。

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

在这里输入图像说明

编辑 :要从一个比U不同的列中的匹配行返回值,只需将INDEX函数中的array参数从$U:$U更改为所需的列,例如: $AG:$AG

编辑2:如果您需要忽略列U错误值,请尝试此CSEinput公式:

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

这只是对现有公式的修正,使其在更广泛的范围内工作,允许负面的价值观和忽略空单元格,但是(正如我怀疑的)其他人可能会build议更有效的解决scheme!

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

这可以通过使用名称pipe理器声明一个dynamic范围这样更有效率: –

 =Sheet1!$U$38:INDEX(Sheet1!$U$38:$U$10000,COUNT(Sheet1!$U$38:$U$10000)) 

并调用它(比如说)DynamicRange。

然后公式变成:

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

这些是数组公式,必须使用Ctrl Shift Enterinput

在这里输入图像说明