- 締切済み
ワード 表内の改行 置換 マクロ
ワードの表内に、0改行、となっているところの0だけ削除したいのですがワイルドカードで表内は検索されないようです。マクロでもいいので、やり方をお教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
こんにちは。 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 ' ' //
お礼
できました!!! すごく助かります。ありがとうございました。