我正在尝试使用VBA正则表达式来验证表单的时间范围:#0:00xm - #0:00xm
其中x
为a
或p
。所以字符串文字可以是"1:30pm - 12:00am"
。我想匹配具有这种模式的单元格。
当我在此在线工具中使用常规快递:http://public.kvalley.com/regex/regex.asp
并检查我的表达时,它会正确匹配。
但是,当我在VBA中使用相同的表达式时,它不匹配。
Dim rRange As Range
Dim rCell As Range
Set rRange = Range("A2", "A4") '"G225")
For Each rCell In rRange.Cells
MsgBox (rCell.Value)
If rCell.Value Like "^([0-9]{1,2}[:][0-9]{2}[apm]{2}[ ][-][ ][0-9]{1,2}[:][0-9]{2}[apm]{2})$" Then
MsgBox ("YES")
'rCell.Interior.Color = RGB(0, 250, 0)
Else
MsgBox ("NO")
'rCell.Interior.Color = RGB(250, 0, 0)
End If
Next rCell
答案 0 :(得分:7)
对于任何关心的人来说,这是我固定的工作版本,特别感谢dda更简单的RegEx ^^:
Dim rRange As Range
Dim rCell As Range
Dim re As Object
Set re = CreateObject("vbscript.regexp")
With re
.Pattern = "^\d\d?:\d\d[aApP][mM] - \d\d?:\d\d[aApP][mM]$"
.Global = False
.IgnoreCase = False
End With
Set rRange = Range("A2", "G225")
For Each rCell In rRange.Cells
If re.Test(rCell) Then
rCell.Interior.Color = RGB(0, 250, 0)
Else
rCell.Interior.Color = RGB(250, 0, 0)
End If
Next rCell
答案 1 :(得分:3)
让我们清理并改进你的正则表达式:
^\d\d?:\d\d[aApP][mM] - \d\d?:\d\d[aApP][mM]$
如果整个单元格的格式与您想要的格式相符,则只会匹配,而不是其他任何内容(^ _ ___ $条件)。 我添加了a和A,以及p和P,以确保没有案例问题。
我在这台机器上没有VBA / Excel,所以无法使用我的正则表达式尝试你的代码,但正则表达式本身有用。
答案 2 :(得分:0)
在Excel内部,转到格式化单元格>数字>分类>自定义。您将看到大量的时间类型格式。
您可能正在寻找的是h:mm AM / PM
好。我确实更多地了解了这一点并实现了我的近视。
这更像是你追求的吗?我对使用AM / PM的时间值格式以及未按照这种方式格式化的单元格进行了基本测试。
Dim rRange As Range
Dim rCell As Range
Set rRange = Range("A2", "A4")
For Each rCell In rRange
If InStr(1, UCase(rCell.Value), " AM") > 0 Or InStr(1, UCase(rCell.Value), " PM") > 0 Then
If InStr(1, rCell.Value, ":") <> 0 Then Debug.Print rCell.Value
End If
Next