byrow() 根据其他列跳过进行优化

问题描述 投票:0回答:1

我在 col A9:A 中有 ID 数据,其中所有矩阵数据都放在 col AA9:AL 中。

在单元格 B9 中我输入了这段代码。我想为每一个不为空的行获取最正确的列号 - 每个 ID/行。

我使用这个代码:

=byrow( AA9:AL ,lambda( r ,  ifna( column(indirect( ADDRESS(1, MAX(FILTER(COLUMN(r), r<> "")), 4) ))  ,) ))

这完全符合我的要求。但我只是在想,如果我有 3000 行,并且一开始只有不多的 ID 数据和矩阵(假设现在我有 100 个数据 - 但数据增长到 3000 或更多),那么我认为 AA9 :AL 现在似乎“浪费”了计算。

所以我做了修改:

=BYROW(AA9:AL, LAMBDA(r, IF(ISBLANK(INDEX(A:A, ROW(r))), "", IFNA(COLUMN(INDIRECT(ADDRESS(1, MAX(FILTER(COLUMN(r), r<> "")), 4))), ""))))

我尝试仅在 A 不为空时进行处理。我没有看到任何显着的不同,因为我没有大量数据。但如果有人可以解释这种修改是否有帮助?也许第一个代码更快?因为第二个代码,即使它尝试跳过 Col A 为空的行,它也会添加另一个命令(if/isblank)来处理。

有什么想法吗?或者有人有更好的代码吗?

arrays performance google-sheets formula
1个回答
0
投票

因此,如果您只想对 A 列中有数据的

BYROW()
范围运行
AA9:AL(x)
此处 (x) 表示基于 A 列中数据的行号,那么这是一种方法。

=byrow(AA9:INDEX(AL:AL,COUNTA(A:A)),lambda(r,ifna(column(indirect(ADDRESS(1,MAX(FILTER(COLUMN(r),r<>"")),4))),)))
  • 这里

    AA9:INDEX(AL:AL,COUNTA(A:A))
    将返回一个值数组以及从AA9到AL列中最后一个非空单元格的单元格引用(假设A列中的数据内没有任何空白行)。如果您有空白行,那么您必须使用不同的方法。请参阅@TheMaster的这篇post

  • 然后

    LAMBDA()
    将把剩余的公式函数应用于AA9:ALx的每一行。

  • 如果 A 列中的数据直到第 100 行,则完整公式将仅应用于

    AA9:AL100
    范围。它不会计算其他单元格。如果 A 列中的数据达到 200 行,则完整公式将仅应用于
    AA9:AL200
    ,依此类推...

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.