エクセルVBAに関する質問です。


Dドライブ内の「XX」というフォルダの中に複数のテキストファイルがあるとします。その全てのファイルの中に記載されている「★★」をエクセルのセルK2に入っている文字列に置換するというマクロを作ってください。ただし文字コードはUTF-8でお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/10/30 04:24:26
  • 終了:2006/10/30 22:16:40

回答(1件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数752006/10/30 07:48:58

ポイント100pt

XXフォルダにテキストファイルしか入っていなければ以下のマクロで問題ないと思います。

使いたいK2セルがあるシートを開いた状態でマクロを実行してください。

Option Explicit
Const strPath = "D:\XX"
Sub replaceAllStars()
    Dim objFs As Object, objFld As Object, objFl As Object, Stream As Object, Stream2 As Object, buf As String
    Set objFs = CreateObject("Scripting.FileSystemObject")
    Set objFld = objFs.GetFolder(strPath)
    For Each objFl In objFld.Files
        Set Stream = CreateObject("ADODB.Stream")
        Set Stream2 = CreateObject("ADODB.Stream")
            
        Stream.Open
        Stream.Type = 2
        Stream.Charset = "utf-8"
        Stream.LoadFromFile objFl.Path
        buf = Stream.readText()
        buf = Replace(buf, "★★", Range("K2").Value)
        Stream.SaveToFile objFl.Path + ".bkup", 2
            
        Stream2.Open
        Stream2.Type = 2
        Stream2.Charset = "utf-8"
        Stream2.WriteText (buf)
        Stream2.SaveToFile objFl.Path, 2
            
        Stream.Close
        Stream2.Close
    Next
End Sub

テキストファイルかどうかを判定する方法としてFileオブジェクトのTypeを(objFl.Type)を調べることも出来るのですが、拡張子から単純に判別するため、拡張子が.txtでないものは"テキスト文書"として扱われません。

そのため、今回はファイルタイプの判定処理は組み込んでおりません。

参考になれば幸いです。

[参考URL]

id:taroemon

ご回答ありがとうございます。

完璧にできました。

2006/10/30 22:16:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません