【入門編】【初心者向け】ワイルドカード検索で「日付形式(YYYY/MM/DD)」を抽出して整形する – Word VBA解析バイブル

スポンサーリンク

Word VBAを掌握する極限の知見:ワイルドカードで「日付」を自在に操る

こんにちは。Word VBAの深淵へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で脆いコードに満足していませんか?
今日解説するのは、Word VBAの心臓部の一つである「`Find`オブジェクト」と、その力を最大限に引き出す「ワイルドカード」の活用術です。

これさえマスターすれば、数千ページの文書から日付を一瞬で検出し、あなたの望むフォーマットへ整形できるようになります。さあ、自動化の第一歩を踏み出しましょう。

—

1. なぜ「ワイルドカード」なのか?

Wordの検索機能には、通常の検索とは別に「ワイルドカード(正規表現の簡易版)」という強力なモードがあります。
これを使うと、「数字の連続」や「特定のパターンの繰り返し」を抽象化して指定できます。

例えば、`2023/5/1` も `2023/12/31` も、バラバラな形式を一つのルールで捉えることができるのです。

ワイルドカードの基本記号

  • `[0-9]`:0から9のいずれか1文字
  • `{n}`:前の文字がn回繰り返す
  • `()`:グループ化(後で再利用するために使う)

—

2. 実践:YYYY/MM/DD形式を抽出するコード

まずは、文書内にある「4桁の年/1〜2桁の月/1〜2桁の日」を検索し、ログに出力するコードを見てみましょう。

Sub ExtractDatePatterns()
Dim rng As Range
Set rng = ActiveDocument.Content

‘ 検索条件の設定
With rng.Find
.ClearFormatting
.Text = “([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})” ‘ 検索パターン
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = True ‘ これをTrueにしないと始まらない!

‘ 検索実行
Do While .Execute
‘ 見つかった日付をイミディエイトウィンドウに表示
Debug.Print “発見した日付: ” & rng.Text

‘ 次の検索へ進むために範囲を縮小
rng.Collapse Direction:=wdCollapseEnd
Loop
End With
End Sub

コードの重要ポイント

  • `.MatchWildcards = True`: これを忘れると、ワイルドカードはただの文字列として扱われます。
  • `rng.Collapse`: これが伝説的なエンジニアへの分かれ道です。検索で見つかった範囲(`rng`)のまま次のループを回すと、無限ループに陥ります。必ず最後尾へカーソルを移動させましょう。

—

3. さらに先へ:日付を「整形」する置換術

ただ見つけるだけでは物足りないですよね。次は、`2023/5/1` を `2023年05月01日` に一括変換する極意を教えます。

ここで使うのが「置換後の文字列でのグループ参照」です。

Sub FormatDates()
Dim rng As Range
Set rng = ActiveDocument.Content

With rng.Find
.ClearFormatting
.Replacement.ClearFormatting

‘ 検索:年(1) / 月(2) / 日(3)
.Text = “([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})”

‘ 置換:\1は検索の1番目の括弧の中身を指す
‘ 月日が1桁の時に0を足すような高度な制御は、
‘ この後さらに工夫が必要ですが、まずは基本の置換を。
.Replacement.Text = “\1年\2月\3日”

.MatchWildcards = True
.Replacement.ReplaceAll ‘ 一括置換
End With
End Sub

—

4. 初心者が陥りやすい「3つの罠」

1. 「検索方向」の迷子:
`ActiveDocument.Content` は文書の先頭から始まりますが、一度検索すると `rng` の位置が移動します。常に文書全体を対象にしたい場合は、ループの度に `rng` を初期化するか、`StoryRanges` を意識する必要があります。
2. 書式設定の残留:
`.ClearFormatting` を忘れると、以前のマクロで設定した「太字」や「赤文字」といった条件が残り、検索がヒットしなくなります。常にクリーンな状態から始めるのがプロの流儀です。
3. マッチングの貪欲さ:
ワイルドカードは非常に強力ですが、意図しない文字列まで巻き込んでしまうことがあります。`[0-9]{1,}` のような表現を使う際は、前後の文字(スペースや括弧など)を条件に含めて精度を高めましょう。

—

最後に:あなたが目指すべき場所

Word VBAにおける「検索と置換」は、単なる文字列操作ではありません。文書という「構造データ」を、ロジックで再構築する作業です。

今回紹介したワイルドカードは、その入り口に過ぎません。まずはこのコードをコピーして、手元の文書で試してみてください。エラーが出たら、それは「PCがあなたにヒントをくれている」証拠です。

ここをクリアできれば、あなたはもう「マクロの記録」の住人ではありません。自分自身でWordを操る、自動化エンジニアの入り口に立っています。

次は、日付を判定して曜日を自動補完するような「動的な処理」に挑戦してみませんか?応援しています。

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