我正在寻找一种方法来确定输入到 Excel 单元格中的文本是否遵循以下格式:“0000/00/00”(0 可以是任意一位数字 {0,1,2,3,4,5,6,7,8,9})。
有没有办法检查单元格的格式是否为“0000/00/00”?
我已经知道的事情:
- 我可以使用单元格数据验证规则中的 DATEVALUE() 函数来检查它,这种方法的问题在于它不接受 1001/04/07 作为有效日期。
- 尝试查看文本是否包含两个“/”字符并且其长度是否等于 10 个字符。某些数据验证公式如:“=OR(AND(LEN(A16)=10,(LEN(A16)-LEN(SUBSTITUTE(A16,"/",""))=2),NOT(FALSE)))”,此验证规则的问题在于它会接受“0550//0014”之类的条目作为有效条目。
PS:我的工作环境不允许使用宏或扩展!
答案1
以下用户定义函数将返回真的如果参数具有正确的格式,否则错误的:
Option Explicit
Public Function FormatCheck(r As Range) As Boolean
Dim s As String, s2 As String, arr, i As Long
FormatCheck = False
s = r(1).Text
s2 = Replace(s, "/", "")
If Len(s2) <> 8 Then Exit Function
arr = Split(s, "/")
If UBound(arr) <> 2 Then Exit Function
If Len(arr(0)) <> 4 Then Exit Function
If Len(arr(1)) <> 2 Then Exit Function
If Len(arr(2)) <> 2 Then Exit Function
For i = 1 To 8
If Not Mid(s2, i, 1) Like "[0-9]" Then Exit Function
Next i
FormatCheck = True
End Function
答案2
答案3
考虑到@AlexM已经给出了评论形式的答案,并要求我使用他的策略来回答我的问题,这正是我所需要的。
我将数据验证规则设置为:
=IF(AND(ISNUMBER(VALUE(MID(A1,1,4))),ISNUMBER(VALUE(MID(A1,6,2))),ISNUMBER(VALUE(MID(A1,9,2))),MID(A1,5,1)="/",MID(A1,8,1)="/",LEN(A1)=10),TRUE)
以下是我得到的结果: