前回のおさらい
- 郵便番号の形式を整えるためにユーザーがどのような形で入力する可能性があるのか考えて見ました。
- Len関数を使用して一文字ずつ検査して置き換えて行きました。
- 最後にFormat関数で郵便番号として認識出来る形に整えました。
氏名情報を整える条件を考えよう
ではまずは氏名欄に入力された情報を整える関数を作って行きましょう。
まずは前回同様にどのような形で入って来る可能性があるのか考えて見ましょう。
- 漢字
- 全角ひらがな
- 全角カタカナ
- 半角カタカナ
- 名字と名前の間にスペースの有無
こんな感じでしょうか。漢字の場合はまぁ問題ないですね。全角ひらがなだった場合もどのような漢字なのかをこちらが知る由がありませんのでそのままで問題ないでしょう。
カタカナだった場合はひらがなで統一しましょう。
スペースはあったりなかったりするとややこしいので消してしまいましょう。
書いて見ましょう
' 氏名入力情報を整える関数 Function nameConv(s As String) As String '文字列中からスペースを削除 '半角・全角どちらのパターンも考える s = Replace(s, " ", "") s = Replace(s, " ", "") s = StrConv(s, vbHiragana) nameConv = s End Function
まずは半角スペースを削除、続いて全角スペースを削除。最後にカタカナだった場合はひらがなに変換。
そして、最後に関数の実行結果として自分自身に変換した文字列を入れて完了ですね。
住所情報を整えよう
住所に関しては簡単にやってしまいましょう。
その住所が本当にあっているのかどうかはわかりかねる情報なので、番地の数字を半角数字・ハイフンを半角ハイフンに統一して行きましょう。
もうここまでくれば要領は掴んでいると思いますので書いて行きましょう。
Function addressConv(s As String) As String Dim i As Long Dim a As String For i = 1 To Len(s) If IsNumeric(Mid(s, i, 1)) Or Not Mid(s, i, 1) Like "[ア-ン]" Then a = a & StrConv(Mid(s, i, 1), vbNarrow) Else a = a & Mid(s, i, 1) End If Next addressConv = StrConv(s, vbNarrow) End Function
今回は簡単にStrConv関数で半角変換で済む話ではあるのですが、仮にカタカナが入って来た場合はVbNarrowではそれも変換されてしまいますので、ifで条件分岐をしています。
数字だった場合、カタカナの「ア」~「ン」じゃなかった場合に変換させています。
セルに代入
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 input_value(1) = postNumConv(input_value(1)) input_value(2) = addressConv(input_value(2)) input_value(3) = nameConv(input_value(3)) Range("a1").Resize(UBound(input_value, 1)).Value = WorksheetFunction.Transpose(input_value) End Sub
これで完了ですね。
まとめ
今回はちょっとした練習で全部をユーザーフォームのプロシージャの中に書きましたが、通常の標準モジュールに書いて呼び出す方がスマートなやり方かもしれません。
また、今回はひとつずつ文字列を変換するFunctionプロシージャを分けてますが共通する部分があったら、または引数として条件(数字等)を与えてそれにより処理内容を分岐させるのも良いでしょう。
最初のうちはわざわざ自作関数を作るメリットが思い浮かばないかもしれませんが、こういった考え方は後々の役にたって来ますのでぜひ覚えておきましょう。
次回は高速処理について考えて見ようかと思います。