Word VBAで段落先頭の全角スペースを一括でインデントに変更するマクロの作り方

indent

photo credit: theloushe Jan 08 (13) via photopin (license)

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

Word VBAで段落の冒頭の全角スペースをインデントに一括変更するマクロの作り方をお伝えしています。

前回の記事はコチラです!

Word VBAで検索した結果の段落とその範囲の開始位置を取得する方法
Word VBAで段落の冒頭の全角スペースをインデントに変更するマクロを作っています。今回は検索した全角スペースが含まれる段落を取得する、またその段落範囲の開始位置を取得する方法をお伝えします。

全角スペースを検索して、発見した全角スペースが段落の冒頭にあるかどうかを判定するプロシージャを作りました。

さて、今回はいよいよWord VBAで全角スペースをインデントに変更していく処理を追加したいと思います。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

前回作成した記事はこちらです。

Sub removeSpaces()

With Selection.Find
    .Text = " "
    .Wrap = wdFindContinue
    .MatchByte = True
    Do While .Execute
        If Selection.Start = Selection.Paragraphs.First.Range.Start Then
            Debug.Print "インデントに差し替えます"
        Else
            Debug.Print "何もしません"
        End If
        Stop
    Loop

End With

End Sub

ポイントは8行目ですね。

  • Selection.Start:Executeメソッドの結果発見した全角スペースの開始位置
  • Selection.Paragraphs.First.Range.Start:Executeメソッドの結果発見した全角スペースが含まれる段落範囲の開始位置

この二つが等しければ、Executeメソッドの全角スペースは段落の冒頭にあるということですね。

ですから、今はDebug.Printの処理となっている9行目を

  • Executeメソッドの結果発見した全角スペースを削除する
  • 該当の段落の先頭をインデントする

という処理に差し替えていけばOKですね。

選択範囲のテキストを削除する

では、まずExecuteメソッドの結果発見した全角スペースを削除する処理を考えていきましょう。

Executeメソッドの結果発見した全角スペースは選択されている状態、つまりSelectionオブジェクトですから、SelectionオブジェクトのテキストつまりTextプロパティを操作します。

Selection.Text = 値

今回は、全角スペースつまり選択範囲のテキストすべてを削除してしまいたいので、Textプロパティの値を「空」にすれば良いですね。

Selection.Text = ""

これでOKです。

インデントは段落書式

では続けて、インデントを挿入する方法について解説をしていきます。

以下記事でお伝えしている通り、インデントは「段落書式」なので段落に対して設定をする必要があります。

Word VBAを使うなら知っておくべき「段落」の話とその操作方法
初心者向けのWord VBAのシリーズということで便利な文字を入力するマクロの作り方をお伝えしています。Word VBAで段落を表すParagraphオブジェクトとその操作方法についてお伝えしていきます。

その証拠にWordのリボン「ホーム」を開くと、「インデントを減らす」「インデントを増やす」アイコンは「段落」のコーナーに配置されていますでしょ?

Wordのホームリボンの段落コーナー

ついでに、段落の設定ものぞいてみましょう。小さいですが、右下のアイコンをクリックすると、「段落の設定ウィンドウ」が開きます。

すると「インデントと行間隔」タブの中断あたりに「インデント」関連の設定がありますね。

Wordの段落の設定ウィンドウ

そして「最初の行」という箇所がありますね。VBAを用いてこの「最初の行」を「字下げ」に、その幅を「1字」にできればよさそうです。

段落のインデントを設定する方法

ポイント単位でインデントの設定するFirstLineIndentプロパティ

VBEで F2 キーを押してオブジェクトブラウザーを開き、「indent」と入力してみると、以下のように Paragraphオブジェクトのメンバーとして「FirstLineIndent」といういかにもな名前のプロパティを発見します。

VBEのオブジェクトブラウザーでindentを検索

これだ!

ということで、例えば以下のようにWord文書で選択している状態で

Word文書で段落を選択

イミディエイトウィンドウに以下入力して Enter をしてみましょう。

Selection.Paragraphs.First.FirstLineIndent = 1

インデントがどうなっているかというと…

Word VBAで段落の最初の行が1ポイント字下げ

変わってないやんけー

と思いきや、よーくよーく見ると…少しだけ、ほんの少しだけインデント入っているのわかりますか?

聡明な読者の皆さんは、もうおわかりだと思うのですが、FirstLineIndentプロパティの設定単位はポイント単位なのです。

Paragraphオブジェクト.FirstLineIndent = 幅(ポイント単位)

同様に、左インデントと右インデントをそれぞれポイント単位で設定するLeftIndentプロパティ、RightIndentプロパティもありますので、合わせて紹介しておきますね。

Paragraphオブジェクト.LeftIndent = 幅(ポイント単位)
Paragraphオブジェクト.RightIndent = 幅(ポイント単位)

文字単位でインデントを設定するCharacterUnitFirstLineIndentプロパティ

じゃあ、文字単位にしたい場合はどうしたらよいでしょう。

1文字あたりのポイント数はフォントサイズに依存しているから、フォントのポイント数を調べる?でもフォント種類や文字によって違うようなどうだっけ…

はい、そんなことは気にしなくてOKです。実は文字単位でインデントをする別のプロパティがあります。

最初の行のインデントを文字単位で設定するCharacterUnitFirstLineIndentプロパティです。

Paragraphオブジェクト.CharacterUnitFirstLineIndent = 幅(文字数)

先ほどのWord文書に対して、以下ステートメントをイミディエイトウィンドウで実行してみましょう。

Selection.Paragraphs.First.CharacterUnitFirstLineIndent = 1

すると、無事に1文字分のインデントが挿入されましたね。

Word VBAで段落の最初の行を1文字分字下げ

同様に、左インデント、右インデントをそれぞれ文字単位で設定するプロパティも紹介しておきますね。

Paragraphオブジェクト.CharacterUnitLeftIndent = 幅(文字数)
Paragraphオブジェクト.CharacterUnitRightIndent = 幅(文字数)

しかし、プロパティ名が長い…

段落冒頭の全角スペースをインデントに変更するプロシージャ

以上を踏まえて、全角スペースを検索してそれが段落の先頭であれば削除をしてインデント1文字分に差し替えるプロシージャを作りました。

Sub removeSpaces()

Dim par As Paragraph

With Selection.Find
    .Text = " "
    .Wrap = wdFindContinue
    .MatchByte = True
    Do While .Execute
        Set par = Selection.Paragraphs.First
        If Selection.Start = par.Range.Start Then
            Selection.Text = ""
            par.CharacterUnitFirstLineIndent = 1
        End If
        Stop
    Loop

End With

End Sub

12行目で全角スペースを消す、13行目で段落の最初の行にインデントを1文字追加します。

これを実行すると、以下のようにじゃんじゃん全角スペースをインデントに変更をしていきますよ。

Word VBAで段落先頭の全角スペースをインデントに変更

もちろん、Stopステートメントを削除すれば有無も言わさず一気に処理ができます。

まとめ

Word VBAで段落先頭の全角スペースをインデントに一括変更するマクロの作り方をお伝えしました。

以下2点が今回のポイントです。

  • インデントの設定は段落に対して行う
  • インデントの設定をするプロパティはポイント単位で設定するものと文字単位で設定するものがある

知っておいて損はないですね。

以上でシリーズの目的は達成しましたが、また便利なマクロがありましたら紹介しますね。

どうぞお楽しみに!

連載目次:Word VBAで全角スペースをインデントに一括変更する

Wordで文書を作成するときに、段落の冒頭をうっかり全角スペースにしてしまったりすることありますよね。全部インデントに統一しておきたい、そんなときに使える一括変更マクロを作っていきます。
  1. Word VBAで文書全体で全角スペースのみを検索する方法
  2. Word VBAで検索した結果の段落とその範囲の開始位置を取得する方法
  3. Word VBAで段落先頭の全角スペースを一括でインデントに変更するマクロの作り方
タイトルとURLをコピーしました