GSheets(Google Sheets)数组查找值并返回对应范围结果方案咨询
可行解决方案
方案1:无需调整现有表格结构,直接使用公式实现
在Volunteers工作表的Assignation (expected)列第二行(假设姓名存放在A列,第二行开始是有效数据)输入以下公式,手动下拉填充即可匹配所有志愿者的任务:
=TEXTJOIN(CHAR(10), TRUE, BYROW({'Activity 1'!A1:Z100, 'Activity 2'!A1:Z100, 'Activity 3'!A1:Z100}, LAMBDA(row, IF(COUNTIF(row, A2)>0, INDEX(row, 1)&" "&INDEX(row, 2)&":"&INDEX(row, MATCH(A2, row, 0)), "" )) ))
说明:
- 大括号内的工作表范围可根据你实际的活动数量增删,不需要提前排序
Activity表内的志愿者名单 - 公式里的
INDEX(row, 1)、INDEX(row, 2)分别对应你Activity工作表每行的日期、时间字段,可根据你的实际表格列位置调整数字 TEXTJOIN会自动把同一个志愿者的多个任务用换行分隔,合并在同一个单元格内- 若使用新版Google Sheets支持动态溢出,可改用以下公式,输入一次即可自动匹配整列志愿者,不需要手动下拉:
=BYROW(A2:A, LAMBDA(name, IF(name="","", TEXTJOIN(CHAR(10), TRUE, BYROW({'Activity 1'!A1:Z100, 'Activity 2'!A1:Z100, 'Activity 3'!A1:Z100}, LAMBDA(row, IF(COUNTIF(row, name)>0, INDEX(row, 1)&" "&INDEX(row, 2)&":"&INDEX(row, MATCH(name, row, 0)), "" )) ) )))
方案2:微调表结构,后续维护成本更低
如果允许调整Activity X表的排版,建议你在每个Activity表的最右侧新增1列,预先把每行的「日期+时间+任务名称」拼接成摘要信息,比如每行的Z列输入=A1&" "&B1&":"&C1,之后可以用更简单的公式查询,运算速度也更快:
=TEXTJOIN(CHAR(10), TRUE, FILTER({'Activity 1'!Z:Z, 'Activity 2'!Z:Z, 'Activity 3'!Z:Z}, {'Activity 1'!A:Y, 'Activity 2'!A:Y, 'Activity 3'!A:Y}=A2) )
后续新增活动时,只需要在大括号内新增对应工作表的相关列即可,不需要修改其他逻辑。
内容的提问来源于stack exchange,提问作者koyaaniqatsi
相关产品推荐
相关产品推荐

