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

时间:2015-12-16 17:26:39

标签: excel date text countif

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

  

“约翰出生于2005年11月15日。蒂姆出生于1/2/02。杰夫出生于2013年5月5日。”

公式应该返回此单元格的3个日期的计数。我试过COUNTIF,用外卡搜索。我能做的最好的事情是使用以下方法获得第一个实例的计数:

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

2 个答案:

答案 0 :(得分:3)

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

要输入此用户定义函数(UDF),alt-F11将打开Visual Basic编辑器。 确保在Project Explorer窗口中突出显示您的项目。 然后,从顶部菜单中选择“插入/模块” 将下面的代码粘贴到打开的窗口中。

要使用此用户定义函数(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

答案 1 :(得分:0)

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

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

然后选择ColumnB,HOME>编辑 - 查找&选择,替换...,查找内容:/??/,全部替换。然后使用/?/重复ColumnC。