簡體   English   中英

Google Sheets ArrayFormula 性能問題

[英]Google Sheets ArrayFormula performance problem

我有一個由 2 列組成的數組,其中每個單元格都應該執行屬於其前身的添加操作。 數組的長度取決於長度變化的第三列。 所以我決定使用 ArrayFormula 來執行操作:

=ARRAYFORMULA($D2:D+$C3:C)

從單元格 D3 開始,這應該取其前一行的值並添加其左側相鄰列的值。 不幸的是,這不起作用,因為 ArrayFormula 不支持不同長度的 arrays。

我解決這個問題的第一步是通過手動定義 arrays 使它們具有相同的長度:

=ARRAYFORMULA($D2:D290+$C3:C291)

這行得通,但我發現它的性能太慢了。 我可以從字面上看它逐個單元格地填充列單元格。 這取決於所需的預先計算,這些預先計算總是引發 CellChanged-Events 開始下一次計算。 看來,這不能並行化。

問題1:有沒有辦法更快地執行這個操作? 只要我保持 arrays 的長度固定,我就可以在每個單元格中使用簡單的加法運算,但這對我的第二個問題沒有幫助。

問題 2:有沒有辦法對不同長度的 arrays 進行這些計算?

示例它的外觀(固定數組長度) (裁剪以顯示,如何真正添加值

我添加了一個新工作表(“Erik Help”)。 在該表中,我刪除了 D 列中的所有內容,包括 header,並將其替換為 D1 中的以下公式:

=ArrayFormula({"Div/SLR-"&CHAR(10)&"Kumuliert";IF(A2:A="";;SUMIF(IF(ROW(A2:A);ROW(A2:A));"<="&ROW(A2:A);C2:C))})

header 中間的&CHAR(10)&不是絕對必要的; 我只是覺得它可以制作更整潔的紙張,因為它可以控制 header 的斷開並減小列的寬度。

公式的 rest 基本上用簡單的英文寫成,“繼續對列 C 中小於或等於 D 列中每一行向下移動的行逐一求和。”

至於工作表中處理速度慢的問題,該工作表中有超過 31,000 行,這意味着您的公式必須全部處理它們,即使它們中的大多數是不必要的。 您會注意到我添加的工作表在行和列中都進行了修剪,僅包含比您可能需要的略多一點的內容; 因此,我的公式會在您的 A1 公式加載后立即處理。

此外,我不清楚為什么您的 A1 公式要求從 2020 年 3 月 3 日開始接收數據,而此時您的第一個“Div/SLR-List”日期才到 6 月。 我建議將 A1 公式中的“起始”日期替換為對K2的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM