如何将Google表单响应的邮箱统计结果替换为对应姓名?
解决方案:关联邮箱统计结果与姓名列表
完全可行,你可以通过VLOOKUP+ARRAYFORMULA+QUERY的组合公式,在第三个工作表中直接生成「姓名+次数」的列表。以下是具体实现方式:
前提说明
假设你的主邮箱列表工作表名为「主邮箱列表」,其中:
- A列:邮箱地址(与「Form Responses 1」B列格式一致)
- B列:对应姓名
公式写法(一键生成结果)
在第三个工作表的任意空白单元格(比如A1)输入以下公式:
=ARRAYFORMULA({ IFERROR(VLOOKUP(QUERY('Form Responses 1'!B2:B,"SELECT B WHERE B IS NOT NULL GROUP BY B ORDER BY COUNT(B) DESC LIMIT 10",0), '主邮箱列表'!A:B, 2, FALSE), "未匹配到姓名"), QUERY('Form Responses 1'!B2:B,"SELECT COUNT(B) WHERE B IS NOT NULL GROUP BY B ORDER BY COUNT(B) DESC LIMIT 10 LABEL COUNT(B) ''",0) })
公式解释
- 内层QUERY:先从表单响应中筛选出出现次数TOP10的邮箱地址,以及对应的次数
- VLOOKUP:将统计出的邮箱地址与主列表匹配,返回对应的姓名;用
IFERROR处理无匹配的情况,显示「未匹配到姓名」 - ARRAYFORMULA:将姓名和次数两个结果合并成二维数组,自动填充到多行
进阶优化(处理邮箱大小写问题)
如果表单提交的邮箱和主列表存在大小写差异(比如Email1@xxx.com和email1@xxx.com),可以用LOWER()统一格式,避免匹配失败:
=ARRAYFORMULA({ IFERROR(VLOOKUP(LOWER(QUERY('Form Responses 1'!B2:B,"SELECT B WHERE B IS NOT NULL GROUP BY B ORDER BY COUNT(B) DESC LIMIT 10",0)), LOWER('主邮箱列表'!A:B), 2, FALSE), "未匹配到姓名"), QUERY('Form Responses 1'!B2:B,"SELECT COUNT(B) WHERE B IS NOT NULL GROUP BY B ORDER BY COUNT(B) DESC LIMIT 10 LABEL COUNT(B) ''",0) })
另一种简洁写法(直接关联统计)
你也可以先给每个表单提交的邮箱匹配姓名,再按姓名统计次数,公式如下:
=QUERY(ARRAYFORMULA({VLOOKUP('Form Responses 1'!B2:B, '主邮箱列表'!A:B, 2, FALSE), 'Form Responses 1'!B2:B}), "SELECT Col1, COUNT(Col2) WHERE Col1 IS NOT NULL GROUP BY Col1 ORDER BY COUNT(Col2) DESC LIMIT 10 LABEL Col1 '姓名', COUNT(Col2) '次数'", 0)
这个公式一步完成「匹配姓名+统计次数」的操作,结果直接显示姓名和对应次数。
内容的提问来源于stack exchange,提问作者CB54
相关产品推荐
相关产品推荐

