なぜ、文字列操作の「引き出し」が必要なのか
現場の業務改善ツールを作っていると、データの整形に追われることが多々あります。「システムから出力されたCSVが汚い」「住所から県名だけを抜き出したい」「特定の区切り文字で分割したい」といった要望は日常茶飯事です。
初心者はつい、For文とMid関数を組み合わせて一文字ずつ判定するような重いコードを書きがちですが、これでは処理速度が低下し、メンテナンス性も損なわれます。今回は、ベテランが実務で愛用する「最短ルート」のテクニックを伝授します。
Split関数と配列の「合わせ技」で分割を瞬殺する
一番の推奨は、Split関数の活用です。例えば「部署名_氏名」という文字列から、アンダーバーを境に分割したい場合、多くの人はInStr関数で位置を探してMid関数で切り出します。しかし、Splitを使えば一撃です。
Dim arr() As String
arr = Split(TargetString, “_”)
‘ これだけで arr(0)に部署名、arr(1)に氏名が入る
このテクニックの真骨頂は、Splitの結果を直接配列として扱うことです。データが大量にある場合、いちいち変数に格納せず、ループの中で直接インデックスを指定して処理することで、コードを劇的に短縮できます。
InStrRev関数で「後ろから」探す重要性
次に、フルパスから「ファイル名だけ」を抜き出すようなケースです。InStr関数で頭から検索をかけると、フォルダ名に含まれる「\」記号に阻まれてしまいます。
ここで登場するのがInStrRev関数です。これは文字列の最後から検索を開始する関数です。「一番右にある区切り文字の位置」を特定できるため、ファイル名抽出のような処理では、これを使わない手はありません。
Replace関数を「削除」に応用する発想の転換
意外と見落とされがちなのが、Replace関数を削除目的に使うテクニックです。例えば、電話番号に含まれるハイフンをすべて消したい場合、わざわざループを回す必要はありません。
TargetString = Replace(TargetString, “-“, “”)
このように、第二引数を空文字にすることで、特定の文字を「一括消去」できます。実務では、「不要な空白をすべて詰める」といった処理で非常に重宝します。
文字列操作は「VBA関数の組み合わせ」が最強
最後に、ベテランとしての心得を一つ。文字列操作において「自作のロジック」はなるべく避けるべきです。VBAに標準搭載されているStrConv関数やLeft, Right, Len, InStr, Replaceといった関数をどう組み合わせるかに知恵を絞ってください。
自作の複雑な判定ロジックよりも、標準関数を組み合わせたシンプルなコードの方が、後任者が引き継いだ際のバグ発生率が圧倒的に低くなります。
明日の業務から、ぜひ「ループを回さずに一括処理できないか?」という視点で文字列操作を見直してみてください。それだけで、あなたの書くマクロは一段上のレベルに到達します。
