VBA100本ノック 24本目:全角英数のみ半角

この記事から得るもの

正規表現の使い方。
StrConv関数で文字を変換する方法。

1 今回のお題

引数で受け取った文字列に対して、以下の処理を行い文字列で返す関数(Function)を作成してください。
・英小文字は英大文字にする
・全角の英数文字は半角にする
※英数文字とは:A-Z,a-z,0-9
"あいうABCアイウabc123"

"あいうABCアイウABC123"

excel-ubara.com

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 感想

わかるようでわからない問題でした。ぱっと出ずに諦めましたが、今後はすんなりかけるようになろう!

ではでは、このへんで(^^)/~~~