こんにちは! Wordでの書類作成や校正作業、本当にお疲れ様です。
何十ページもある仕様書や報告書を読み返して、「うわ、この段落、一文が長すぎて何を言いたいのか分からない……!」と頭を抱えた経験はありませんか?
手作業で一文字ずつ数えていたら、それだけで一日が終わってしまいますよね。
今回は、そんな果てしない校正地獄からあなたを救い出す、「長すぎる段落を自動で見つけ出して赤字にするチート級マクロ」の作り方を伝授します。
ここをクリアすれば、Word VBAの「文書を上から順に眺めて、条件に合うところだけを書き換える」という基本のキがバッチリ身につきますよ。
さあ、私と一緒にWord VBAの世界の扉を開けましょう!
—
なぜ「文字数カウント&警告」をVBAでやるべきなのか?
マクロの記録ボタンを押して操作を覚えるのは素晴らしい第一歩ですが、そこから一歩進んで「自分でコードを書く」ようになると、Wordはただのワープロソフトから「最強の自動アシスタント」へと変貌します。
今回のツールは、次のようなステップで動作します。
1. 文書の中にある段落を、先頭から終わりまで1つずつ順番にチェックする。
2. それぞれの段落の文字数(句読点やスペースも含む)を数える。
3. もし「50文字(※お好みの基準)」を超えていたら、その段落の文字色を赤色に変える。
これさえあれば、人間は「赤くなっている段落だけを修正する」ことに集中すればよくなるため、校正スピードが爆発的に上がります。
—
さっそくコードを書こう! 全ソースコード
まずは、開発の現場でそのままコピペして使える実用的なコードをお見せします。
VBE(Visual Basic Editor)を開いて、標準モジュールに貼り付けてみてください。
Sub CheckLongParagraphs()
‘ 変数の宣言(箱を用意するイメージです)
Dim para As Paragraph
Dim targetLength As Long
Dim warningCount As Long
‘ 【設定】何文字以上で警告するか(お好みで変更してください)
targetLength = 50
‘ 警告した段落の数を数えるためのカウンターをリセット
warningCount = 0
‘ 文書内のすべての段落を上から順にループ(繰り返し処理)する
For Each para In ActiveDocument.Paragraphs
‘ 段落の末尾にある改行マークなどを除いた純粋な文字数を取得
‘ ※ Len(para.Range.Text) だと段落記号も含んでしまうため、Trimで前後の空白等を整理
If Len(Replace(para.Range.Text, vbCr, “”)) > targetLength Then
‘ 条件クリア:文字数が基準を超えている場合、フォントを赤色にする
para.Range.Font.Color = wdColorRed
‘ 警告カウンターを1つ増やす
warningCount = warningCount + 1
Else
‘ 条件外:もし以前に赤くしたけれど短く修正された場合のことを考え、黒に戻す
para.Range.Font.Color = wdColorAutomatic
End If
Next para
‘ 処理結果をメッセージボックスで優しくお知らせ
If warningCount > 0 Then
MsgBox “チェック完了です!” & vbCrLf & _
targetLength & “文字を超えている長すぎる段落が ” & warningCount & ” 箇所見つかりました。” & vbCrLf & _
“赤字になっている部分を確認して修正してくださいね。”, vbExclamation, “校正アシスタント”
Else
MsgBox “素晴らしい! 基準を超える長い段落はありませんでした。”, vbInformation, “校正アシスタント”
End If
End Sub
—
初心者つまずきポイント徹底解説! コードの急所
「なんだか英語と記号ばかりで難しそう……」と思いましたか? 大丈夫です。このコードの心臓部は、たったの3つの要素でできています。
1. `For Each para In ActiveDocument.Paragraphs` (全段落の総ナメ)
WordVBAの最も強力な武器がこれです。
`ActiveDocument`(いま開いているドキュメント)の中にある `Paragraphs`(すべての段落)を、`For Each` という命令を使って先頭から一番最後まで自動で1つずつめくっていくイメージです。
人間が目視でスクロールしていく作業を、一瞬で肩代わりしてくれます。
2. `Len(Replace(para.Range.Text, vbCr, “”))` (文字数の正確なカウント)
ここがWord VBAで初心者が一番ハマりやすい罠です。
単に `para.Range.Text` と書くと、Word特有の「見えない段落記号(改行マーク:`vbCr`)」まで文字数としてカウントされてしまいます。
そのため、`Replace` 関数を使って見えない段落記号を空っぽ(””)に置き換えてから、`Len` 関数で純粋な文字数を数えているのです。この気配りがプロの技ですよ。
3. `para.Range.Font.Color = wdColorRed` (スタイルの動的変更)
条件に一致したら、その段落の範囲(`Range`)のフォント(`Font`)の色(`Color`)を、あらかじめ用意されている定数 `wdColorRed`(赤色)に変更しています。
もちろん、赤色だけでなく太字にしたり(`.Bold = True`)、蛍光マーカーを引いたりすることも自由自在です。
—
実際に動かしてみよう! 実行の手順
1. Wordを開き、適当な文章(短い行と、わざとダラダラと長く書いた行)をいくつか入力します。
2. キーボードの [Alt] + [F11] を押して、VBAの編集画面(VBE)を開きます。
3. メニューの [挿入] > [標準モジュール] をクリックします。
4. 真っ白な画面が出てくるので、先ほどのコードをそのまま貼り付けます。
5. キーボードの [F5] キーを押すか、上部の再生ボタン(緑の三角)を押して実行します!
Wordの画面に戻ってみてください。基準の50文字を超えた段落だけが、見事に真っ赤に染め上がっているはずです。
—
まとめ:ここをクリアすれば、次は「自分だけのカスタマイズ」へ!
お疲れ様でした! これであなたは、Wordの面倒な文字数カウントと視覚的な警告をワンクリックで自動化するスキルを手に入れました。
「文字数だけでなく、特定の一文が含まれていたら警告したい」
「赤字にするだけでなく、自動でコメント(吹き出し)を挿入したい」
そんな欲が出てきたら、あなたもう立派なVBAエンジニアの仲間入りです。
業務の退屈な繰り返し作業はマクロに任せて、あなたにしかできないクリエイティブな仕事に時間を使いましょう。
それでは、次回の応用編でお会いしましょう!
