Google Sheets ArrayFormula性能问题
Google Sheets ArrayFormula performance problem
我有一个包含 2 列的数组,其中每个单元格都应执行属于其前身的加法操作。
数组的长度取决于长度变化的第 3 列。所以我决定使用 ArrayFormula 来执行操作:
=ARRAYFORMULA($D2:D+$C3:C)
从单元格 D3 开始,这应该采用其前行的值并添加其左邻列的值。不幸的是,这不起作用,因为 ArrayFormula 不支持不同长度的数组。
我解决这个问题的第一步是通过手动定义数组使它们具有相同的长度:
=ARRAYFORMULA($D2:D290+$C3:C291)
这行得通,但我发现它的性能太慢了。我可以从字面上看它逐个单元格地填充列。这取决于所需的预计算,它总是引发 CellChanged-Events 开始下一次计算。看来,这不能并行化。
问题一:有没有办法更快的执行这个操作?只要我保持数组的长度固定,我就可以在每个单元格中使用简单的加法运算,但这对我的第二个问题没有帮助。
问题 2:有没有办法对不同长度的数组进行这些计算?
Example how it looks (fixed array-length)
(Cropped to show, how the values really are added
我添加了一个新的 sheet(“Erik 帮助”)。在 sheet 中,我删除了 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)&
不是绝对必要的;我只是觉得它使 sheet 更整洁,因为它允许控制 header 的中断并减小列的宽度。
公式的其余部分用简单的英语基本上是“继续对 C 列中小于或等于 D 列中每一行的行进行求和,逐个向下移动。”
至于你的 sheet 中的处理速度慢,你的 sheet 中有超过 31,000 行,这意味着你的公式必须处理它们 all ,即使其中大部分是不必要的。您会注意到我添加的 sheet 在行和列中都被修剪,只包含比您可能需要的略多的内容;因此,我的公式会在您的 A1 公式加载后立即处理。
另外,我不清楚为什么你的 A1 公式要求从 2020 年 3 月 3 日开始接收数据,而你的第一个“Div/SLR-List”日期要到 6 月。我建议将 A1 公式中的“开始”日期替换为对 K2
.
的引用
我有一个包含 2 列的数组,其中每个单元格都应执行属于其前身的加法操作。 数组的长度取决于长度变化的第 3 列。所以我决定使用 ArrayFormula 来执行操作:
=ARRAYFORMULA($D2:D+$C3:C)
从单元格 D3 开始,这应该采用其前行的值并添加其左邻列的值。不幸的是,这不起作用,因为 ArrayFormula 不支持不同长度的数组。
我解决这个问题的第一步是通过手动定义数组使它们具有相同的长度:
=ARRAYFORMULA($D2:D290+$C3:C291)
这行得通,但我发现它的性能太慢了。我可以从字面上看它逐个单元格地填充列。这取决于所需的预计算,它总是引发 CellChanged-Events 开始下一次计算。看来,这不能并行化。
问题一:有没有办法更快的执行这个操作?只要我保持数组的长度固定,我就可以在每个单元格中使用简单的加法运算,但这对我的第二个问题没有帮助。
问题 2:有没有办法对不同长度的数组进行这些计算?
Example how it looks (fixed array-length) (Cropped to show, how the values really are added
我添加了一个新的 sheet(“Erik 帮助”)。在 sheet 中,我删除了 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)&
不是绝对必要的;我只是觉得它使 sheet 更整洁,因为它允许控制 header 的中断并减小列的宽度。
公式的其余部分用简单的英语基本上是“继续对 C 列中小于或等于 D 列中每一行的行进行求和,逐个向下移动。”
至于你的 sheet 中的处理速度慢,你的 sheet 中有超过 31,000 行,这意味着你的公式必须处理它们 all ,即使其中大部分是不必要的。您会注意到我添加的 sheet 在行和列中都被修剪,只包含比您可能需要的略多的内容;因此,我的公式会在您的 A1 公式加载后立即处理。
另外,我不清楚为什么你的 A1 公式要求从 2020 年 3 月 3 日开始接收数据,而你的第一个“Div/SLR-List”日期要到 6 月。我建议将 A1 公式中的“开始”日期替换为对 K2
.