如何正确拼接同一列中格式不同的日期变量?
问题描述
我正在尝试拼接含日期的数据,日期列(Date)存在「mmm-yyyy」和「yyyy」两种格式。示例数据中A、B列为常规格式,C列(Date)为自定义格式「mmm-yyyy」或「0000」:
示例数据:
({'Concatenate': ['=CONCATENATE(B2," - ",C2)'], 'Title': ['Alpha','Beta','Gamma','Delta','Epsilon','Zeta','Eta','Theta'], 'Date': ['Jul-1995','1994','Mar-1996','Apr-1990','1996','Jun-1996','Jul-1997','Aug-1999']})
使用公式=CONCATENATE(B2," - ",C2)向下拖动后,得到结果:
({'Concatenate': ['Alpha - 38441','Beta - 1994','Gamma - 35125','Delta - 32964','Epsilon - 1996','Zeta - 35217','Eta - 35612','Theta - 36373'], 'Title': ['Alpha','Beta','Gamma','Delta','Epsilon','Zeta','Eta','Theta'], 'Date': ['Jul-1995','1994','Mar-1996','Apr-1990','1996','Jun-1996','Jul-1997','Aug-1999']})
改为公式=CONCATENATE(B2," - ",TEXT(C2,"MMM YYYY"))后,结果为:
({'Concatenate': ['Alpha - Jul 1995','Beta - 1905','Gamma - Mar 1996','Delta - Apr 1990','Epsilon - Jun 1905','Zeta - Jun 1996','Eta - Jul 1997','Theta - Aug 1999'], 'Title': ['Alpha','Beta','Gamma','Delta','Epsilon','Zeta','Eta','Theta'], 'Date': ['Jul-1995','1994','Mar-1996','Apr-1990','1996','Jun-1996','Jul-1997','Aug-1999']})
我期望得到的拼接结果是:
({'Concatenate': ['Alpha - Jul 1995','Beta - 1994','Gamma - Mar 1996','Delta - Apr 1990','Epsilon - 1996','Zeta - Jun 1996','Eta - Jul 1997','Theta - Aug 1999'], 'Title': ['Alpha','Beta','Gamma','Delta','Epsilon','Zeta','Eta','Theta'], 'Date': ['Jul-1995','1994','Mar-1996','Apr-1990','1996','Jun-1996','Jul-1997','Aug-1999']})
解决方案
不需要修改日期列格式,仅调整拼接公式即可解决问题,以下是两种可行方案:
方案1:IF+ISNUMBER判断格式类型
通过ISNUMBER判断单元格是纯年份数值还是日期格式,分别处理:
=B2&" - "&IF(ISNUMBER(C2),C2,TEXT(C2,"MMM YYYY"))
- 逻辑:如果C2是纯数字(年份),直接显示;如果是日期格式,转换为「MMM YYYY」格式后拼接。
方案2:TEXT函数条件格式规则
利用TEXT函数的条件格式特性,一次性指定两种显示规则:
=B2&" - "&TEXT(C2,"[>=1900]MMM YYYY;0")
- 逻辑:
[>=1900]MMM YYYY针对Excel日期序列值(对应真实日期),转换为目标格式;0针对纯年份数值,直接显示数字。
错误原因说明
- 原公式直接引用C2时,日期格式单元格会返回Excel内部的日期序列值(如38441对应Jul-1995),纯年份数值则正常显示。
- 使用
TEXT(C2,"MMM YYYY")时,纯年份数值(如1994)会被Excel当作日期序列值计算,对应1905年(Excel从1900年1月1日开始计数,1994天即1905年6月),因此出现错误结果。
内容的提问来源于stack exchange,提问作者L Tang
相关产品推荐
相关产品推荐

