秀丸マクロ, Word VBA, or the like -24ページ目

即席マクロ(5)- 続replaceallfast

即席マクロ(4)-replaceallfast』では、選択されている行(段落)を文章毎に改行するマクロを紹介しました。

今回は、編集中の文書全体を文章毎にバラすマクロです。

コードは、
replaceallfast "。", "。\n", regular;

です。

前回のマクロから、inselectのオプションを削除しただけです。

文書全体を処理するので、範囲選択されていなければマクロを終了させる
if (!selecting) endmacro;
も必要有りません。

因みに前回の記事で説明するのを忘れましたが、\nというのは改行を表す正規表現です。

Wordでは、^pとか、^13(ワイルドカード)に該当します。

ただ、このコードだけでは、段落末尾の『。』+改行に、
余分な改行が追加されて、
『。』+改行+改行となってしまいます。

つまりこんな感じです。
文章・・・・・。
文章・・・・・。

文章・・・・・。
文章・・・・・。

文章・・・・・。
文章・・・・・。


この余分な改行を以下のコードで削除します。
replaceallfast "\n\n", "\n", regular;


最初のコードと合わせるとこうなります。
replaceallfast "。", "。\n", regular;
replaceallfast "\n\n", "\n", regular;


これで、全ての段落を文章毎にバラすことが出来ます。

但し、これでは段落と段落との区切りがわからなくなります。

元に戻せなくなってしまいます。

なので、もう一手間加えます。
replaceallfast "\n", "@@改行@@", regular;
replaceallfast "。", "。\n", regular;
replaceallfast "\n\n", "\n", regular;


つまり元々の段落の区切り(改行)に、改行を表す文字列"@@改行@@"を挿入してやります。

これを実行した結果はこうなります。
文章・・・・・。
文章・・・・・。
@@改行@@
文章・・・・・。
文章・・・・・。
@@改行@@
文章・・・・・。
文章・・・・・。
@@改行@@


段落を復元する時は、一度全ての改行を削除して、この"@@改行@@"で改行すればいいのです。

"@@改行@@"は、飽くまで例えであって、他の文字列でも構いません。

但し、この"@@改行@@"、又は、これに該当する文字列を改行に置き換えるので、不必要な場所が改行されないように、改行以外のところとかぶらない文字列にする必要があります。



段落を復元するときのコードは以下のとおりです。
replaceallfast "\n", "", regular; //改行を全て削除。
replaceallfast "@@改行@@", "\n", regular; //"@@改行@@"→改行に置換。


なお、日英翻訳の場合、段落を復元する時には、英文に訳されているはずです。

上のコードでは、文章と文章との間のスペースが取れてしまう可能性があるので、
こんな感じにしてもいいと思います。
replaceallfast "\n", " ", regular; //改行→半角スペース一個。
replaceallfast "@@改行@@", "\n", regular; //"@@改行@@"→改行に置換。
replaceallfast " +", " ", regular;//半角スペースの繰り返し→半角スペース1個。


3行目の、" +"の『+』は、直前の文字を1回以上繰り返すという意味の正規表現です。

つまり、このコードは、半角スペース(直前の文字)が繰り返されている箇所を半角スペース1個に置き換えるコードです。

1回以上なので、半角スペース1個の場合も置換の対象になってしまいますが、
その場合、半角スペース1個が半角スペース1個に置き換えられるだけなので結果としては変わりません。


マクロの作成手順は、『マクロを作ってみよう』の(1)~(5)を参照ください。
マクロの登録は、『マクロの登録方法』を参照ください。
ショートカットキーの割り当ては、『ショートカットキーを割り当てる』を参照ください。