首页 > 解决方案 > 从字符串中提取日期

问题描述

我有以下字符串:

CO_CAS_REA_NO_VIPPLUS_20190402_BONUS

如果可能,我想提取日期部分(20190402)并将其转换为 DD/MM/YY 格式。

我尝试了一些“搜索”和“提取”公式,但无济于事。

有人知道如何在 excel 或 VBA 中执行此操作吗?

数据字符串的其他变体如下:

COCASREAHVPLUSVIPUK20190827CRMFSDEP
COCASREALVWINFIDEGL20190809CRMPTS
COSBINFLVFIDE20190830CRMBET
CO_CAS_RET_HVMV_UK_20190830_RB
COSB_REA_181INF_HVMV_FIDE_20190809_CRM_RB
COSBREAHVMVGL20190831CRMFBFSQUAL
COSBINFLVNO20190816CRMFB

标签: dateexcel-formula

解决方案


假设在每个字符串中,您只有一个 8 位数字字符串YYYYMMDD,以您要提取的形式表示日期,您可以使用以下三个公式之一来返回日期:

例子

方法一:

=DATE(LEFT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),4),MID(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),5,2),RIGHT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),2))

方法二:

=DATEVALUE(LEFT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),4)&"/"&MID(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),5,2)&"/"&RIGHT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),2))

方法三:

=DATEVALUE(TEXT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),"0000-00-00"))

请注意,所有方法都使用数组公式,因此您必须在完成公式栏中的公式后按Ctrl+ Shift+ Enter,否则它们将无法正常工作。然后,您只需将公式向下拖动即可应用。

逻辑是先用这个数组公式=MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0))提取数字字符串。方法 1 和 2 遵循相同的逻辑,即从数字字符串中提取year YYYY,month MMday DD组件,然后使用DATEDATEVALUE函数返回日期。方法 3 使用格式化技巧将数值快速转换为文本日期,然后使用DATEVALUE函数将文本日期转换为“真实”日期。

如果您有任何问题,请告诉我。干杯:)


推荐阅读