テキストボックスの入力チェック時に、半角英数字かどうかチェックすることはよくあると思います。例えば郵便番号や電話番号、メールアドレスの入力時など。

半角英数字のチェックをAccessのVBAで実装する場合、一発で判定できるような便利な関数は残念ながら用意されておりません。そのためAsc関数を上手に利用して、半角英数字のチェックを行ってきます。

Asc関数を利用して半角英数字のチェックを行う

Asc関数とは

Asc関数の使用頻度は決して高くはなく、どのような関数か分からない人も多いと思いますので、半角英数字のチェックロジックをご説明する前に、Asc関数についてご説明しておきましょう。

Asc関数を簡潔にご説明するなら、引数として任意の文字を送ると、戻り値として文字コードを返してくれる関数です。半角文字であれば0~255の範囲、全角文字であれば –32768~32767の範囲で文字コードが返ってきます。

もう少し踏み込んだ説明は外部サイトになりますが、こちらの「VBA Asc 関数」を参照ください。

半角英数字の場合の戻り値(文字コード)

Asc関数使用時の、半角英数字の場合の戻り値は以下の通りです。

  • 半角数字0~9: 戻り値(48~57)
  • 半角英大文字A~Z: 戻り値(65~90)
  • 半角英小文字a~z: 戻り値(97~122)

その他の半角記号については、こちらの「文字コード表 シフトJIS(Shift_JIS)」を参照ください(外部サイト)。

半角英数字かどうかをチェックしたいのであれば、Asc関数を利用して文字コードを確認し、上記のコード以外であればエラー判定としてあげればよいのです。

半角英数字のチェックロジック(VBA)

いよいよ半角英数字かどうかをチェックするロジックの説明ですが、特定の文字列から1文字ずつAsc関数で文字コードを確認するため、Mid関数やLen関数を併せて使用します。

処理の順序としては以下の通り。

1.Len関数で文字列の文字数を取得

2.Mid関数で文字列の1文字目を取得

3.Asc関数で文字コードを取得

4.取得した文字コードが 48~57 又は 65~90 又は 97~122 の範囲外であればエラー

5.範囲内だった場合、処理1で取得した文字数分だけ処理2~4を繰り返す(2ループ目は2文字目を取得する)

ざっとサンプルコードを記しておくと以下のようになります。

【補足説明】

mojiretsu: 半角英数字のチェックをする文字列
cnt: ループカウント用変数
asccode: Asc関数の戻り値を格納する変数

 

【処理】

’ループカウント用変数に初期値1をセット
cnt = 1

’文字列の文字数分だけループ処理
Do While cnt <= Len(mojiretsu)

’Asc関数を使用して、任意の文字の文字コードを取得
asccode = Asc(Mid(mojiretsu, cnt, 1))

’取得した文字コードが半角英数字かどうかチェック
If (asccode >= 48 And asccode <= 57) Or (asccode >= 65 And asccode <= 90) Or (asccode >= 97 And asccode <= 122) Then

’半角英数字ならばチェッククリア
MsgBox (“入力チェックをクリア”)

Else

’半角英数字以外であればエラーメッセージの表示
MsgBox (“エラー:半角英数字で入力してください。”)

End If

‘ループ用変数のカウントアップ
cnt = cnt + 1

Loop

以上のコードで、英数字の半角チェックができます。
(ただしチェックを行った文字列の文字数分メッセージが表示されてしまうので、エラーフラグなどで対応するとよいでしょう)

番外:全角カタカナチェック

カナ入力などで、全角カナが入力されているかどうかチェックしたい場合についても、ついでに記載しておきます。

同じくAsc関数を使用することになるのですが、全角カナの場合は以下の文字コードが返ってきます。

  • 全角カナ: 戻り値(-31936~-31850)
  • ー(長音符): 戻り値(-32421)

戻り値さえ分かれば、あとは先に説明した半角英数字のチェックと同じロジックを使用すれば、全角カナのチェックもできますね。Asc関数の戻り値が-31936~-31850の範囲外、かつ-32421以外の場合に、エラーではじく処理となります。

 

おわりに

以上がAccessのVBAで半角英数字のチェックを行う方法です。是非プログラミングの参考にどうぞ。

 



【X(旧twitter)でも情報発信中】

Xを最近始めたので、フォローしてもらえると嬉しいです(エンジニア界隈の方はフォローバックさせていただきます)! システム開発に関することや、最新テクノロジーのことなど、世のエンジニアにとって有用な情報を発信してます!

"X" @TECH_KEYSYS