では今回も自作関数Functionについてお勉強して行きましょう。
今回のテーマ
- 郵便番号・住所・氏名を打ち込むユーザーフォームを準備
- 入力者により入力の規則が違うと思うので入力規則がすべて同じになる様に自作関数で変換
- 入力はA1セルから上詰めで入力
ということでやっていきたいと思います。
ユーザーフォームを準備
こんな感じで郵便番号・住所・氏名を打ち込む欄を準備しました。
処理の記述
キャンセルボタンの実装
Private Sub CommandButton2_Click() Unload Me End Sub
これはもはやお決まりだと思います。お手軽なものからせめて行きます。
入力ボタンの実装
入力された値を一度配列に格納しましょう。
- 郵便番号…TextBox1
- 住所…TextBox2
- 氏名…TextBox3
配列名は「input_value」にします。今回はこれだけに絞っている上にA1~A3までに値を入力するだけなので宣言は
Dim input_value(1 To 3) As String
これで簡単に済ませてしまおうかと思います。
Private Sub CommandButton1_Click() Dim input_value(1 To 3) As String Dim i As Long For i = 1 To 3 input_value(i) = Me.Controls("textbox" & i).Value Next End Sub
これで値は格納出来ましたね。
入ってくる値を想定する
今回はここが肝になってきます。
入力する人によって情報の形式が違う可能性があります。その情報を整えて行きましょう
- 数字・記号は全角の可能性がある。
- 住所にカタカナが入っていた場合は全角・半角どちらの可能性もある。
- 郵便番号はハイフンが入っていない可能性がある。
- 名字と名前の間には「半角スペース」「全角スペース」「スペースなし」全てのパターンが考えられる。
これらの情報を変換する関数を作って行こうかと思います。
新たに使用する関数
今回新たに使用するVBAにもともと備わっている関数は
- StrConv
- Replace
- inStr
以上3種類を使用して行こうかと思います。
StrConvについて
これはString(文字列)をConvert(変換)するのでStrConvというものになります。
第1引数に変換対象となる文字列を与えます。第2引数には変換の種類を与えます。
変換対象の文字列とは今回ユーザーに入力してもらった情報になります。
変換の対象は予めVBA側で決められています。
今回は僕がよく使うものだけ抜粋して紹介します。
- vbWide…与えられた文字列(第1引数)の半角文字を全角文字に変換
- vbNarrow…与えられた文字列(第1引数)の全角文字を半角文字に変換
- vbKatakana…与えられた文字列(第1引数)のひらがなをカタカナに変換
- vbHiragana…与えられた文字列(第1引数)のカタカナをひらがなに変換
例えば「12345」という半角数字を全角数字に変換したい場合は
StrConv("12345", vbWide)
という形になります。これらを使用して入力情報の規則を全て同じに整えてしまおうかということです。
Replaceについて
これは文字列の中に含まれる特定の文字列を別の文字に変換する関数になります。
第1引数に変換したい対象が含まれる文字列、第2引数に変換したい文字列、第3引数に変換後の文字列を与えます。
例えば、「あいうえお」という文字列の中の「う」の文字だけを「ん」に変換するとすると
Replace("あいうえお", "う", "ん")
となります。実行結果は「あいんえお」となります。
inStrについて
これは指定した文字列の中に特定の文字列が何文字目に入っているのかを返してくれる関数になります。
例えば「aaabbbcccdd」という文字列から「d」が何文字目に入っているのかをinstrで探すとすると
InStr("aaabbbcccdd", "d")
こういう形になります。実行結果は9になります。基本的に最初に見つかった位置を教えてくれます。
検索対象の文字列は一文字ではなくても大丈夫です。例えば「bc」という文字を検索対象にすると
InStr("aaabbbcccdd", "bc")
この場合は6が返って来ます。
1文字目から数えて6文字目に「bc」という文字列があるからですね。
ということでこれらを使用して次回から自作で関数を作って行きましょう。