计算单个单元格中的日期数

Count the number of dates in a single cell

我需要能够计算格式为文本的单个 Excel 单元格中的日期数。日期不遵循特定格式。这是单个单元格中文本的示例:

"John was born on 11/15/2005. Tim was born on 1/2/02. Jeff was born on 05/5/13."

公式应该 return 计算该单元格的 3 个日期。我试过 COUNTIF,用通配符搜索。我能做的最好的事情就是对使用以下方法发现的第一个实例进行计数:

=COUNTIF(F3,"*/*/*")

因为有这么多潜在的模式,我会推荐使用 VBA 编写的用户定义函数 (UDF)。可以使用正则表达式来定义数据。正则表达式的复杂性取决于日期字符串中的潜在可变性。下面的示例测试任何 / 分隔的字符串,该字符串在第一部分和第二部分中有一个或两个数字,在第三部分中有两个或四个数字。但模式可能要复杂得多。

要输入此用户定义函数 (UDF),alt-F11 打开 Visual Basic 编辑器。 确保您的项目在 Project Explorer window 中突出显示。 然后,从顶部菜单 select Insert/Module 和 将下面的代码粘贴到打开的 window 中。

要使用此用户定义函数 (UDF),请输入类似

的公式
=CountDates(cell_ref)

在某个单元格中。

Option Explicit
Function CountDates(S As String) As Long
    Dim RE As Object, MC As Object
    Const sPat As String = "\b(?:\d{1,2}/){2}(?:\d{4}|\d{2})\b"
Set RE = CreateObject("vbscript.regexp")
With RE
    .Pattern = sPat
    .Global = True
    Set MC = .Execute(S)
    CountDates = MC.Count
End With
End Function

根据@Scott Craner 的第一个建议,将 A1 复制到 B1 和 C1,在 D1 中:

=(LEN(A1)-LEN(B1))/4+(LEN(A1)-LEN(C1))/3 

然后 select ColumnB,主页 > 编辑 - 查找并 Select,替换...,查找内容:/??/,全部替换。然后对 ColumnC 重复,但使用 /?/