如何使用Excel公式或宏从单元格多行文本中提取倒数第二行日期时间
需求说明
从包含多行工单记录的Excel单元格中,提取倒数第二行的日期时间戳,适用于人员、行数不固定的场景。
方案1:Excel 365/2021 公式方案
适用带有TEXTSPLIT、LET函数的高版本Excel,无需启用宏。
假设待处理的内容存放在A1单元格,直接在目标单元格输入以下公式:
=LET(lines,FILTER(TEXTSPLIT(A1,CHAR(10)),TEXTSPLIT(A1,CHAR(10))<>""),dt_txt=LEFT(INDEX(lines,COUNTA(lines)-1),19),VALUE(dt_txt))
公式逻辑说明:
CHAR(10)对应Excel单元格内的换行符,TEXTSPLIT将单元格内容按行拆分FILTER过滤拆分后产生的空行,避免空行影响计数COUNTA(lines)统计有效总行数,减1后得到倒数第二行的索引,INDEX取出该行内容LEFT提取该行前19位的标准时间字符串,VALUE将其转为Excel可识别的时间数值,你只需将目标单元格格式设置为「yyyy-mm-dd hh:mm:ss」即可正常显示时间。
方案2:全版本兼容VBA自定义函数方案
适用于没有高版本函数的旧版Excel,操作步骤如下:
- 按
Alt+F11打开VBA编辑器,右键点击当前工作簿名称,选择「插入」-「模块」 - 将以下代码粘贴到模块编辑窗口:
Function 提取倒数第二行时间(rng As Range) As Date Dim 所有行 As Variant, 有效行 As New Collection Dim i As Long, 目标行内容 As String ' 按换行符拆分单元格内容 所有行 = Split(rng.Value, Chr(10)) ' 过滤空行存入有效行集合 For i = LBound(所有行) To UBound(所有行) If Trim(所有行(i)) <> "" Then 有效行.Add Trim(所有行(i)) End If Next ' 取倒数第二行前19位转换为时间格式 目标行内容 = 有效行(有效行.Count - 1) 提取倒数第二行时间 = CDate(Left(目标行内容, 19)) End Function
- 保存文件为「Excel 启用宏的工作簿(*.xlsm)」格式,回到Excel界面后,在目标单元格输入
=提取倒数第二行时间(A1)即可得到结果,同样需要将单元格格式设置为日期时间类型。
注意:两种方案均默认所有带时间戳的行格式与你提供的示例一致,时间固定占行首19位,格式为YYYY-MM-DD HH:MM:SS。
内容的提问来源于stack exchange,提问作者Vikram Yadav
相关产品推荐
相关产品推荐

