こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法

エクセルVBAのテキスト操作について質問なのですが、以下のようなテキストファイルがあったとしてKey1とKey2の間にデータを書き込みたいのですがどのようにすれば宜しいでしょうか。
宜しくお願い致します。

--- test.txt ここから ---
aaaa
bbbb
Key1
cccc
(ここにデータを書き込みたいです。)
Key2
eeee
--- test.txt ここまで ---

投稿日時 - 2005-08-06 11:19:26

QNo.1562959

暇なときに回答ください

質問者が選んだベストアンサー

だいたいこんな感じ
-------------------
'ファイルの中から指定した文字列が出現後、指定した文字列の前に行を挿入する
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

投稿日時 - 2005-08-06 11:50:11

補足

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

投稿日時 - 2005-08-06 13:54:37

お礼

ご回答ありがとうございます。
key1と2の両方がみつかったら作業データ→key2の順に書き込めばよかったんですね。
単純な追記に比べると難易度が若干高いですね。
有益な情報ありがとうございました。

投稿日時 - 2005-08-06 12:56:44

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>Key1とKey2の間にデータを書き込みたい

例示されたものでは、間に"cccc"がありますが?
正確には、Key1の後ろですか?それともkey2の前ですか?

1.キーが現れるまでデータを読み込んで、どこかに格納するかファイルに書き出す。
2.差し込むデータを格納場所に追加。
3.続けてデータを読み込んで格納する。
4.ファイルに書き込む。

差し込むデータはどこに置かれるのですか?
作業データを保持する場所はシート?配列?ファイル?
これによってプログラムの難易度が変化しますよ。

投稿日時 - 2005-08-06 11:51:54

お礼

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

ご質問の件ですが、Key2の前になります。
マクロが実行される毎に作業データをKey1とKey2の間に蓄積していくような形を考えております。

また差し込むデータは作業変数(局所変数)で、保持する場所は配列です。
(テキストファイルに追記する際はJoinで結合しようと思ってますので最終的にはString型になります。)

投稿日時 - 2005-08-06 12:46:28

あなたにオススメの質問