Google Sheets通过单元格地址引用匹配填充组合名称实现问询
解决方案
公式方案(轻量场景首选)
在Sheet1的C3单元格输入以下公式,拖拽填充到所有需要核对的单元格区域(C3:X30)即可:
=TEXTJOIN(", ", TRUE, FILTER(Sheet2!$A$4:$A, Sheet2!$E$4:$E = ADDRESS(ROW(), COLUMN(), 4)))
如果你的Google Sheets区域设置使用分号作为参数分隔符,改用以下版本:
=TEXTJOIN(", "; TRUE; FILTER(Sheet2!$A$4:$A; Sheet2!$E$4:$E = ADDRESS(ROW(); COLUMN(); 4)))
如果想要实现自动溢出无需拖拽,使用单个数组公式放在C3单元格即可自动填充整个目标区域:
=MAKEARRAY(28, 22, LAMBDA(r, c, TEXTJOIN(", ", TRUE, FILTER(Sheet2!$A$4:$A, Sheet2!$E$4:$E = ADDRESS(r+2, c+2, 4)))))
公式说明:
Sheet2!$A$4:$A为Sheet2中存储组合名称的列,可根据实际范围调整Sheet2!$E$4:$E为Sheet2中存储Sheet1单元格地址的列,可根据实际范围调整- 无匹配组合时单元格会自动留空,方便识别未使用的组合
Apps Script方案(大数据量/自动更新场景适用)
如果数据量较大公式运行卡顿,或者需要自动同步Sheet2的更新,使用脚本实现:
- 打开当前表格顶部菜单栏「扩展程序」>「Apps Script」
- 清空默认代码,粘贴以下内容:
function backfillCombinationNames() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet1 = ss.getSheetByName("Sheet1"); const sheet2 = ss.getSheetByName("Sheet2"); // 读取Sheet2数据,列A为组合名,列E为对应Sheet1地址,可根据实际调整范围 const sheet2Data = sheet2.getRange("A4:E" + sheet2.getLastRow()).getValues(); const addrToCombos = {}; sheet2Data.forEach(row => { const comboName = row[0]; const addr = row[4]; if (!comboName || !addr) return; addrToCombos[addr] = addrToCombos[addr] ? [...addrToCombos[addr], comboName] : [comboName]; }); // 填充Sheet1目标区域C3:X30 const targetRange = sheet1.getRange("C3:X30"); const rows = targetRange.getNumRows(); const cols = targetRange.getNumColumns(); const output = []; for (let i = 0; i < rows; i++) { const rowVals = []; for (let j = 0; j < cols; j++) { const currentAddr = sheet1.getRange(i + 3, j + 3).getA1Notation(); rowVals.push(addrToCombos[currentAddr] ? addrToCombos[currentAddr].join(", ") : ""); } output.push(rowVals); } targetRange.setValues(output); }
- 保存项目,点击运行完成授权即可一次性完成填充。如果需要自动更新,可以在Apps Script面板添加触发器,设置为表格变更时自动运行该函数。
内容的提问来源于stack exchange,提问作者Paweł Olszowy
相关产品推荐
相关产品推荐

