【入門編】【初心者向け】特定の文字列を囲む「括弧」ごと一括削除する方法 – Word VBA解析バイブル

スポンサーリンク

こんにちは!Word VBAの世界へようこそ。
マクロの記録ボタンを押して「なんだかよく分からないけれど自動で動いたぞ!」と感動したのもついで、いざ自分でコードを書こうとすると壁にぶつかる……そんな時期が一番楽しいけれど、一番悩ましいですよね。

今回は、業務でも本当によくある「特定の記号で囲まれた文字を、記号ごと丸ごと一括で消し去りたい!」というテーマを取り上げます。

例えば、アンケート結果や仕様書の中に残ってしまった、こんなテキストたち。

  • 「(※後で修正すること)」
  • 「【社外秘】」
  • 「(要確認)」

これを一つひとつ手作業で探して消していくのは、エンジニアの仕事ではありません。Word VBAの「ワイルドカード検索」という強力な武器を使って、一撃でクレンジングする方法をマスターしましょう。ここをクリアすれば、Word VBAの基本と「文字列操作の本質」がグッと身近になりますよ。

1. なぜ「普通の置換」ではダメなのか?

Wordの画面にある「検索と置換(Ctrl + H)」を開いたことがある方なら分かると思いますが、普通の置換では「(」から「)」までの可変の文字列を指定して消すことができません。
「(」と入力して、「)」と入力して……中身が毎回変わるのだから当然ですよね。

ここで登場するのが、ワイルドカード(特殊文字)です。
Wordのワイルドカードは、実はプログラムの「正規表現」によく似た挙動をします。これを使うことで、「任意の文字列」をパターンで捉えることができるようになります。

2. 魔法のパターン:「`()`」の正体

今回のキモとなる検索ワードはこれです。

`()` (全角の括弧の場合)

  • “(アスタリスク):プログラミングの世界で「任意のゼロ文字以上の連続」を表す超重要キャラです。
  • 括弧で挟む:「(」と「)」の間にあるものは何であれ、すべてキャッチしなさい、という意味になります。

つまり、`()` は、「丸括弧で囲まれた中身ごと、すべてをターゲットにする」という強力な呪文なのです。

3. 実装コード:一括削除のマクロを書こう

それでは、実際に動かすためのVBAコードを見てみましょう。
以下のコードを、WordのVBAエディタ(Alt + F11 で開けます)の標準モジュールに貼り付けてみてください。

Sub RemoveBracketsAndText()
‘ 画面のちらつきを抑えて高速化するお作法
Application.ScreenUpdating = False

‘ 検索・置換オブジェクトを変数に格納してコードをスマートに
With Selection.Find
‘ 1. 前回の検索条件が残らないように綺麗にリセット
.ClearFormatting
.Replacement.ClearFormatting

‘ 2. 検索する文字列(ワイルドカードを使用)
‘ ※半角括弧なら ( )、隅付き括弧なら 【】 に書き換えてください
.Text = “()”

‘ 3. 置換後の文字列(「何もしない」=空っぽにする)
.Replacement.Text = “”

‘ 4. ワイルドカードを使用するフラグをONにする(超重要!)
.MatchWildcards = True

‘ 5. 文書全体を対象に、一括置換を実行する
.Execute Replace:=wdReplaceAll
End With

‘ 画面描画を元に戻す
Application.ScreenUpdating = True

‘ 完了の合図
MsgBox “括弧で囲まれた文字列の一括削除が完了しました!”, vbInformation
End Sub

コードのここがポイント!

  • `Application.ScreenUpdating = False`

プロっぽいエンジニアが必ず書くおまじないです。処理中の画面の書き換えを一時停止することで、マクロの動作スピードが劇的に跳ね上がります。

  • `.MatchWildcards = True`

「ワイルドカードを使いますよ」というスイッチです。これを忘れると、`()`という記号そのものを探してしまうので注意してください。

4. 初学者が絶対にハマる「3大エラー&落とし穴」

このワイルドカード置換、非常に強力な反面、初心者が必ずと言っていいほどハマるポイントがあります。先に知っておけば怖くありません。

落とし穴①:半角と全角の罠

「コード通りにやったのに、消えません!」という質問の8割がこれです。
プログラム内の `()` は全角の括弧になっています。もし削除したい対象が半角の `(…)` なのであれば、検索ワードも `.Text = “()”` に変更する必要があります。文字の全角・半角はコンピュータにとっては全く別の文字なので注意しましょう。

落とし穴②:予期せぬ長距離マッチ(貪欲な検索)

もし文書内に以下のような文章があったらどうなるでしょうか?
> 「本日は晴天なり(午後は雨の予報です)、傘をお忘れなく。」

もし、文書の途中に別の括弧がなく、これが「一つの段落内」や「大きな範囲」として解釈された場合、Wordのワイルドカードは「最初の `(` から、最後の `)」まで」を一つの塊として捉えてしまうことがあります。
今回は初学者向けにシンプルに紹介していますが、もし「文をまたいで消えてしまった!」という場合は、検索パターンを `.Text = “([!)]@)”` (括弧の中に閉じ括弧を含まない)といった少し高度な表現にする必要が出てきます。まずはシンプルな文書テストから始めてみてください。

落とし穴③:Selection(選択範囲)に頼りすぎない

今回はコードの分かりやすさを優先して `Selection.Find` を使いましたが、実務の現場では画面上のカーソル位置に依存しない `ActiveDocument.Content.Find` のように、文書オブジェクトを直接叩く書き方がプロの主流です。慣れてきたら「カーソルを選ばずに背後で一瞬で処理する書き方」にも挑戦してみましょう。

おわりに

お疲れ様でした!
今回学んだ `Find` オブジェクトとワイルドカードの組み合わせは、Word VBAの自動化において最強のスキルの一つです。これが使えるようになると、毎日何時間もかけて手作業でやっていた文字のクリーニングが、わずか0.1秒で終わるようになります。

「ここをこう変えたらどうなるだろう?」という好奇心を大切に、ぜひご自身の業務データで試してみてくださいね。
あなたのWord VBAライフが、より快適でクリエイティブなものになりますように!

タイトルとURLをコピーしました