後で悔やまない為のVBA ~Excelの文字入力チェックをマクロ化する~

面倒な事は先に済ませよう

エクセルで表を作成するときによくありがちですが、半角で入力すべきところが全角になったり(逆も然り)、文字数がオーバーしたりと後で「入力内容のチェックが必要になって面倒!」なんて困った経験ありませんか?

そんなときはVBAにまかせて、事前にチェックを済ませて「後で困った」なんて問題が無いようにしましょう。

Excelの入力時に文字チェックを行う

今回の入力チェックサンプルは「文字数チェック」、「全角・半角チェック」、「数字チェック」の4通りを解説します。
セルに文字を入力するとチェック処理が実行されますが、エラーの場合は以下の通りエラーメッセージをダイアログ表示します。

入力チェックを実行

各項目のチェック内容は以下の通りとします。

  • A列:IDの制御
    文字数のチェック。※10文字までとする。
    半角英数字のみ許可する。
  • B列:商品名の制御
    全角文字のみ許可する
  • C列:品番の制御
    半角英数字のみ許可する。
  • D列:単価の制御
    数字のみ許可する。

入力チェック用VBA

まずはVBE(Visual Basic Editor)を起動しましょう。([Alt]+[F11]で起動)
今回のVBAはシート[Sheet1]の変更時に限定して設定したいと思います。

Sheet1をダブルクリック(もしくは右クリックで[コードの表示(O)])し、オブジェクトで[Worksheet]を選択します。
VBAでオブジェクトを設定する

プロパティに[Change]を設定しましょう。
プロパティを設定

入力チェック用サンプルVBA

入力チェック用のVBAコードは以下の通りです。※A列のチェックは2つありますがサンプルでは分かりやすく別々にしました。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wCellVal As String
  
    'セルの値を取得する
    With Worksheets("Sheet1")
        wCellVal = .Cells(Target.Row, Target.Column).Value
    End With
    
    'A列(ID)の文字数チェックを行う
    If Target.Column = 1 Then
        If Len(wCellVal) > 10 Then
            MsgBox "IDは10桁以内で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
            Exit Sub
        End If
    End If
    
    'A列(ID)の半角チェックを行う
    If Target.Column = 1 Then
        If Len(wCellVal) <> LenB(StrConv(wCellVal, vbFromUnicode)) Then
            MsgBox "IDは半角で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
            Exit Sub
        End If
    End If
    
    'B列(商品名)の全角チェックを行う
    If Target.Column = 2 Then
        If Len(wCellVal) * 2 <> LenB(StrConv(wCellVal, vbFromUnicode)) Then
            MsgBox "商品名は全角で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
            Exit Sub
        End If
    End If
    
    'C列(品番)の半角チェックを行う
    If Target.Column = 3 Then
        If Len(wCellVal) <> LenB(StrConv(wCellVal, vbFromUnicode)) Then
            MsgBox "品番は半角で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
            Exit Sub
        End If
    End If
        
    'D列(単価)の数字チェックを行う
    If Target.Column = 4 Then
        If Not IsNumeric(wCellVal) Then
            MsgBox "単価は数字で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
            Exit Sub
        End If
    End If

End Sub

VBAソースの解説

まずは、それぞれの入力チェック処理の先頭で If Target.Column = 数字 Then を使って対象列の判定を行っています。例えば数字が1の場合はA列2の場合はB列・・・の処理を実行するといった具合ですね。

文字数チェック

Len関数(文字数を求める関数)を利用して10文字より大きい場合はメッセージを表示して処理を中止します。※11~14行目

If Len(wCellVal) > 10 Then
    MsgBox "IDは10桁以内で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
    Exit Sub
End If

半角チェック

Len関数LenB関数(バイト数を求める関数)を利用して半角チェックを行います。
尚、LenB関数で半角なら1バイト、全角なら2バイトとする為、文字コードをStrConv関数を使いANSI形式(vbFromUnicode)に変換しています。※19~22行目

If Len(wCellVal) <> LenB(StrConv(wCellVal, vbFromUnicode)) Then
    MsgBox "IDは半角で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
    Exit Sub
End If

全角チェック

半角チェック同様にLen関数LenB関数を利用します。
尚、今回は全角文字(2バイト)のチェックの為、文字数を倍 Len(wCellVal) * 2 とします。※27~30行目

If Len(wCellVal) * 2 <> LenB(StrConv(wCellVal, vbFromUnicode)) Then
    MsgBox "商品名は全角で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
    Exit Sub
End If

数字チェック

IsNumeric関数を使い値が数値であるかどうか判定します。※43~46行目

If Not IsNumeric(wCellVal) Then
    MsgBox "単価は数字で入力してください。", vbOKOnly + vbExclamation, "入力エラー"
    Exit Sub
End If

以上、今回のエントリーはExcelの文字入力チェックについて説明しました。

今回のサンプルファイルは以下のリンクからダウンロード可能です。