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

时间:2016-09-23 09:26:54

标签: excel sorting indexing countif

=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行开始),但我不知道之前会有多少行我导入数据。我希望能够自动排序,但如果我使用(U:U)或选择比实际填充行数大得多的数字(例如U$38:U$20000),我得到一个错误。

有没有办法:

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

OR

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

编辑:

从下图中可以看出,我已经设置了我的电子表格,以便它不仅返回非零值(来自列U),还返回它对应的时间(来自列AG)至。问题是当我试图增加范围时。

我会查看大量具有不同数据量的不同数据文件,因此我希望能够将其自动化 - 而不必使用所有U$38:U$1000&#来摆弄它39;每当我需要改变范围时。这有意义吗?

是否可以使用VBA?

Example Data

2 个答案:

答案 0 :(得分:0)

在某栏中尝试此操作:

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

这是一个数组公式,必须通过按住 ctrl + shift 确认,同时按输入

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

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

enter image description here

编辑:要从U以外的其他列中的匹配行返回值,只需更改array函数中的INDEX参数$U:$U 1}}到所需的列,例如:$AG:$AG

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

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

答案 1 :(得分:0)

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

=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))))

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

=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 输入

输入

enter image description here