Wordの高度な活用法 VBAで全角スペースの前だけに改行を入れる


Wordの置換

秋田大学 大学院医学系研究科・医学部 感染症 ウィルスについて
http://www.med.akita-u.ac.jp/~doubutu/kansensho/virus17/virus.html
コロナウィルスの構造の古い記事を見つけたところ、少し表示がおかしいので、Wordにテキストを貼り付けてみると、コロナの項目が特に全角のスペースの前で改行するべきところがしていないと考えられた。
そこで、Wordで改行を挿入して整理してみるサンプルとして利用させていただき、なおかつコロナウィルスの基本的な知見を得るために読み込みこととした。

(5)構造と性状によるウイルスの分類

この部分の行頭にカーソルを置く。

全角スペースの検索条件は?

ところで、全角のスペースだけ検索するにはどうすればいいのだろうか。
Word 2013で不要なスペース(空白)を一括削除したい - 世の中は不思議なことだらけ
https://snow-white.cocolog-nifty.com/first/2014/09/word-2013-df5d.html

半角だけの場合は「検索オプション」で、「あいまい検索」のチェックを外した後、「半角と全角を区別する」にチェックを付けて、「検索する文字列」に、Space キー や Shift + Space キー押して、置換してみてください。

つまり全角スペースだけ、または半角スペースだけを表す^wに類似した記号はないのである。

全角の前に改行を入れるには

置換を使う。
検索する文字列は全角スペース
置換後の文字れは、改行は^13を使い、全角スペースを続ける。
"^13□"
これが置換後の文字列になる。

※□は全角のスペースが見づらいので記号を使っていますが、実際は全角のスペースです


画像で見ると見えないですが。

Sub InsertReturnBefore2ByteSpace()
' For Word VBA
' 機能:改行を失ったらしいHTMLドキュメントからテキスト形式でコピーし、全角の前に改行を挿入する
' 補足:特に全角を使用する日本語のような言語で有効。コードは全角のスペースがわかりづらいので記号□で代用している
' 範囲:途中から文末まで
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
  .Text = "□" ' 見づらいため□に変えていますが、実際のコードでは□を全角のスペースに置き換えてください。この下も同様
  .Replacement.Text = "^13□" '置換後の文字列
  .Forward = True '検索を連続して進める。
  .Wrap = wdFindStop ' ここはマクロの記録をwdFindからwdStopに書き換える。そうすると途中から検索しても文末で止まる
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = True '全角と半角を区別する
  .CorrectHangulEndings = False
  .HanjaPhoneticHangul = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Exit Sub
End Sub

意外なことに全角スペースは

Rubyもそのまま
https://qiita.com/QUANON/items/76c1171d7e8a2bd568d4
ちなみに全角スペースにもマッチは\sと似ていますね。
MiFESもそのまま
https://www.megasoft.co.jp/mifes/seiki/meta.html
RegExpでも\u3000しかない
http://www.tohoho-web.com/js/regexp.htm

というか、全角スペースは日本語(と東アジア言語?くらいで)特別に分ける必要性が英語ではないからなんでしょうねえ。
ちなみに英語は Full-Width Spaceといいます。
Mtachbyteは2byte(s)必要だったため、(1)byteの文字にマッチ(適合)という意味になります。現在ではユニコードだとマルチバイトなのでこの区別の意味が分かりづらくなっているかも。
やはり海外勢には評判が悪い。全角(2バイト)って立場ないですね。
http://kaigainohannoublog.blog55.fc2.com/blog-entry-3064.html
https://specaid.net/tips/9-tips-for-tech-specs.html
こうした場合に全角スペースを探す場合も今回の方法が使えます。

本題に戻ると

元の原稿は今度はいろいろなところに半角スペースが入っています。
これは上記サイトと同じ方法で削除できます。
このように単純にHTMLから印刷するだけでは非常に読みづらい場合などはHTMLからの保存、スクショを取る一方で、Wordにテキストを貼り付け、整理するほうが読みやすいし、用紙を節約できます。また、一度成功した方法をVBAとして保存しておくと、次も使うことができます。