和風スパゲティのレシピ

日本語でコーディングするExcelVBA

24本目:全角英数のみ半角

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は右辺に書くと文字列を切り出す「関数」ですが、
左辺に書いて文字列内部を置換する「ステートメント」として使うこともできます。

便利なことも多いので、知らなかった方はこの機会に覚えてしまってください。