No.1ベストアンサー
- 回答日時:
だいたいこんな感じ
-------------------
'ファイルの中から指定した文字列が出現後、指定した文字列の前に行を挿入する
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
この回答への補足
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
ご回答ありがとうございます。
key1と2の両方がみつかったら作業データ→key2の順に書き込めばよかったんですね。
単純な追記に比べると難易度が若干高いですね。
有益な情報ありがとうございました。
No.2
- 回答日時:
>Key1とKey2の間にデータを書き込みたい
例示されたものでは、間に"cccc"がありますが?
正確には、Key1の後ろですか?それともkey2の前ですか?
1.キーが現れるまでデータを読み込んで、どこかに格納するかファイルに書き出す。
2.差し込むデータを格納場所に追加。
3.続けてデータを読み込んで格納する。
4.ファイルに書き込む。
差し込むデータはどこに置かれるのですか?
作業データを保持する場所はシート?配列?ファイル?
これによってプログラムの難易度が変化しますよ。
ご回答ありがとうございます。
ご質問の件ですが、Key2の前になります。
マクロが実行される毎に作業データをKey1とKey2の間に蓄積していくような形を考えております。
また差し込むデータは作業変数(局所変数)で、保持する場所は配列です。
(テキストファイルに追記する際はJoinで結合しようと思ってますので最終的にはString型になります。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) エクセルVBA オートフィルタでの絞り込みと並び替えについて 1 2023/07/08 13:08
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) VBA で エクスプロー操作 1 2023/05/31 16:13
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
テキストファイルの行頭に文字列挿入したい
Visual Basic(VBA)
-
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
-
4
テキストファイルの特定行の削除方法
Visual Basic(VBA)
-
5
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
6
【VBA】テキストファイルから特定の文字列を抽出して、エクセルに出力する
Excel(エクセル)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
9
VBAでメモ帳にコピペをしたいのですが…
PowerPoint(パワーポイント)
-
10
EXCEL(VBA) 末尾の改行のみ削除したい
Excel(エクセル)
-
11
テキストファイルから特定の文字列が入った行を取得したいです。 例えば下記のような文が記載されたテキス
Visual Basic(VBA)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
テキストファイルからデータを削除したい。
Visual Basic(VBA)
-
14
Excel.VBA テキストファイルを指定行数からの読み込む
Excel(エクセル)
-
15
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
16
Windowsのバッチファイルを利用しtxtファイルの指定のした位置に文字を追加する方法
その他(プログラミング・Web制作)
-
17
VB6側からテキストファイルをクリアにする方法
Visual Basic(VBA)
-
18
VBAでCSVの1行目だけを書き換える方法
Excel(エクセル)
-
19
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
20
テキストファイルの途中行から読み込む方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
エラー:ストリームの終わりを...
-
EXCEL VBAでテキストファイルの...
-
ページ読み込み時に自動的にsub...
-
VBA バイナリ―から文字列にす...
-
機器とRS232Cクロスケーブルで...
-
C++ Builderにおける画像データ...
-
c言語についての質問です
-
入力ファイルをバイナリにする利点
-
24ビットのWaveデータの中身に...
-
FTPでエクセルをPUTするとファ...
-
Microsoft VBAで2GBを超えるフ...
-
エクセルVBA 2千万行のCSVファ...
-
PHPのfgetcsvの処理容量について
-
= (イコール)で始まるセルの値...
-
EOF
-
バイナリエディタのつかいかた
-
C言語で、ファイルを読み込んで...
-
ダンプツール作成… 行き詰まり...
-
VBでCSVファイルを読み込む方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
バイナリエディタのつかいかた
-
ページ読み込み時に自動的にsub...
-
VBA バイナリ―から文字列にす...
-
エクセルVBA 2千万行のCSVファ...
-
エラー:ストリームの終わりを...
-
EOF
-
【python】Excelファイルを読み...
-
EXCEL VBAで、バイナリデータの...
-
入力ファイルをバイナリにする利点
-
DXFファイル用クラスライブラリ...
-
バイナリーデータの一部データ...
-
C言語とシリアル通信の送受信...
-
C言語の質問です。バイナリ形...
-
Javaでのエンディアン変換
-
24ビットのWaveデータの中身に...
-
bitmap画像の保存がうまくいき...
-
PHPのfgetcsvの処理容量について
おすすめ情報