【Word VBA】段落内の文字間隔を調整する

2016年6月6日

かつて「【Wordマクロ】字間を調整する」という記事で、カーソルで選択した文字の間隔を調整するマクロを紹介しました。

今回は、カーソルがある段落の文字間隔を調整するマクロです。文字列を選択する必要がありません。

オートシェイプ内の文字列や本文中の文字列など、ちょっと文字間隔を調整するだけで見栄えがよくなります。

(調整前)
16-06-034

(調整後)
16-06-035

そんなときに、Wordの機能の文字列の均等割り付け機能があります。

16-06-032

ところが、この機能だと微調整が若干難しかったりします。

そこで、もう少し簡単にざっくりと調整できるようなマクロをつくってみました。

このマクロでできること

カーソルが置かれた段落の文字間隔を調整します。

フォントの文字間隔機能を使います。1ポイントずつの増減を調整するマクロと標準に戻すマクロがあります。

16-06-033
(Ctrl + D で開く[フォント]ダイアログボックスです)

マクロの解説

3種類のマクロがあります。

文字間隔増加、文字間隔低下、文字間隔リセットです。

操作自体は、プログラム文中にコメントで入れたとおりです。

工夫したポイントは、段落末尾の半角スペースや全角スペースを処理対象外にしたことです。

16-06-036

矢印部分のスペースは中央の位置決めの際に無視されていますね。

ところが、文字間隔の調整をすると、ずれが生じてしまうのです。なので、スペースやタブについては、文字間隔の調整対象から除外するようにしました。

また、最後の1文字も調整対象から除外しています。

この処理を、プログラム文中の「対象範囲を指定」部分で実行しています。

マクロ


Sub 文字間隔増加()
 Call 文字間隔調整(1)
End Sub

Sub 文字間隔低下()
 Call 文字間隔調整(-1)
End Sub

Sub 文字間隔リセット()
 Call 文字間隔調整(0)
End Sub

Private Sub 文字間隔調整(mySpace As Integer)

 Dim myRange As Range
 Dim myCset As String
 
 '-------------------------------------------
 '不要な文字列の設定
 '-------------------------------------------
 myCset = vbCr & vbTab & Chr(32) & _
      Chr(-32448) & Chr(7)
 
 '-------------------------------------------
 '対象範囲を指定
 '-------------------------------------------
 '段落全体をRangeオブジェクトに設定
 Set myRange = Selection.Paragraphs(1).Range
 
 '末尾の不要な文字列を除外
 myRange.MoveEndWhile Cset:=myCset, _
            Count:=wdBackward
  
 '最後の一文字を除外
 myRange.MoveEnd Unit:=wdCharacter, _
         Count:=-1
 
 '-------------------------------------------
 '文字間隔を調整
 '-------------------------------------------
 With myRange.Font
  '標準に戻す
  If mySpace = 0 Then
   .Spacing = 0
  Else
  '増加・低下処理
   .Spacing = .Spacing + mySpace
  End If
 End With
 
 '-------------------------------------------
 'Rangeオブジェクトの解放
 '-------------------------------------------
 Set myRange = Nothing
 
End Sub

 

▼関連記事

【Wordマクロ】字間を調整する

【Word】字間を調整する

-コード
-