如何在Excel中拼接与指定日期匹配的对应列备注值(优先非VBA)
按匹配日期批量拼接对应备注的非VBA实现方案
以下方案全部不需要写VBA代码,根据你使用的Excel版本选择对应方法即可。
首先统一约定数据源位置(你可以根据自己实际表名、列位置替换参数):
- 存放原始日期、备注的工作表命名为
源数据表,其中A列为日期列、B列为备注列,有效数据从第2行开始 - 存放结果的工作表中,A列为需要匹配的目标日期,从第2行开始,拼接后的备注内容写在同行B列
方法1:Excel 365/2021及以上版本(最简便,无需特殊操作)
直接在结果表B2单元格输入以下公式,下拉填充即可:
=TEXTJOIN("、",TRUE,FILTER(源数据表!$B$2:$B$1000,源数据表!$A$2:$A$1000=A2,""))
参数说明:
- 第一个参数
"、"是不同备注之间的分隔符,可以根据需求替换为逗号、换行符(换行用CHAR(10),需要提前把单元格设置为「自动换行」)等任意符号 - 第二个参数
TRUE表示自动跳过空的备注单元格,避免出现连续多余分隔符 - FILTER函数负责遍历源表所有行,筛选出和当前行目标日期完全匹配的所有备注内容
- 公式中
$B$2:$B$1000、$A$2:$A$1000的范围可以根据源表实际数据行数调整,不建议直接选整列,会增加不必要的计算量
效果参考:
期望实现效果
源数据样式参考
方法2:Excel 2019版本(无FILTER函数的兼容写法)
如果你的Excel版本没有FILTER函数,可以用TEXTJOIN+IF的数组公式实现:
在结果表B2单元格输入以下公式后,不要直接按回车,按住Ctrl+Shift+Enter三键结束数组公式输入,之后再下拉填充即可:
=TEXTJOIN("、",TRUE,IF(源数据表!$A$2:$A$1000=A2,源数据表!$B$2:$B$1000,""))
方法3:Excel 2016及更早版本(无TEXTJOIN函数,用Power Query实现)
如果你的版本连TEXTJOIN函数都没有,又不想用VBA,可以用自带的Power Query功能实现,后续源数据更新只要点刷新就能同步结果:
- 选中源表所有有效数据,按
Ctrl+T将其转换为超级表,点击「数据」选项卡-「从表格/区域」,将数据加载到Power Query编辑器 - 选中日期列,点击顶部菜单栏「分组依据」,分组操作选择「所有行」,自定义新列名(比如叫「分组结果」)后确认
- 新增自定义列,输入公式
Text.Combine([分组结果][备注列的实际列名],"、") - 删除多余的中间列,点击「关闭并上载」,把拼接好的结果加载到目标工作表即可
你之前用IF、IFS、CONCAT组合无法得到正确结果的核心原因:CONCAT本身不支持按条件遍历筛选整列数据,普通IF函数如果没有数组运算逻辑,只会匹配到第一个符合日期条件的备注,无法抓取同日期下的所有备注内容。
内容的提问来源于stack exchange,提问作者Chris R
相关产品推荐
相关产品推荐

