• 締切済み

ワード 表内の改行 置換 マクロ

ワードの表内に、0改行、となっているところの0だけ削除したいのですがワイルドカードで表内は検索されないようです。マクロでもいいので、やり方をお教えてください。

みんなの回答

回答No.1

こんにちは。 Wordは、それほど詳しくないのですが、 スマートなやり方は無さそうなので、 ベタに総当たりする対話型マクロを簡単に書いてみました。 ダイアログを2回表示するので、 "0"+改行 を 改行だけに換えたい場合は、  先のダイアログに、"0" を指定して[ok]  後のダイアログは、何も指定せず[ok]または[キャンセル] ab0↓ というセルがあれば。 ab↓ に、 100↓ 200↓ というセルがあれば。 10↓ 20↓ に、 置換するマクロです。 置換するのは、編集中のドキュメントすべてにあるテーブルだけです。 表の外に対しては何もしません。 書式に対しては何もしません(変わりません)。 因みに、 もし他の方法を探す場合の為の参考情報ですが、 セル内改行は、通常の ^13 セル終端は、^13^7 の2文字です。 Wordの置換機能では(ワイルドカードを使っても) 出来なさそう、と感じていますが、確信はありません。 ' ' // Sub ReplaceTablesCharJustBeforeCr() Dim t As Table, c As Cell Dim strFind As String, strReplace As String, sTmp As String Dim ary() As String   strFind = InputBox( _     "検索する(置換対象)文字列を入力" & vbLf & _     " テーブル内改行(または終端)の直前に見つかれば置換" & vbLf & _     " 半角/全角,小文字/大文字を区別します")   If strFind = "" Then Exit Sub   strReplace = InputBox("置換後の文字列を指定")   Application.ScreenUpdating = False   For Each t In ActiveDocument.Tables ' 編集中のドキュメント内にあるテーブルすべてを総当たり     For Each c In t.Range.Cells ' 各テーブル内のセルすべてを総当たり       With c.Range         sTmp = .Text ' セル内の文字列を取得         If InStr(sTmp, strFind & vbCr) Then ' 置換対象文字列+改行が、セル内に見つかれば、           sTmp = Replace(sTmp, strFind & vbCr, strReplace & vbCr) ' 置換           sTmp = Left$(sTmp, Len(sTmp) - 2) ' 終端にある^13^17の2文字をを除く           .Delete ' セル内の文字列を一旦消去           .InsertAfter sTmp ' 置換後の文字列をセルに挿入         End If       End With     Next   Next   Application.ScreenUpdating = True End Sub ' ' //

honeybeans
質問者

お礼

できました!!! すごく助かります。ありがとうございました。

関連するQ&A