Home > Excel VBA Macro フロー制御 > FAQ

セルの値(郵便番号)を形式チェックするには?

Question 77.3 Previous Next
はじめまして、VBAマクロを最近知ったばかりの初心者です。このHPには色々とお世話になっています。今回どうしても解決したい問題がありましてこのようにメールさせて頂きました。

私は今Excelの表で住所録のようなものを作成し、それの入力形式にミスがないか、VBAマクロでチェックし、問題なければそれをCSVファイルとして出力するようなマクロを組んでいます。
その際に、郵便番号や電話番号などの形式チェックをVBAマクロでしたいと思うのですが、いい方法が思いつきません。
具体的にいえば、郵便番号であれば ”XXX-XXXX形式”になっていなければならないなどのチェックをしたいと考えています。
突然の質問で申し訳ございませんが、もしよろしければ宜しくお願いいたします。
Answer   Copyright (C) 2006.2.5 永井善王
入力形式をどのようにするかによって、チェックの方法が変わってきますね。
ご質問文から推察すると、郵便番号・電話番号ともにハイフンも付けて、例えば、444-1234、03-1234-5678 のように入力することになるのでしょうか。

ハイフン無しで、4441234、0312345678 とした方がユーザーの入力負荷が小さいですが、他のシステムとのバランス等が有るので一概には言えませんね。

一応、郵便番号チェックのうち下記2点に絞ってお答えしておきますので、これを参考にして、その他のチェックも構築してください。
 1. 4文字目にハイフンがあるか?
 2. 1~3文字目と 5~8文字目は数字か?

下記マクロは、A列の郵便番号をチェックして、エラーであればB列に×を表示します。分かり易いコーディングにするために、セルの値を変数「文字列」に代入してから処理しています。 かつ、1つの If文で 1つのチェックしかしていません。
処理時間の短縮を図りたい場合は改良してください。
Sub セルの値を形式チェックする()
    Worksheets("Sheet1").Activate
    列 = "A"                                      'チェックする列
    下端行 = Range(列 & Rows.Count).End(xlUp).Row '下端行を取得
    For 行 = 2 To 下端行
        文字列 = Range(列 & 行).Value
        If LenB(StrConv(文字列, vbFromUnicode)) = 8 Then '8バイトの半角文字なら
            If Mid(文字列, 4, 1) = "-" Then              '4文字目がハイフンなら
                If Left(文字列, 3) Like "###" = True Then '左3文字が数字なら
                    If Right(文字列, 4) Like "####" = True Then '右4文字が数字なら
                        GoTo 次へ
                    End If
                End If
            End If
        End If
        Range(("B" & 行)).Value = "×"
次へ:
    Next
End Sub
長々とした解説は行えませんが参考ページをお知らせしておきます。初心者さんということですが、この課題はいろいろな機能を含んでいますので、じっくりと取り組めば力がつくと思います。一応出来たらご連絡ください。お待ちしています。

参考ページ
 ・
文字列が半角文字か全角文字かを調べるには
 ・
文字列が3桁の数字か調べる
 ・
行方向にForNextする

 

Excel VBA Macro

Excel DownLoad