Excel VBA | VBAで使える「入力チェックの共通関数」サンプル

Excel VBA VBA
スポンサーリンク

実務でよくある「入力チェック」を毎回マクロに直接書くとコードが散らかりがちです。
そこで、共通関数としてまとめておき、必要な場面で呼び出すと便利です。
ここでは「郵便番号チェック」を例に、汎用的に使える関数を紹介します。

共通関数の例

' 郵便番号チェック関数
' 引数: 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) → 日付でなければ「〇〇は日付で入力してください」と返す

これらを組み合わせれば、入力チェック用の共通モジュールを作って、どのマクロからでも呼び出せるようになります。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました