我有以下字符串:
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
答案 0 :(得分:1)
假设在每个字符串中只有一个8位数字字符串,它表示要提取的YYYYMMDD
形式的日期,则可以使用以下三个公式之一返回日期:
方法1:
=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))
方法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))
方法3:
=DATEVALUE(TEXT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),"0000-00-00"))
请注意,所有方法都使用数组公式,因此您必须按下 Ctrl + Shift + ,否则它们将无法正常运行。然后,您只需将公式向下拖动即可应用。
逻辑是使用此数组公式
=MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0))
首先提取数字字符串。方法1和2遵循相同的逻辑,即从数字字符串中提取year YYYY
,month MM
和day DD
组件,然后使用 DATE 或 DATEVALUE 函数以返回日期。方法3使用格式化技巧快速将数字值转换为文本日期,然后使用 DATEVALUE 函数将文本日期转换为“实际”日期。
如果您有任何疑问,请告诉我。干杯:)
答案 1 :(得分:0)
使用excel公式,使用// XXXPage is your page
XXXPage.getInitialProps = async (req) => {
if (process.browser) {
return __NEXT_DATA__.props.pageProps;
}
// original logic
}
函数
MID()
使用VBA,您可以使用“ _”将其拆分
=MID("CO_CAS_REA_NO_VIPPLUS_20190402_BONUS",23, 8)
答案 2 :(得分:0)
如果左侧的文本发生更改,您可能会发现它更灵活:
为节省您的输入,这里是单元格C1中的公式:
=MID(A1,FIND("LUS_",A1,1)+4,FIND("_BON",A1,1)-FIND("LUS_",A1,1)-4)
但是,它确实假定日期两侧的4个字符始终相同。
答案 3 :(得分:0)
假设字符串在A列中,而您只在寻找2019年,您可以使用此
=DATE(LEFT(MID(A1,SEARCH(2019,A1),8),4), MID(MID(A1,SEARCH(2019,A1),8),5,2), RIGHT(MID(A1,SEARCH(2019,A1),8),2))
答案 4 :(得分:0)
假设您的数据放在A列中
在B2中,输入公式:
=0+TEXT(AGGREGATE(14,6,--MID(A1,ROW($1:$250),8),1),"0000-00-00")
然后,B2 >>设置单元格格式,在“数字”选项卡中,选择:“日期” >>选择dd / mm / yy
全部抄下来