计算单个单元格中的date数量

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

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

该公式应该返回该单元格的3个date的计数。 我试过COUNTIF,用通配符search。 我能做的最好的事情就是拿一个用于发现的第一个实例的计数:

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

由于有太多的潜在模式,我会推荐使用VBA编写的用户定义函数(UDF)。 可以使用正则expression式来定义数据。 正则expression式的复杂性取决于datestring中的潜在可变性。 下面的示例testing在第一和第二部分中有一个或两个数字的任何/分隔string,以及第三部分中的两个或四个数字。 但是模式可能要复杂得多。

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

要使用这个用户定义函数(UDF),input一个像

 =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的第一个build议,将A1复制到B1和C1中,D1:

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

然后selectColumnB,HOME>编辑 – 查找和select,replace…,查找什么: /??/ ,全部replace。 然后重复ColumnC,但用/?/