前回のおさらい
前回はユーザーフォームを作成して、まずはお決まりのキャンセルボタンを実装しましたね。
入力ボタンを実装するためにTextBox1~3の値を一度配列に格納しました。
入力される情報はユーザーによって変化する可能性が高いのでは!?ということで入力情報の規則を統一にする為の関数を自作しましょうという所でしたね。
何をどうするのか考える
いきなり何を言っているのかという状態ですが、情報が3つもあるのでまずは整理して一つ一つ考えて見ましょう。
入力される情報は「郵便番号」「住所」「氏名」でしたね。
モチベーションを保つためには意外とお手軽なやつからはじめるのがいいかもしれません。
全然出来ていない段階でいきなり難しい所に手を付けて進まなくなるとやる気をそがれてしまいますので。
ということで一番お手軽そうな郵便番号からやっていきましょう。
郵便番号の情報を統一の規則に整える
ということで一度改めて考えて見ましょう。
ユーザーによって変わる可能性がある郵便番号の形は
- 全角数字の可能性がある(混在している可能性もある)。
- ハイフンがない可能性がある
- ハイフンが全角や半角の可能性がある
- 〒の記号が入っている可能性がある。
大体こんな所でしょうか。
ということでこれらの情報を全てクリアして半角の7桁の数字に揃えた上で郵便番号として配列に格納して行きましょう。
' 郵便番号入力情報を整える関数 Function postNumConv(s As String) As String Dim i As Long Dim a As String For i = 1 To Len(s) ' 一文字一文字検査して数字としての認識が出来るなら ' 変数aに格納して行きます If IsNumeric(Mid(s, i, 1)) Then a = a & Mid(s, i, 1) End If Next 'ここまで来たら全て数字になっているはずなので 'Format関数を使用して表示形式を「数値3桁-4桁」で揃えます postNumConv = StrConv(Format(a, "###-####"), vbNarrow) End Function
実はExcelVBAはこういった数字の判別にIsNumericを使いたい時に割と融通がききやすいもので数字が全角でも数字として判別してTrueを返してくれます。
ですのでループ処理でMid(s, i, 1)で一文字ずつ検査してその文字が数字なら一時的にaという変数に格納します。
ループを抜けたらaの中身は全て数字となっているはずなのでStrConvのvbNarrowで全角数字を半角数字に直しつつFormat関数で表示形式を###-####にします。
表示形式についてはExcelそのものの機能ですので別途知りたい方は調べて見て下さい。
では次回は氏名と行ければ住所の入力規則を整えてどうやって自作関数を呼び出すのか。といった所まで行ければと思います。