从文本中提取日期并将其格式化为日期

从文本中提取日期并将其格式化为日期

我搜索并找到了一些答案,但没有一个符合我的格式。如何将 2017 年 7 月 22 日 13:51 GMT 转换为 2018 年 7 月 22 日?我只需要以 excel 可以理解的格式提取日期,这样我就可以按从旧到新的顺序对其进行排序。谢谢!

答案1

单元格中有字符串A1,此公式:

 =DATEVALUE(TRIM(LEFT(A1,11)))

将给出日期部分。(如果日期是一位数字或两位数字则有效,月份必须为三位字符)如果您的数据包含完整的月份名称而不是缩写,我们可以通过查找第三个空格字符 来获取日期:

=DATEVALUE(TRIM(LEFT(A1,FIND(CHAR(1),SUBSTITUTE(A1," ",CHAR(1),3)))))

为了虚拟专用网络,尝试以下用户定义函数(UDF)

Public Function DateMaker(s As String) As Date
    Dim arr
    arr = Split(s, " ")
    DateMaker = CDate(arr(0) & " " & arr(1) & " " & arr(2))
End Function

使用正确的格式:

在此处输入图片描述

用户定义函数 (UDF) 非常容易安装和使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除 UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要从 Excel 使用 UDF:

 =DateMaker(A1)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

答案2

好的,我设法做到了……非常手动 :)。我不使用 excel,所以请原谅我的方法。

首先,我选择了包含所有 236 行数据的行。数据类似于 2017 年 7 月 22 日 13:51 GMT。所以我转到“数据”选项卡,将文本转换为列。我选择日期为 DMY,但我认为这并不重要。然后我有 3 列日期,一列表示日,一列表示月,一列表示年。接下来我必须逐一查找和替换(因为我尝试的公式不起作用)将 Jan 替换为 1,将 Feb 替换为 2,等等。

最后,我得到了一个日期格式,几乎完成了。所以我只需要将它们 3 合并到一个单元格中,以“/”作为分隔符。所以我使用了 =E2&"/"&F2&"/"&G2,其中 E2 是日,F2 是月,G2 是年。之后,我只需将单元格拖到最后一个,就可以了。现在我可能必须将其格式化为日期,然后我就可以对其进行排序了。感谢你们所有的回答!这不是最快也不是最简单的方法,但它确实有效 :)

相关内容