求实现“基于行内关联数据提取对应列标题”的Excel Formula
求实现“基于行内关联数据提取对应列标题”的Excel Formula
嘿,我完全get到你的需求啦——就是要针对每一行发票,自动把发票日期加上那些对应单元格有值的列标题(比如你说的A、B这类)整合到“payable for”列里对吧?我给你分两种Excel版本提供实用的公式方案:
适用于Excel 365/2021(支持动态数组)
这个版本用TEXTJOIN函数能轻松搞定,假设:
- 发票日期在
B2单元格 - 需要检查的列标题在
C1:Z1范围 - 对应行的数值在
C2:Z2范围
直接在“payable for”列的单元格输入公式:
=B2&" "&TEXTJOIN(", ", TRUE, IF(C2:Z2<>"", C1:Z1, ""))
公式说明:
IF(C2:Z2<>"", C1:Z1, ""):逐个检查当前行的单元格,只要有值就返回对应的列标题,空单元格则返回空文本TEXTJOIN(", ", TRUE, ...):把所有返回的列标题用「逗号+空格」连接起来,TRUE参数会自动忽略空文本- 最后用
&把发票日期和连接好的标题串拼接在一起,就得到你要的结果啦
比如你提到的2022年4月1日的发票行,假设B2=4/1/2022,C2和D2有值、对应列标题是A和B,公式会直接返回 4/1/2022 A, B,完美匹配你的需求。
适用于旧版Excel(无TEXTJOIN函数)
如果你的Excel版本不支持TEXTJOIN,可以用数组公式实现(输入公式后需要按 Ctrl+Shift+Enter 触发数组运算):
=B2&" "&LEFT(SUBSTITUTE(TRIM(IF(C2<>"",C1&" ","")&IF(D2<>"",D1&" ","")&IF(E2<>"",E1&" ","")), " ", ", "), LEN(SUBSTITUTE(TRIM(IF(C2<>"",C1&" ","")&IF(D2<>"",D1&" ","")&IF(E2<>"",E1&" ","")), " ", ", "))-2)
公式说明:
- 用多个
IF判断每个单元格是否有值,有值就拼接列标题加空格,空值则拼接空文本 TRIM去掉首尾多余空格,SUBSTITUTE把中间的空格替换成「逗号+空格」LEFT和LEN配合去掉最后一个多余的「逗号+空格」- 最后和发票日期拼接得到结果
⚠️ 注意:这个公式需要你把所有要检查的列都用IF列出来,比如你要检查到Z列,就得把IF(C2<>"",C1&" ","")一直写到IF(Z2<>"",Z1&" ","")。
备注:内容来源于stack exchange,提问作者jcicea96
相关产品推荐
相关产品推荐

