使用函数作为数组公式来计算每一行的数据

Using function as an arrayformula to calculate each row's data

该函数的作用是转置一组 ID 行和一组变化的数量行。在 return 中,具有数量的行使用 ID return 编辑,其余数组用于查询定价范围。最后,所有 id 及其各自数量的总价格相加。最终总价也乘以CT中的相应行。

现在我在 CW4:CW 列的每一行中都有函数,因为我似乎无法获得 arrayformula 来计算我需要的数据。

展开sheet(隐藏不必要的栏目和页面): https://docs.google.com/spreadsheets/d/1E5p0WPQg6F8ZlBDWpKrJKHoXIlfQOOYYs7491Mr-EIA/edit?usp=sharing

未来如果我的解释不是最好的道歉,现在已经晚了,我已经花了很多时间解决这个问题。如果您需要说明或示例,请随时发表评论 sheet。

函数:

=ARRAYFORMULA(IFERROR(IFNA(
QUERY(
{VLOOKUP(QUERY({SPLIT(TRANSPOSE(CX:EO & " " & CX4:EO4), " ", 1, 0)}, "SELECT Col1 WHERE Col2 IS NOT NULL", 0), EP:ER, 3) *
QUERY({SPLIT(TRANSPOSE(CX:EO & " " & CX4:EO4), " ", 1, 0)}, "SELECT Col2 WHERE Col2 IS NOT NULL", 0)}, 
"SELECT sum(Col1) LABEL sum(Col1) ''", 0) / CT4, ""), ""
))

我需要作为数组工作的引用:

CX4:EO4
CT4

数据图片:

尝试:

=ARRAYFORMULA(IFERROR(MMULT(IFERROR(INDIRECT("I4:AZ"&MAX(ROW(A4:A)*(A4:A<>"")))*
 HLOOKUP(IF(INDIRECT("I4:AZ"&MAX(ROW(A4:A)*(A4:A<>"")))="",,I3:AZ3), 
 TRANSPOSE(BA:BC), 3, ), 0), SEQUENCE(COLUMNS(I:AZ), 1, 1, ))/E4:E))

demo spreadsheet

或更短:

=INDEX(IFERROR(MMULT(IFNA(INDIRECT("I4:AZ"&MAX(ROW(A4:A)*(A4:A<>"")))*
 VLOOKUP(IF(INDIRECT("I4:AZ"&MAX(ROW(A4:A)*(A4:A<>"")))="",,I3:AZ3), 
 BA:BC, 3, ), 0), FLATTEN(COLUMN(I:AZ))^0)/E4:E))

更短但更慢(不推荐使用):

=INDEX(IFERROR(MMULT(IFNA(I4:AZ*VLOOKUP(IF(I4:AZ="",,I3:AZ3), 
 BA:BC, 3, ), 0), FLATTEN(COLUMN(I:AZ))^0)/E4:E))