=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?
答案 0 :(得分:0)
在某栏中尝试此操作:
=IFERROR(INDEX($U:$U,SMALL(ROW(myRange)*(myRange<>0),SUMPRODUCT(N(myRange=0))+ROWS($1:1))),"")
这是一个数组公式,必须通过按住 ctrl + shift 确认,同时按输入
在某个单元格中输入。看到它返回所需的值,然后填充直到它返回空白。
myRange
是一个大于最大行大小的任意范围。我使用了u38:u20000
编辑:要从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 输入
输入