Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:「株式会社」の表記ゆれ置換
#VBA100本ノック 60本目
会社名の「株式会社」の表記ゆれを正すFunctionを作成してください。
引数で文字列を受け取り、文字列で返してください。
(株)
(株)
㈱
㍿
株)…
株)…
…(株
…(株
このような表記を「株式会社」に変換してください。

◇ 出題ページはこちら
ソースコード
' 100本ノック060:「株式会社」の表記ゆれ置換 Function 株式会社の表記を統一(ByVal 元テキスト As String, Optional ByVal 置換後の文字列 As String = "株式会社") As String Dim 結果値 As String: 結果値 = 元テキスト Dim Arr置換リスト Arr置換リスト = Array("(株)", "株)", "(株", "㈱", ChrW(&H337F), ChrW(&H3291), ChrW(&H33CD)) Dim 置換対象 For Each 置換対象 In Arr置換リスト 結果値 = Replace(結果値, 置換対象, 置換後の文字列, Compare:=vbTextCompare) Next 株式会社の表記を統一 = 結果値 End Function
解説
複数文字種を順次置換していく問題です。
愚直にReplaceを並べてもよいですが、
対象を配列で定義しFor Eachで回す方がスマートに書けますね。
問題自体は「株式会社」に置換することが目的でしたが、
(株)にするなど、目的の文字列も設定できる関数にしてみました。
とはいえ毎回目的の文字列を指定するのも面倒ですので、
省略時は「株式会社」となるよう、Optionalの引数として設定しています。
こういった関数はOptionalを使って省略可能な引数を設定すると、
小回りが利いて使いやすい関数になります。
積極的に使っていきましょう。