我需要能够计算格式化为文本的单个Excel单元格中的日期数。日期不遵循特定格式。以下是单个单元格中文本的示例:
“约翰出生于2005年11月15日。蒂姆出生于1/2/02。杰夫出生于2013年5月5日。”
公式应该返回此单元格的3个日期的计数。我试过COUNTIF,用外卡搜索。我能做的最好的事情是使用以下方法获得第一个实例的计数:
=COUNTIF(F3,"*/*/*")
答案 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。