6

VBA 正規表現を使用して、次の形式の時間範囲を検証しようとしています: #0:00xm - #0:00xmwhere xisaまたは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
4

3 に答える 3

7

気にする人にとっては、これは私の修正済みの動作バージョンであり、より単純な正規表現を提供してくれた dda に特に感謝しています ^^:

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
于 2012-05-18T19:16:50.797 に答える
3

正規表現をクリーンアップして改善しましょう。

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

これは、セル全体が希望どおりにフォーマットされた日付である場合にのみ一致し、それ以外は一致しません (^ _ ___ $ 条件)。大文字と小文字の問題がないことを確認するために、a と A、および p と P の両方を追加しました。

このマシンには VBA/Excel がないため、正規表現でコードを試すことはできませんが、正規表現自体は機能します。

于 2012-05-18T18:59:26.593 に答える
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
于 2012-05-18T18:29:42.030 に答える