今回は、セルに入力された文字のチェック方法の2回目になります。
前回は、
1)「データの入力規則」を使って数値の入力範囲をチェックする方法と、
2)マクロで半角と全角が混ざっていないかをチェックする方法を紹介しました。
今回は、少し難易度が高いものを紹介します。
3)英数字のみが入力されているかをチェック
4)電話番号の形式が間違っていないかをチェック
この方法は、難易度は高いですが、応用範囲がとても広く覚えるととても便利です。私は、ほとんど活用できていませんが、チャンスがあるたびに使い方を勉強しています。他のサイトにも使い方が色々紹介されていますので探してみてください。
以下の様にコードを入力します。
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文字以上一致する、という条件です。
以下の様にコードを入力します。
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」と数字以外が入力されるとエラーメッセージが表示されます。
いかがでしたでしょうか。
ほんの数行のマクロで、セルに入力された値をチェックすることが出来ます。