Word for Mac の text wrapping break

## 概要

年度末にあたり、普段は縁がない Microsoft Word for Mac で報告書や業務マニュアルを作ってみて、いろいろと苦労しました。

その一環として text wrapping break について深堀りしてしまったので、その正体と付き合いかたについて説明したいと思います。

## Text wrapping break

Microsoft Word の text wrapping break というものをご存知でしょうか。これは表や図に対するテキストの回り込みを終わらせて、新しい行を始めたいときに使う改行のことです。 CSS の `clear: both;` と同じ目的で使うもの、というとわかりやすいかもしれません。

表を使ったレイアウトに頼らないまともな業務マニュアルを作ろうとすると、スクリーンショット画像とその説明文の組を量産するために text wrapping break を使うことはよくあるのではと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61759/d8114a93-7632-5212-3117-ce7599061b97.png)

しかしながらこの text wrapping break は Word for Windows では普通にドキュメントに挿入できるのですが、 Word for Mac ではなぜか挿入する方法がありません。

Word for Windows (「文字列の折り返し」で挿入されるのが text wrapping break):
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61759/00388d6b-42ea-c1d2-8d96-d23e5d10a38b.png)

Word for Mac (「文字列の折り返し」がない):
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61759/8a4dc11b-db7f-98f8-c8f9-a66570a4c693.png)

それでは Mac では text wrapping break は全く使えないのかというとそうではなく、 Windows で作った text wrapping break を含む Word ドキュメントを Mac で開くと普通に機能しますし、それを別の場所にコピペすることもできます。

Text wrapping break を使ったサンプル [text-wrapping-breaks.docx](https://1drv.ms/w/s!ArStVFUJcWgSixmRmsmJ86ML56NV?e=rQdiM9) を用意したのでダウンロードして確認してみてください。

## OOXML の text wrapping break

Text wrapping break は [Open Office XML の仕様](http://officeopenxml.com/WPtextSpecialContent-break.php) によると `<w:br w:clear="all"/>` で表される改行のことのようです。

text-wrapping-breaks.docx を unzip して grep してみれば、これが文中で使われていることが実際に確認できます。

```console
$ unzip text-wrapping-breaks.docx -d out
Archive:  text-wrapping-breaks.docx
  inflating: out/[Content_Types].xml  
  inflating: out/_rels/.rels         
  inflating: out/word/_rels/document.xml.rels  
  inflating: out/word/document.xml   
 extracting: out/word/media/image6.svg  
 extracting: out/word/media/image1.png  
 extracting: out/word/media/image2.svg  
 extracting: out/word/media/image3.png  
  inflating: out/word/theme/theme1.xml  
 extracting: out/word/media/image5.png  
 extracting: out/word/media/image4.svg  
  inflating: out/word/settings.xml   
  inflating: out/word/fontTable.xml  
  inflating: out/docProps/core.xml   
  inflating: out/docProps/app.xml    
  inflating: out/word/styles.xml     
  inflating: out/word/numbering.xml  
  inflating: out/word/webSettings.xml  

$ xmllint --format out/word/document.xml | grep -B6 'clear="all"'
        <w:t>たとえば、一致する表紙、ヘッダー、サイドバーを追加できます。</w:t>
      </w:r>
      <w:r w:rsidR="00FC2804">
        <w:rPr>
          <w:rFonts w:ascii="游明朝" w:eastAsia="游明朝" w:hAnsi="游明朝"/>
        </w:rPr>
        <w:br w:type="textWrapping" w:clear="all"/>
--
        <w:t>テーマとスタイルを使って、文書全体の統一感を出すこともできます。</w:t>
      </w:r>
      <w:r>
        <w:rPr>
          <w:rFonts w:ascii="游明朝" w:eastAsia="游明朝" w:hAnsi="游明朝"/>
        </w:rPr>
        <w:br w:type="textWrapping" w:clear="all"/>
```

なお text-wrapping-breaks.docx を Google Docs や LibreOffice に持っていってみたところ、いずれも正しくレンダリングされませんでした。実はあまり使われていない機能なのかもしれません。

## マクロで text wrapping break を挿入する

Text wrapping break の正体がわかったところで、ではなぜ Word for Mac ではこれが挿入できないんだろうと [Microsoft のフォーラム](https://answers.microsoft.com/en-us/msoffice/forum/all/text-wrapping-breaks-on-mac/d662c8e2-43de-463e-bcb2-3ea2b40e108c)で尋ねてみました。

結果としてその理由はわかりませんでしたが、代替手段として Word の VBA マクロを使って text wrapping break を挿入する方法を教えてもらいました。

```vb
Sub InsertTextWrappingBreak()
    Dim oRange As Range
    
    Set oRange = Selection.Range
    With oRange
        .Collapse Direction:=wdCollapseStart
        .InsertBreak Type:=wdTextWrappingBreak
    End With
End Sub
```

このマクロを登録するには Word のメニューより「ツール」→「マクロ」→「マクロ…」を選択します。マクロのダイアログが出ますので「マクロ名」に `InsertTextWrappingBreak` と入力して「＋」ボタンを押してください。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61759/a6c7d332-1de4-89c4-6d2a-4f7b3dcb7dda.png" width="50%"/>

すると Visual Basic Editor が開きます。サブルーチン `InsertTextWrappingBreak` のテンプレートがすでに入力されていますので、上記の Visual Basic コードで置き換えて、保存ボタン :floppy_disk: を押して保存してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61759/a3061da3-6232-53fa-fbd6-ae2d63c9d741.png)

再度マクロのダイアログを開くと `InsertTextWrappingBreak` が見えますので、これを選択して「実行」ボタンを押すと、ドキュメントのカーソル位置に text wrapping break を挿入することができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61759/b90d90c2-4b29-1d50-5348-3504378ff4bb.png" width="50%"/>

さらに、このマクロ実行をツールバーに登録することで text wrapping berak を挿入するボタンを作ることができます。Word メニューの「環境設定…」 → 「リボンとツールバー」 → 「クイックアクセスツールバー」を開き、左側の「コマンドの選択」で「マクロ」を選んで、さきほど登録した VBA マクロの名前を選択して左側から右側にコピーしてください。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61759/f5f47ab5-5ad1-0ba7-dc26-06e31acfe514.png" width="50%"/>

するとクイックツールバーに謎の ○ アイコンが出現します。これをクリックするとカーソルの位置に text wrapping break を挿入することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61759/f8e1010f-01b8-189d-8033-090af17f6e46.png)

個人環境のカスタマイズとしては、これで十分なのではないかと思います。

## まとめ

今回 Word で大量のスクリーンショット画像を含む業務マニュアルを作ってみましたが、スタイルや改ページを納得いくまで調整するのに思った以上に時間をとられてしまい、非常に疲れました。しかしながら VBA マクロによる機能拡張や Visual Basic Editor のような開発環境を知ることができたのはよい経験でした。

やはり Qiita や Discourse のような Markdown で、細かいレイアウトを気にせず気楽に書けるのがいちばんよいと思ったので、次回はそのようなドキュメント制作環境を整備して作ってみたいと思います。