使用函数作为数组公式来计算每一行的数据
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))
该函数的作用是转置一组 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))