Регулярное выражение VBA для соответствия диапазону времени, например «13:30 – 12:00»,

Я пытаюсь использовать регулярное выражение 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 

Для всех, кому это важно, это моя фиксированная рабочая версия с особой благодарностью 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 

Давайте очистим и улучшим ваше регулярное выражение:

 ^\d\d?:\d\d[aApP][mM] - \d\d?:\d\d[aApP][mM]$ 

Это будет соответствовать только в том случае, если целая ячейка является датой, отформатированной так, как вы хотите, и ничего более (условия ^ _ ___ $). Я добавил как a, так и A, и p и P, чтобы убедиться, что проблем нет.

У меня нет VBA / Excel на этом компьютере, поэтому я не могу попробовать ваш код с моим регулярным выражением, но регулярное выражение само по себе работает.

Внутри 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 
  • Универсальные UDF для использования регулярных выражений в Excel
  • Соответствующая функция регулярного выражения в excel?
  • Границы слов Excel VBA (замена предлогов)
  • Извлечь число, не содержащееся в скобках из этой строки, с использованием регулярных выражений
  • VBA и Regex с именованными группами
  • Excel Regex или экспортировать в Python? ; «Vlookup» в Python?
  • Как я могу выполнить поиск и замену регулярных выражений в макросе excel VBA?
  • Регулярное выражение для дат YYYY-WW
  • Как нормализовать данные ячейки Excel
  • Как я могу проанализировать файл excel в zip-файле?
  • Regex Match & Replace on Range в Excel с использованием функции Visual Basic
  • Давайте будем гением компьютера.