如何在Excel中自动生成包含指定字段的工作表名称列表?
实现Excel自动填充"Used on Other Forms"列的方案
核心结论
完全可行,可通过Excel公式(分版本)自动遍历所有工作表,收集包含相同Field的表单名称并整理为列表。
你之前的公式失效原因
你得到的公式逻辑完全偏离需求:
CELL("filename")仅获取当前工作表的文件路径,导致INDIRECT始终引用当前表的A列,没有遍历其他工作表- 条件判断
COUNTIF(..., "Field")是检查当前表A列是否等于文本"Field",而非匹配当前行的Field值 - 旧版本Excel中这类数组公式需要按
Ctrl+Shift+Enter触发,但即使触发,逻辑错误也无法得到正确结果
解决方案(分Excel版本)
前提准备:定义工作表名称数组
先定义一个可复用的名称,用于快速获取所有工作表名称:
- 点击「公式」选项卡 → 「定义名称」
- 名称输入
SheetNames - 引用位置根据Excel版本选择:
- Excel 365/2021:
=TEXTAFTER(GET.WORKBOOK(1), "]") - 旧版Excel(2019及更早):
=MID(GET.WORKBOOK(1), FIND("]", GET.WORKBOOK(1))+1, 255)
- Excel 365/2021:
- 点击确定,将文件保存为
.xlsm格式(因使用宏表函数GET.WORKBOOK)
方案1:Excel 365/2021(支持动态数组)
在任意工作表的Used on Other Forms列(假设为D列)的第2行(对应A2的Field)输入以下公式,下拉填充即可:
=TEXTJOIN(", ",, FILTER(SheetNames, COUNTIF(INDIRECT("'"&SheetNames&"'!A:A"), A2)>0))
公式说明:
FILTER(SheetNames, ...):筛选出所有包含当前Field(A2)的工作表COUNTIF(INDIRECT(...), A2):动态引用每个工作表的A列,检查是否存在当前FieldTEXTJOIN(", ",, ...):将筛选后的工作表名称用逗号连接成字符串
方案2:旧版Excel(2019及更早)
在D2单元格输入以下公式,按Ctrl+Shift+Enter触发数组公式,然后下拉填充:
=TEXTJOIN(", ", TRUE, IF(COUNTIF(INDIRECT("'"&INDEX(SheetNames, ROW(INDIRECT("1:"&COUNTA(SheetNames))))&"'!A:A"), A2)>0, INDEX(SheetNames, ROW(INDIRECT("1:"&COUNTA(SheetNames)))), ""))
公式说明:
ROW(INDIRECT("1:"&COUNTA(SheetNames))):生成工作表数量的序列,遍历所有工作表INDEX(SheetNames, ...):依次取出每个工作表名称IF(...):判断当前工作表是否包含目标Field,是则保留名称,否则返回空TEXTJOIN:将有效名称连接为字符串
效果验证
以你举例的场景:工作表A、B、C、D、E的A列均包含"Date of Birth",则E工作表中该字段对应的D列单元格会显示A, C, E,完全符合需求。
内容的提问来源于stack exchange,提问作者dmac
相关产品推荐
相关产品推荐

