VBAで段落前後のスペースを操作する(Word)

VBAで段落前後のスペースを操作する(Word)

軽くハマったので報告。

何がしたかったか

Googleフォームで集めたアンケート結果の自由記述の部分をWordに移して整形したかった。

ただずらずらと並べただけだと読みづらいので、一人分づつ記述の間にスペースを空けて読みやすくしたい。

単にこれだけなら、段落の後ろに0.5行とか間隔を空けるようなスタイルを作って、そいつを全体に適用すればよい。

しかし、このやり方だと、回答の中で改行(段落)しているものがあると、全部隙間が空いてしまって具合が悪い。

幸い、改行を含む回答を、GoogleスプレッドシートからテキストファイルとかWordドキュメントにコピペすると、回答全体の頭とケツをダブルクオーテーションで括った形になっている。

……ということは、次のように処理すれば良いと考えたのだ。すなわち、

  1. 回答全体をWordドキュメントにコピペする。
  2. 各段落に対して、後ろに0.5行の間隔を空けるスタイルを当てていく。
  3. 段落の先頭に「"」(ダブルクォーテーション)がある段落については、間隔を「0」にする。
  4. 置換機能でダブルクォーテーションを削除する。

これで万全だと思った。

しかし、だめだったのである。

3.のところがうまくいかなかったのだ。

Paragraph.Range.ParagraphFormatオブジェクトのLineUnitAfterプロパティとか、SpaceAfterプロパティに値を設定するだけのかんたんなお仕事だと思ったんですが、うんともすんとも言いやがらねえんです。

解決までの道

ぐりぐりやっているうちに偶然(笑)解決したので、報告します。

スプシからWordに貼り付ける

スプシからWordにテキストを貼り付ける。

f:id:akashi_keirin:20210709091342p:plain

こうなる。セルの中に改行がある場合は、上述の通り、回答の先頭とケツに「"」が入る。

段落スタイルを当てる

この二つの段落に、自作の「My本文列挙1」スタイルを当てたところ。

f:id:akashi_keirin:20210709091345p:plain

自作の「My本文列挙1」の設定は次のとおり。

f:id:akashi_keirin:20210709091348p:plain

このスタイルを当ててあるので、当然この段落の書式は、次のとおり。

f:id:akashi_keirin:20210709091353p:plain

したがって、当然、二つの段落はバラバラになる。

VBAで段落書式の変更を試みる

リスト1
Private Sub test01()
  With Selection.ParagraphFormat
    .SpaceAfter = 0
  End With
End Sub

ParagraphFormatオブジェクトのSpaceAfterプロパティを「0」にするというだけのコードである。

このリスト1を、一つ目の段落にカーソルを置いて実行してみる。

f:id:akashi_keirin:20210709091357p:plain

このとおり、何も変わっていない。

段落書式を確認する。

f:id:akashi_keirin:20210709091400p:plain

なんてこった。何も変わっちゃいねえ。

異変起こる

では、と今度は先ほどのリスト1を次のように改めてみる。

スト2
Private Sub test01()
  With Selection.ParagraphFormat
    .LineUnitAfter = 0
  End With
End Sub

こいつを実行してみた。

f:id:akashi_keirin:20210709091403p:plain

しかし、ダメ。やっぱり、なーーーんも変わりゃあせん。

しかし、私は見逃さなかった!

f:id:akashi_keirin:20210709091407p:plain

段落書式の「段落後」の値が〝ポイント表記〟になっていることを!(偶然ですけどね。)

どうやら、LineUnitAfterプロパティを設定すると、なぜか表記がポイント単位に変わるらしい。

も、もしかして……。

そして、解決へ……

今度は、リスト2を次のようにした。

Private Sub test01()
  With Selection.ParagraphFormat
    .LineUnitAfter = 0
    .SpaceAfter = 0
  End With
End Sub

一旦「段落後」の値をポイント表記に変えておき、しかる後にSpaceAfterプロパティに「0」をセットしてみたのである!!!!!!!!

f:id:akashi_keirin:20210709091410p:plain

うおおおおおおおおお!

でけたあああああああ!

おわりに

WordのVBAは、実に多くの試練をわれわれユーザーに投げかけてくる。

WordVBA……。それは、まさに……、

男塾

である!