複数のWord文書に対して文字列リストを元に連続して置換するマクロ

以前、Wordに関する次の二つのマクロを紹介しました。
Wordで文字列リストを元に連続して置換するマクロ
複数のWord文書に対して文字列置換
今般、「これらを組み合わせたい」という要望をいただきましたので、試してみました。 (さらに…)

Wordでワイルドカード検索の結果を使って置換するサンプル

Wordのワイルドカードを使うと検索した結果を使って少し複雑な置換をすることができます。
例えば「福沢 諭吉」を「諭吉 福沢」のように姓名を逆にしたりすることもできます。

「検索する文字列」で特定の箇所を半角括弧で挟むと、その箇所を「置換後の文字列」として指定することができます。
「特殊文字」として「検索する文字列式(X)\n」を使います。

次は「03(1234)5678」と表記した電話番号を「03-1234-5678」に置換するサンプルです。
なお「ワイルドカードを使用する」にチェックしておきます(他のチェックは外す)。
Word2013で確認しました。 (さらに…)

オンラインで文字列を連続して置換する「リストを元に一括置換」

以前、「Wordでリストを元に連続して置換するマクロ」という記事を書きましたが、同じようなことをオンラインで処理する仕組みを考えました。 (さらに…)

VBAで長い文字列に置換する方法

VBA(Word)で文字列の置換を行う場合、置換後の文字列が長すぎるとエラーになります。

実行時エラー5854
文字列型パラメータが長すぎます。

これを回避する方法を考えました。
次に挙げる二つの関数が必要です。「長い文字列の置換」がメインです。
使う場合は「call 長い文字列の置換(mae, ato)」のようにして使います。

全てを置換

ページ全体に対して置換を行うマクロです。これ自体は長い文字列に対応していません。

Function 全てを置換(mae, ato)
    'ページ全体に対して置換
    Dim myRange
    Set myRange = ActiveDocument.Range(Start:=0, End:=0)
    With myRange.Find
        .ClearFormatting
        .Text = mae
        With .Replacement
            .ClearFormatting
            .Text = ato
        End With
        .Execute Replace:=wdReplaceAll
    End With
End Function

長い文字列の置換

メインとなる部分です。
置換後の文字列が255文字を超えるとエラーになります。
まず置換後の文字列を250文字ずつ分割すると何個になるかを計算します。
もし700文字だとすると3個になります。
そこで、置換後の文字列を「{{1}}{{2}}{{3}}」として、とりあえず置換します。これが255文字を超えることはないでしょう。
次に置換後の文字列から250文字ずつ分割して「{{1}}」「{{2}}」「{{3}}」と置換します。それぞれは255文字を超えないのでエラーが出ません。

Function 長い文字列の置換(mae, ato)
    '置換後の文字列が255文字超に対応
    Const partLen = 250
    Const markLeft = "{{"
    Const markRight = "}}"
    Dim atoLen As Long, kaisu As Long, i As Long
    Dim markAll, part As String
    atoLen = Len(ato)
    kaisu = Int(atoLen / partLen + 1)
    markAll = ""
    For i = 1 To kaisu
        markAll = markAll & markLeft & i & markRight
    Next i
    Call 全てを置換(mae, markAll)
    For i = 1 To kaisu
        markAll = markLeft & i & markRight
        part = Mid(ato, partLen * (i - 1) + 1, partLen)
        Call 全てを置換(markAll, part)
    Next i
End Function

編集中の文書に変更を施しますので、マクロは文書を保存してから実行してください。ご利用は自己責任でお願いします。

サクラエディタの置換オプション

サクラエディタのマクロでは次のようにすると文字列の置換ができます。

S_ReplaceAll(検索文字列, 置換文字列, 置換オプション);

分かりにくいのが置換オプションです。 (さらに…)

Wordマクロでワイルドカードを使うときの注意

Wordのマクロでワイルドカードを使って検索、置換をしようとしたところエラーが出ました。 (さらに…)

Excelで文字列リストを元に連続して置換するマクロ

以前、Wordで文字列リストを元に連続して置換するマクロについて書いたのですが、今度はExcel版です。

まず「文字列リスト」というシートと「作業」というシートを作成します。 (さらに…)

Wordで文字列リストを元に連続して置換するマクロ

Wordで文書を編集しているときに、用語を統一したいときがあります。
例えば「エディター」を「エディタ」に揃えるような場合です。
置換機能を使えば簡単なのですが、対象となる用語が大量にある場合にはちょっと面倒です。

そこで変換用のリストを作っておき、それを元に連続して文字列を置換するマクロを作ってみました。 (さらに…)

Excelで正規表現による置換

Excelで正規表現を使った置換を行うためのユーザー定義関数を作ってみました。
引数の順番は言語によって異なりますが、Excel風にしました。
裏でVBScriptを使っていますので、正規表現はそれに準拠します。
ここでは正規表現そのものについては説明を省きます。 (さらに…)

VBAやJavaScriptなどの置換関数の引数の違い

VBAやJavaScriptなどには文字列を置換するための関数があります。
「これはペンです」の「ペン」を「鉛筆」に置換して「これは鉛筆です」に変換するようなケースで使います。

言語によって微妙に書き方が異なるので注意を要します。
私がよく使う、Excel、VBA、JavaScript、PHP、MySQLについて、比較してみました。

言語 関数
Excel SUBSTITUTE(文字列,置換前,置換後)
VBA Replace(文字列,置換前,置換後)
JavaScript 文字列.replace(置換前,置換後)※正規表現が使える。
PHP str_replace(置換前,置換後,文字列)または
preg_replace(置換前,置換後,文字列)※正規表現が使える。
MySQL REPLACE(文字列,置換前,置換後)

言葉の意味は次の通りです。
文字列「これはペンです」置換前「ペン」置換後「鉛筆」に置換

古い記事

タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報