後で悔やまない為のVBA ~Excelの文字入力チェックをマクロ化する~
エクセルで表を作成するときによくありがちですが、半角で入力すべきところが全角になったり(逆も然り)、文字数がオーバーしたりと後で「入力内容のチェックが必要になって面倒!」なんて困った経験ありませんか?
そんなときはVBAにまかせて、事前にチェックを済ませて「後で困った」なんて問題が無いようにしましょう。
Excelの入力時に文字チェックを行う
今回の入力チェックサンプルは「文字数チェック」、「全角・半角チェック」、「数字チェック」の4通りを解説します。
セルに文字を入力するとチェック処理が実行されますが、エラーの場合は以下の通りエラーメッセージをダイアログ表示します。
各項目のチェック内容は以下の通りとします。
- A列:IDの制御
文字数のチェック。※10文字までとする。
半角英数字のみ許可する。 - B列:商品名の制御
全角文字のみ許可する - C列:品番の制御
半角英数字のみ許可する。 - D列:単価の制御
数字のみ許可する。
入力チェック用VBA
まずはVBE(Visual Basic Editor)を起動しましょう。([Alt]+[F11]で起動)
今回のVBAはシート[Sheet1]の変更時に限定して設定したいと思います。
Sheet1をダブルクリック(もしくは右クリックで[コードの表示(O)])し、オブジェクトで[Worksheet]を選択します。
入力チェック用サンプル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の文字入力チェックについて説明しました。
今回のサンプルファイルは以下のリンクからダウンロード可能です。