実務でよくある「入力チェック」を毎回マクロに直接書くとコードが散らかりがちです。
そこで、共通関数としてまとめておき、必要な場面で呼び出すと便利です。
ここでは「郵便番号チェック」を例に、汎用的に使える関数を紹介します。
共通関数の例
' 郵便番号チェック関数
' 引数: zipCode = 郵便番号文字列
' 戻り値: ""(空文字)なら正常、それ以外はエラーメッセージ
Function CheckZipCode(zipCode As String) As String
Dim tmp As String
tmp = Trim(zipCode)
tmp = Replace(tmp, "-", "") ' ハイフン除去
If tmp = "" Then
CheckZipCode = "郵便番号が未入力です"
ElseIf Len(tmp) <> 7 Or Not IsNumeric(tmp) Then
CheckZipCode = "郵便番号が不正です(7桁の数字で入力してください)"
Else
CheckZipCode = "" ' 正常
End If
End Function
VB使い方(呼び出し側)
Sub 郵便番号チェック実行()
Dim msg As String
Dim i As Long, lastRow As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
msg = CheckZipCode(ws.Cells(i, "B").Value)
If msg <> "" Then
' エラーがあればメッセージを表示
Debug.Print "行 " & i & " (" & ws.Cells(i, "A").Value & "): " & msg
' 必要に応じてセルを色付け
ws.Cells(i, "B").Interior.Color = RGB(255, 200, 200)
End If
Next i
MsgBox "チェック完了しました", vbInformation
End Sub
VBポイント
- 共通関数は「正常なら空文字、不正ならエラーメッセージ」を返すようにすると使いやすい。
- 呼び出し側では
If msg <> "" Thenで判定できる。 - 他の入力チェック(必須入力、数値チェック、日付チェックなど)も同じ仕組みで追加可能。
応用アイデア
- CheckRequired(value, fieldName) → 未入力なら「〇〇が未入力です」と返す
- CheckNumber(value, fieldName) → 数値でなければ「〇〇は数値で入力してください」と返す
- CheckDate(value, fieldName) → 日付でなければ「〇〇は日付で入力してください」と返す
これらを組み合わせれば、入力チェック用の共通モジュールを作って、どのマクロからでも呼び出せるようになります。
