从这组格式不一致的日期中提取年份的最佳方法是什么?

从这组格式不一致的日期中提取年份的最佳方法是什么?

我在 Excel 中有一个大型数据集,其中包含大量有关 Steam 游戏的信息。我希望能够提取每个游戏的发布日期,然后将其与我拥有的另一个数据集一起使用。不幸的是,发布日期的格式差异很大

例如 Nov 15 2016,,,,,。Early 2017​​​Coming Soon1/01/2017Coming 2017

我希望能够从每个单元格中获取年份。2017或者如果未检测到日期则返回 false。我该怎么办?我正在使用 office 365 excel。

数据集链接以供参考

答案1

借助 UDF(用户定义函数)和公式,您的问题可以得到解决:

在此处输入图片描述

怎么运行的:

  • 右键点击工作表标签& 从弹出菜单中单击查看代码
  • 复制粘贴本守则模块

    Function RetNum(Str As String)
    
    Dim xRegEx As Object
    Set xRegEx = CreateObject("vbscript.regexp")
    xRegEx.Global = True
    xRegEx.Pattern = "[^\d]+"
    RetNum = xRegEx.Replace(Str, "")
    Set xRegEx = Nothing
    
    End Function
    
  • 在 VB 编辑器窗口中单击工具然后 参考并确保Microsoft 脚本运行时DLL 已包含在内。

在此处输入图片描述

  • 返回工作表。
  • 输入此公式并填写。

=IF(ISTEXT(A1),RetNum(A1),YEAR(A1))

根据需要调整单元格引用。

答案2

假设年份范围是从 1980 年到 2030 年,所有年份均为 4 个字符,测试文本位于 A1 中。使用 mid() + 递归 iferror() 和 find() 就可以了。

执行 :

=MID(A1,(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(FIND(1980,A1),FIND(1981,A1)),FIND(1982,A1)),FIND(1983,A1)),FIND(1984,A1)),FIND(1985,A1)),FIND(1986,A1)),FIND(1987,A1)),FIND(1988,A1)),FIND(1989,A1)),FIND(1990,A1)),FIND(1991,A1)),FIND(1992,A1)),FIND(1993,A1)),FIND(1994,A1)),FIND(1995,A1)),FIND(1996,A1)),FIND(1997,A1)),FIND(1998,A1)),FIND(1999,A1)),FIND(2000,A1)),FIND(2001,A1)),FIND(2002,A1)),FIND(2003,A1)),FIND(2004,A1)),FIND(2005,A1)),FIND(2006,A1)),FIND(2007,A1)),FIND(2008,A1)),FIND(2009,A1)),FIND(2010,A1)),FIND(2011,A1)),FIND(2012,A1)),FIND(2013,A1)),FIND(2014,A1)),FIND(2015,A1)),FIND(2016,A1)),FIND(2017,A1)),FIND(2018,A1)),FIND(2019,A1)),FIND(2020,A1)),FIND(2021,A1)),FIND(2022,A1)),FIND(2023,A1)),FIND(2024,A1)),FIND(2025,A1)),FIND(2026,A1)),FIND(2027,A1)),FIND(2028,A1)),FIND(2029,A1)),FIND(2030,A1))),4)

p/s:此公式生成一个字符串。numbervalue()如有必要,您可以使用它将其转换为数字。

希望能帮助到你。

相关内容