Word VBAを使うなら知っておくべき「段落」の話とその操作方法

★気に入ったらシェアをお願いします!

paragraph

photo credit: Eva the Weaver 12 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けのWord VBAのシリーズということで便利な文字を入力するマクロの作り方をお伝えしています。

前回の記事はこちら。

Word VBAで作成したマクロをショートカットキーに登録する方法
初心者向けにWord VBAで便利な文字入力をするマクロの作り方シリーズ。今回は文書入力しながらサクサク使うために、Word VBAで作ったマクロをショートカットキーに登録する方法をお伝えします!

Word VBAで作成したマクロをショートカットキーに設定する方法をお伝えしました。

これで、文書を作りながらガンガンマクロの活用ができるというもの…!

と思いきや、これまで作ってきたマクロですが、状況によってうまく動作しないときがあるのです…。

それを解決するためには、Wordでいうと非常に重要な概念である「段落」、Word VBAで言うところのParagraphオブジェクトについて理解をする必要があります。

今回は、Word VBAで段落を表すParagraphオブジェクトとは何かについてお伝えしていきます。

文字列を挿入するWordマクロ

前回までに作ったマクロですが、選択範囲の前後に文字列を挿入するというものです。

百聞は一見にしかず、こちらのアニメをご覧ください。

Word VBAで作成したマクロをショートカットキーで動作

素敵ですね。

実際のコードはこちら。

もう連載6回目なのに、たったの二行…Word VBA深いですね。

うまく動作してくれない例

さて、このマクロなのですが、一部の状況において、うまく動作をしないことがあります。

例えば、以下のように箇条書きスタイルになっている段落を選択範囲としている場合です。

Wordで箇条書きの範囲を選択

この状態でマクロを実行すると…以下のように、InsertBeforeメソッドで挿入した段落にも箇条書きスタイルが適用されてしまっています。スタイル適用されなくていいのに…。

Wordで箇条書きの範囲を選択に対してマクロ実行

別の例もあります。

以下図のように、段落の冒頭がインデントされている段落を選択範囲としているときです。

Wordでインデントの段落を選択

この状態でマクロを実行すると、これまたInsertBeforeで挿入した段落にインデントが適用されてしまっています。インデントされなくていいのに…

Wordでインデントの段落を選択してマクロを実行

Wordの文字書式と段落書式

これの現象を解決するためには、Wordの「段落」について理解をしておく必要があります。

Wordでの書式設定は、実は2種類あります。フォントの種類、フォントのサイズ、太字や下線などは、文字単位で設定をする「文字書式」と言われています。一方で、スタイル(箇条書き、見出しなど)、インデント、配置などは、段落単位で設定する「段落書式」です。

つまり、段落書式を変更したいなら、段落を操作するのですよ。

この違いを理解せずに、全部文字単位で書式設定できちゃうと勘違いしていると、Wordはかなり使いづらいですし、当然ながらWord VBAの習得も大変です。

今回の例では、スタイルやインデントを調整したいわけですから、この場合もVBAで段落書式を操作していきたいということになります。

Paragraphオブジェクトを操作する

Wordの段落を取り扱うにはParagraphオブジェクトを使います。

Paragraphオブジェクトについてイメージをつかむために

  • 現在の文書から段落を取得
  • 特定の段落の配置を変える

という処理をしてみたいと思います。

では、以下コマンドをイミディエイトウィドウで入力して Enter してみましょう。

ちょっと長いですが、それぞれちゃんとメンバー補完が効きます。困ったら Ctrl + Space ですよ~。

さて、これを実行すると以下のように、一つの段落が中央揃えになりました。

Wordでインデントの段落を選択してマクロを実行

ドキュメント全体の段落を取得する

先ほどの命令を解説していきましょう。

まず、ThisDocumentは現在マクロを記述しているドキュメントを表すオブジェクト名です。かなり便利によく使うと思いますので、覚えておきましょう。

次いで、そのドキュメントについてのParagraphsコレクションをつかんでいます。

Documentオブジェクト.Paragraphs

コレクションは同種のオブジェクトの集合ですから、これで現在のドキュメントに含まれる全ての段落を集合として取得したということです。

段落の配置を変更する

コレクションの要素には、インデックス番号という1から始まる整数が振られています。

Paragraphsコレクションに対して、インデックス番号を指定してParagraphオブジェクトを取得するには

Paragraphsコレクション(インデックス番号)

とします。今回の例では、インデックス番号3のオブジェクトをつかんだということですね。

また、段落の配置を変更するには、ParagraphオブジェクトのAlignmentプロパティを設定します。

Paragraphオブジェクト.Alignment = 配置

配置に関しては以下の定数を参照ください。補完が効くとはいえ…長い。

定数 配置
wdAlignParagraphLeft 左揃え
wdAlignParagraphCenter 中央揃え
wdAlignParagraphRight 右揃え
wdAlignParagraphJustify 両端揃え
wdAlignParagraphDistribute 均等割り付け

Paragraphsコレクションのインデックス番号

今回、インデックス番号が3の段落を中央揃えしたわけですが、よーく文書を眺めると、なんとなく気づくのですが、Paragraphsコレクションのインデックス番号は文書の最初から順番に振られているんですね。

つまり、以下のようなナンバリングです。

Word文書のParagraphオブジェクトのインデックス番号

この特性を利用すれば、段落操作も楽になるというものです。

まとめ

今回は以上ですが、Word VBAでの段落の考え方と操作について、ある程度イメージができたのではないかと思います。

  • Wordの書式には文字書式と段落書式がある
  • 段落操作にはParagraphオブジェクトを使う
  • Paragraphsコレクションは上から順にインデックス番号が振られている

などといったことが今回のポイントです。

では、次回は選択範囲の中の段落について操作をしていきたいと思います。

Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
初心者向けWord VBAを使って便利な入力ツールを作る方法をお伝えしています。 今回はWord VBAで選択範囲の中から最初の段落と最後の段落を取得して、その文字列を出力する方法をお伝えします。

どうぞお楽しみに!

連載目次:初心者向けWord VBAで文字入力をしてみよう

お仕事でよく使う文書作成ソフトWord。実は、WordでもVBAでプログラミングができるんです。本シリーズでは、初心者向けとしてWord VBAで文字入力をする方法をお伝えしていきます。
  1. Word VBA入門の最初の一歩!マクロ作成準備の6つのステップ
  2. Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
  3. Word VBA初心者がまず押さえておくべき段落記号の入力方法
  4. Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法
  5. Word VBAで作成したマクロをショートカットキーに登録する方法
  6. Word VBAを使うなら知っておくべき「段落」の話とその操作方法
  7. Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
  8. Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
  9. Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
  10. Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法