- ベストアンサー
Excel VBAでWord文書とText文書の中身の一括置換
いつも勉強させていただいております。 質問させていただきます。どうぞよろしくお願いいたします。 ため込んだ(結構量ありますorz)ファイル(*.doc、*.txt)の中身の、 ある文字をすべて別の文字にVBAで検索→置換したく、今日ずっと 調べておりました。*.xlsについてはやり方が見つかったのですべて うまく置換できたのですが、Word文書とText文書についてのやり方が 分かりませんでした。 多分Filesystemobject(?)を使うのだと思うのですが、 もし参考になりそうなページやコード等ございましたら、 ぜひお教えいただけませんでしょうか。 もしお詳しい方がいらっしゃいましたら、どうぞよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
テキストファイルを正規表現を用いて置換するコード例を挙げておきます。 Replace関数による方法(簡単)もありますが、私の勉強のためもあって、やってみました。 (1)エキストファイルの読み書きのコード (2)正規表現置換関係のコード (2)はhttp://codezine.jp/article/detail/1655?p=1を参考にした。(1)と組み合わせての処理だが、(2)でははっきりしない点があって、それを試行錯誤で何とか下記になった。 下記では具体的文字列→具体的文字列で単純だが、正規表現の機能を 生かすと、VBAの関数などでは出来ないことが出来る。大文字を小文字にするとか。 ーーー Sub test01() Dim re As RegExp Dim mc As MatchCollection Dim m As Match Dim i As Integer MsgBox CurDir 'f = """" & CurDir & "\ccc.txt" & """" 'MsgBox f Open "IEno.txt" For Input As #1 Open "IEnoB.txt" For Output As #2 While Not EOF(1) Line Input #1, x '--- Set re = New RegExp re.Pattern = "検索" 'アルファベット(大文字)の連続を表す正規表現 re.Global = True '複数マッチを有効にする Set mc = re.Execute(x) If mc.Count <> 0 Then 'MsgBox "x=" & x 'MsgBox "mc.Count = " & mc.Count For i = 0 To mc.Count - 1 re.Global = True Set m = mc.Item(i) 'MsgBox "FirstIndex = " & m.FirstIndex & " Length = " _ & m.Length & " Value = " & m.Value y = re.Replace(x, "置換") 'MsgBox "y=" & y Print #2, y Next i End If Wend Close #1 Close #2 End Sub ー テストは、「検索」という言葉を数箇所含んだ、複数行の文章のテキストファイルを作る。名前は、上記のままで動くよう、IEno.txtにする。 実行してIEnoB.txtをメモ帳で開くと、「検索」という語ー>置換に置換された文章が見える。なおテキストファイルは変更したものは、別ファイルに作らなければならないことを覚えておくこと。 ーー テキストファイルを読んでxという変数で文章を捉えて Sub test02() a = "Happy Day" b = "Day" C = "BirthDay" x = Replace(a, b, C) MsgBox x End Sub のような関数の追加たでやる方法もある。 上の例では y=Replace(x,"検索","置換") でyを書き出せば、コードは簡単だが、今後応用のきく、正規表現の方を上記に挙げた。 ーー ワードは>「Excel VBA」でではなく、ワードVBAで、置換操作のマクロの記録をとって、あれこれ修正箇所を考えるのが良いと思う。 ワードVBAは情報が少ないが。 ーーー こんなの質問者にとって背伸びしすぎではないか。丸投げにしないと出来ないのではないか。テキストエディタは多種あって、置換機能の付いているものは多い。メモ帳にもある。 ワードやテキストエディタでの置換で辛抱すべきではないか。
その他の回答 (1)
- xls88
- ベストアンサー率56% (669/1189)
試しにコードを考えてみました。 Wordの場合です。 Sub test1() Dim mywd As Object Dim mydoc As Object Set mywd = CreateObject("Word.Application") mywd.Visible = True mywd.Documents.Open ("D:\test.doc") mywd.Application.Activate With mywd.Application.Selection.Find .Text = "あ" .Replacement.Text = "A" End With mywd.Application.Selection.Find.Execute Replace:=wdReplaceAll mywd.Windows("test.doc").Close True mywd.Quit Set mywd = Nothing End Sub
お礼
ありがとうございます!! 早速今から試します! まずお礼だけになってしまいますが、後で ご報告だけでもさせていただきます。m(_ _)m
補足
xls88様 Docファイルすべて置換できました!どうもありがとうございます! SaveじゃなくてCloseなんですねー。。。Saveが出てこないわけですorz xls88様のようにコードを自分で考えて作れる方って、 数多くあるメソッドやプロパティは覚えてらっしゃるんでしょうか??? それともネットとかである程度検索方法を決めてらっしゃるんでしょうか? 自分は必死にSaveで検索かけておりました。。。 このたびはどうもありがとうございました!
お礼
imogasi様 さっきテキストファイルの全置換が終わりました! なんとReplace()が使えるんですね~!^^ .NETでもテキストのreplaceで検索かけたら、StreamReaderと StreamWriterっちゅーのが出てきたので、自分でアプリ作成できました!! アドバイスいただけたおかげでございますm(_ _)m てっきりExcelやWord同様、CreateObject使って特別なやり方があるものだと 思いこんでおりましたので、まさか全部読み込んで書き換えたものを 吐き出せるとは。。。。 正規表現のほうのコード理解は今からですorz 上側のコードで(VBAと.NET両方使って)置換作業を完了できたので、 今から集中して後半のコード理解をさせていただきます! 勉強になりました。本当にどうもありがとうございました!!!!!
補足
どうもありがとうございます!なんと正規表現まで。 今VBAでやってみると一瞬で動きました! VB.NETだと大分コードが違うようですねー。。。 今からテキストの書き換・確認作業と並行して、 勉強させていただきます!まずはお礼だけになってしまいますが、 後ほどご報告させていただきますm(_ _)m