セルに入力した文字のチェック方法(2)

今回は、セルに入力された文字のチェック方法の2回目になります。

前回は、

1)「データの入力規則」を使って数値の入力範囲をチェックする方法と、
2)マクロで半角と全角が混ざっていないかをチェックする方法を紹介しました。

今回は、少し難易度が高いものを紹介します。

3)英数字のみが入力されているかをチェック
4)電話番号の形式が間違っていないかをチェック

この方法は、難易度は高いですが、応用範囲がとても広く覚えるととても便利です。私は、ほとんど活用できていませんが、チャンスがあるたびに使い方を勉強しています。他のサイトにも使い方が色々紹介されていますので探してみてください。

3)英数字のみが入力されているかをチェックする方法

以下の様にコードを入力します。

Sub ボタン1_Click()
    Dim RegExp As Object
    Dim strCellA As String
    Set RegExp = CreateObject("VBScript.RegExp")
    RegExp.Pattern = "^[0-9a-zA-Z]+$"
    strCellA = StrConv(Range("B2").Value, vbNarrow)
    If Not RegExp.test(strCellA) Then
        MsgBox "英数字以外が入力されています。", vbCritical, "入力エラー"
    End If
    Set RegExp = Nothing
End Sub

このコードは、正規表現によるパターンマッチングを利用しています。

パターンマッチングのパターンとは、「^[0-9a-zA-Z]+$」の部分です。
このれは、数字、英字(大小文字)を表していますので、パターンに一致すれば、英数字のみ、一致しなければ、英数字以外の文字があると判定できます。ちなみに、「^」、「$」は、文字列の最初から最後で、「+」は、英数字([]内のパターン)が1文字以上一致する、という条件です。

4)電話番号の形式が間違っていないかをチェックする方法

以下の様にコードを入力します。

Sub ボタン1_Click()
    Dim RegExp As Object
    Dim strCellA As String
    Set RegExp = CreateObject("VBScript.RegExp")
    RegExp.Pattern = "^0\d-\d{4}-\d{4}$|^0\d{2}-\d{3}-\d{4}$|^0\d{3}-\d{2}-\d{4}$|^0[789]0-\d{4}-\d{4}$"
    strCellA = Range("B2").Value
    If Not RegExp.test(strCellA) Then
        MsgBox "電話番号の形式が間違っています。", vbCritical, "入力エラー"
    End If
    Set RegExp = Nothing
End Sub

このコードは、赤字のパターンを記述する部分で、電話番号の形式が「|」で4つに分けられます。それを分かりやすい形式にしたのが以下になります。

1)  0n-nnnn-nnnn
2)  0nn-nnn-nnnn
3)  0nnn-nn-nnnn
4)  0m0-nnnn-nnnn

(nは数字1桁、mは789のいずれかの数字を表しています。)

4つの何れかを判定するパターンが記述してあります。どのパターンにもマッチしなければ、エラーメッセージが表示されます。ただし、電話番号の形式(数字の区切り方)をチェックするだけですので、「03-0000-0000」と入力しても数字の区切り方があっているので入力エラーとはなりません。もちろん「047-111-222z」と数字以外が入力されるとエラーメッセージが表示されます。


いかがでしたでしょうか。

ほんの数行のマクロで、セルに入力された値をチェックすることが出来ます。

コメントの受付は終了しました。