VBA100本ノック 24本目:全角英数のみ半角
1 今回のお題
引数で受け取った文字列に対して、以下の処理を行い文字列で返す関数(Function)を作成してください。
・英小文字は英大文字にする
・全角の英数文字は半角にする
※英数文字とは:A-Z,a-z,0-9
"あいうABCアイウabc123"
↓
"あいうABCアイウABC123"
2 今回のお題の意図
正規表現を使って1文字1文字判定して、文字を書き換え。
3 回答
今回は完全に勉強回です。
Likeを使うときは、
if mystring Like ”*東京*” then
変数mystringに東京が含まれているか。このくらいでしか使ったことがありませんでした。
なので、まず回答をカンニング。
サイト管理者の回答
Function VBA100_24_01(ByVal s As String) As String Dim i As Long For i = 1 To Len(s) If Mid(s, i, 1) Like "[A-Za-z0-9]" Then Mid(s, i, 1) = StrConv(Mid(s, i, 1), vbNarrow + vbUpperCase) End If Next VBA100_24_01 = s End Function
なるほど~!と思いました。全角大文字英字は「A-Z」、全角小文字英字は「a-z」、全角数字は「0-9」。これを空白は入れずにつなげて「Like "[A-Za-z0-9]" 」と記述することで、全角大文字英字、全角小文字英字、全角数字かどうかを判断できます。
また、1文字ずつ比較する方法はLen関数で文字数の数だけループする。MID関数を使い、1文字ずつ判断する。条件に該当する場合は、StrConv関数で、大文字に変換(vbUpperCase)し、半角文字に(vbNarrow )に変換する。
まとめると、
処理手順
1 Len関数でループ処理
2 Mid関数で1文字ずつLikeで判定
3 Like条件に該当する場合、StrConv関数で文字を変換する。
以上です。
4 自分で練習問題
カンニングだけでは、分かった気がするだけなので自分で練習問題作りました。
問題
半角カタカナになっている文字を全角ひらがなにしなさい。
(例)アイウんガ → あいうんが
5 練習問題の回答
Function 半角→全角_ひらがな(ByVal mystring As String) As String Dim i As Integer For i = 1 To Len(mystring) If Mid(mystring, i, 1) Like "[ア-ン]" Then Mid(mystring, i, 1) = StrConv(Mid(mystring, i, 1), vbWide + vbUpperCase + vbHiragana) End If Next 半角→全角_ひらがな = mystring End Function
サイト管理者の書き方をちょっといじっただけですね。半角小文字かどうかを、Like "[ア-ン]"で判断。StrConv関数で、全角文字へ(vbWide )、大文字に変換(vbUpperCase )、カタカナをひらがなに(vbHiragana)変換しました。
6 感想
わかるようでわからない問題でした。ぱっと出ずに諦めましたが、今後はすんなりかけるようになろう!
ではでは、このへんで(^^)/~~~