- ベストアンサー
EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法
エクセルVBAのテキスト操作について質問なのですが、以下のようなテキストファイルがあったとしてKey1とKey2の間にデータを書き込みたいのですがどのようにすれば宜しいでしょうか。 宜しくお願い致します。 --- test.txt ここから --- aaaa bbbb Key1 cccc (ここにデータを書き込みたいです。) Key2 eeee --- test.txt ここまで ---
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
だいたいこんな感じ ------------------- 'ファイルの中から指定した文字列が出現後、指定した文字列の前に行を挿入する Dim fso, file Dim tempFile, outFile, readFile Dim strLine, Flag, fileName, key1, key2, addStr fileName = "test.txt" 'オリジナルファイル名 key1 = "Key1" 'キーの初め key2 = "Key2" '挿入場所キー addStr = "DDDD" '挿入データ Set fso = WScript.CreateObject("Scripting.FileSystemObject") tempFile = fso.GetTempName Set outFile = fso.OpenTextFile(tempFile, 2, true) '作業ファイルを作る Set readFile = fso.OpenTextFile(fileName, 1) Flag = false Do until readFile.AtEndOfStream strLine = readFile.ReadLine '一行読み出し if key1 = strLine then 'key1 があった Flag = true end if if Flag and key2 = strLine then 'key2 があった outFile.WriteLine(addStr) 'key2 の前に一行追加 end if outFile.WriteLine(strLine) loop readFile.Close outFile.Close '元ファイルを.bakにする Set file=fso.GetFile(fileName) file.Name = fileName & ".bak" '作業ファイルの名前を付け替える Set file=fso.GetFile(tempFile) file.Name = fileName
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>Key1とKey2の間にデータを書き込みたい 例示されたものでは、間に"cccc"がありますが? 正確には、Key1の後ろですか?それともkey2の前ですか? 1.キーが現れるまでデータを読み込んで、どこかに格納するかファイルに書き出す。 2.差し込むデータを格納場所に追加。 3.続けてデータを読み込んで格納する。 4.ファイルに書き込む。 差し込むデータはどこに置かれるのですか? 作業データを保持する場所はシート?配列?ファイル? これによってプログラムの難易度が変化しますよ。
お礼
ご回答ありがとうございます。 ご質問の件ですが、Key2の前になります。 マクロが実行される毎に作業データをKey1とKey2の間に蓄積していくような形を考えております。 また差し込むデータは作業変数(局所変数)で、保持する場所は配列です。 (テキストファイルに追記する際はJoinで結合しようと思ってますので最終的にはString型になります。)
お礼
ご回答ありがとうございます。 key1と2の両方がみつかったら作業データ→key2の順に書き込めばよかったんですね。 単純な追記に比べると難易度が若干高いですね。 有益な情報ありがとうございました。
補足
BLUEPIXYさんのコードを参考に以下のように作成し、期待通りの動作を確認できました。 ありがとうございました。 Const TXTPATH As String = "C:\test.txt" Sub test() Dim FileNum As Integer Dim LineTxt As String Dim Flag As Boolean: Flag = False Dim tBuff As String Dim strLine(1) As String strLine(0) = "test1" strLine(1) = "test2" FileNum = FreeFile Open TXTPATH For Input As #FileNum Do Until EOF(FileNum) Line Input #FileNum, LineTxt If LineTxt = "Key1" Then Flag = True If Flag And LineTxt = "Key2" Then tBuff = tBuff & Join(strLine, vbCrLf) & vbCrLf End If tBuff = tBuff & LineTxt & vbCrLf Loop Close #FileNum Open TXTPATH For Output As #FileNum Print #FileNum, tBuff; Close #FileNum End Sub