Google 表格中自动填充公式的 ARRAYFORMULA 问题
Trouble with ARRAYFORMULA for auto-filling formulas in Google Sheets
我正在尝试使用以下公式自动填充 "Results" sheet 中的 Google 工作表列,该公式从 "Source" 传播sheet:
=IFERROR(INDEX(Source!$B$2:$D,MATCH($A2&C$1,Source!$B$2:$B&Source!$C$2:$C,0),3)," ")
当我将该公式放入 ARRAYFORMULA 时,它不会自动填充,并且将 MATCH search_key 更改为一个范围(即 $A2:$A&C$1)也无法解决问题。
即,这些都不起作用:
=ArrayFormula(IFERROR(INDEX(Source!$B$2:$D,MATCH($A2&C$1,Source!$B$2:$B&Source!$C$2:$C,0),3)," “))
=ArrayFormula(IFERROR(INDEX(Source!$B$2:$D,MATCH($A2:$A&C$1,Source!$B$2:$B&Source!$C$2:$C,0),3)," ") )
有办法解决这个问题吗?或者自动填充公式的替代方法?我也愿意使用 INDEX/MATCH 以外的函数,只要它可以根据两个垂直标准进行查找即可。不幸的是,我认为主元 table 不适合我的目的,因为我的 "Results" 页面还查询另一个 spreadsheet 以提供其他信息。
此处示例:https://docs.google.com/spreadsheets/d/1dsaMYsJeZl2o_rNTLwaVhnEehFvAKRMXghAJeEK220s/edit?usp=sharing
这是您要查找的公式:
=ARRAYFORMULA(IFERROR(HLOOKUP(Source!$D,Source!$D:$D,MATCH($A2:$A4&C,ARRAYFORMULA(Source!$B:$B&Source!$C:$C),0),0),0))
我测试了这个,它工作得很好。
TL;DR
要回答您的公式错误的原因,
MATCH
中的第二个参数应该有一个 ARRAYFORMULA
否则你基本上只匹配第一个元素。
INDEX
不适用于 ARRAYFORMULA
。它只能搜索给定范围内的单个值。
第一部分可以通过在MATCH
中添加ARRAYFORMULA
来解决。
如果您不搜索单元格组合(日期和姓名),一个简单的 VLOOKUP
就可以解决第二个问题。一个扭曲的 HLOOKUP
来拯救你。
没有 IFERROR
部分,公式如下所示:
=ARRAYFORMULA(HLOOKUP(Source!$D,Source!$D:$D,MATCH($A2:$A4&C,ARRAYFORMULA(Source!$B:$B&Source!$C:$C),0),0))
此公式产生相同的输出(参见单元格 I1):
=QUERY({Source!A:D,ARRAYFORMULA(VLOOKUP(Source!B:B,'Project Lookup'!A:B,2,0))},"select Col2,Col5,sum(Col4) where Col1 is not null group by Col2,Col5 pivot Col3")
我正在尝试使用以下公式自动填充 "Results" sheet 中的 Google 工作表列,该公式从 "Source" 传播sheet:
=IFERROR(INDEX(Source!$B$2:$D,MATCH($A2&C$1,Source!$B$2:$B&Source!$C$2:$C,0),3)," ")
当我将该公式放入 ARRAYFORMULA 时,它不会自动填充,并且将 MATCH search_key 更改为一个范围(即 $A2:$A&C$1)也无法解决问题。
即,这些都不起作用:
=ArrayFormula(IFERROR(INDEX(Source!$B$2:$D,MATCH($A2&C$1,Source!$B$2:$B&Source!$C$2:$C,0),3)," “)) =ArrayFormula(IFERROR(INDEX(Source!$B$2:$D,MATCH($A2:$A&C$1,Source!$B$2:$B&Source!$C$2:$C,0),3)," ") )
有办法解决这个问题吗?或者自动填充公式的替代方法?我也愿意使用 INDEX/MATCH 以外的函数,只要它可以根据两个垂直标准进行查找即可。不幸的是,我认为主元 table 不适合我的目的,因为我的 "Results" 页面还查询另一个 spreadsheet 以提供其他信息。
此处示例:https://docs.google.com/spreadsheets/d/1dsaMYsJeZl2o_rNTLwaVhnEehFvAKRMXghAJeEK220s/edit?usp=sharing
这是您要查找的公式:
=ARRAYFORMULA(IFERROR(HLOOKUP(Source!$D,Source!$D:$D,MATCH($A2:$A4&C,ARRAYFORMULA(Source!$B:$B&Source!$C:$C),0),0),0))
我测试了这个,它工作得很好。
TL;DR
要回答您的公式错误的原因,
MATCH
中的第二个参数应该有一个ARRAYFORMULA
否则你基本上只匹配第一个元素。INDEX
不适用于ARRAYFORMULA
。它只能搜索给定范围内的单个值。
第一部分可以通过在MATCH
中添加ARRAYFORMULA
来解决。
如果您不搜索单元格组合(日期和姓名),一个简单的 VLOOKUP
就可以解决第二个问题。一个扭曲的 HLOOKUP
来拯救你。
没有 IFERROR
部分,公式如下所示:
=ARRAYFORMULA(HLOOKUP(Source!$D,Source!$D:$D,MATCH($A2:$A4&C,ARRAYFORMULA(Source!$B:$B&Source!$C:$C),0),0))
此公式产生相同的输出(参见单元格 I1):
=QUERY({Source!A:D,ARRAYFORMULA(VLOOKUP(Source!B:B,'Project Lookup'!A:B,2,0))},"select Col2,Col5,sum(Col4) where Col1 is not null group by Col2,Col5 pivot Col3")