Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:全角英数のみ半角
#VBA100本ノック 24本目
引数で受け取った文字列に対して、以下の処理を行い文字列で返す関数(Function)を作成してください。
・英小文字は英大文字にする
・全角の英数文字は半角にする
※英数文字とは:A-Z,a-z,0-9
"あいうABCアイウabc123"
↓
"あいうABCアイウABC123"

◇ 出題ページはこちら
ソースコード
' 100本ノック024:全角英数のみ半角 Function StrConv英数半角大文字(元文字列 As String) As String Dim 結果値 As String: 結果値 = 元文字列 Dim n As Long For n = 1 To Len(元文字列) Dim 第n文字 As String: 第n文字 = Mid(結果値, n, 1) If 第n文字 Like "[A-Za-z0-9]" Then Mid(結果値, n, 1) = StrConv(第n文字, vbNarrow + vbUpperCase) End If Next StrConv英数半角大文字 = 結果値 End Function
解説
StrConv関数で一発対応できない文字列変換の問題でした。
カナと英数字で異なる変換を行いたい場合は、
本問のように1文字ずつループする必要が出ます。
結果値は専用変数を用意して1文字ずつ結合していってもいいですが、
Midステートメントで置換することでも処理できます。
Midは右辺に書くと文字列を切り出す「関数」ですが、
左辺に書いて文字列内部を置換する「ステートメント」として使うこともできます。
便利なことも多いので、知らなかった方はこの機会に覚えてしまってください。