
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も見ています
-
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
テキストファイルの行頭に文字列挿入したい
Visual Basic(VBA)
-
-
4
ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存
Visual Basic(VBA)
-
5
VBAでメモ帳にコピペをしたいのですが…
PowerPoint(パワーポイント)
-
6
特定文字のある行の前に空白行を挿入したい
その他(Microsoft Office)
-
7
[エクセル VBA]テキストファイルから特定の行のみを抜き出したい 下記のようなテキストファイルから
Excel(エクセル)
-
8
Vba初心者です。下記のコード助けてください Loopに対するDoがありませんと表示されます Sub
オープンソース
-
9
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
テキストファイルの特定行、特定列に文字を挿入
Windows Me・NT・2000
-
12
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
13
何時間 何分 何秒を記号で表すには?
その他(暮らし・生活・行事)
-
14
VBSで、テキストファイルに対して、全体の途中に文字列を追加したい
その他(プログラミング・Web制作)
-
15
Filter関数を用いた結果、何も検索されなかった場合
Visual Basic(VBA)
-
16
セルにカーソルを合わせると文字を表示させるVBA
Excel(エクセル)
-
17
バッチファイルで文字列削除について
その他(プログラミング・Web制作)
-
18
Windowsのバッチファイルを利用しtxtファイルの指定のした位置に文字を追加する方法
その他(プログラミング・Web制作)
-
19
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
20
テキストファイルを直接置換する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
入力ファイルをバイナリにする利点
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
【python】Excelファイルを読み...
-
エラー:ストリームの終わりを...
-
削除したファイルの復旧、およ...
-
【Teraterm】filewritelnについて
-
バイナリーデータの一部データ...
-
C言語の質問です。バイナリ形...
-
画像の保存方法。
-
ゲームのパラメータの読み込み...
-
FTPを使わないファイルアップロ...
-
ROM書き込みデータのファイル形...
-
エクセルVBA 2千万行のCSVファ...
-
DXFファイル用クラスライブラリ...
-
ページ読み込み時に自動的にsub...
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
VBA バイナリ―から文字列にす...
-
エラー:ストリームの終わりを...
-
ページ読み込み時に自動的にsub...
-
EOF
-
エクセルVBA 2千万行のCSVファ...
-
入力ファイルをバイナリにする利点
-
【Teraterm】filewritelnについて
-
【python】Excelファイルを読み...
-
EXCEL VBAで、バイナリデータの...
-
FTPでエクセルをPUTするとファ...
-
テキストデータをSQLServerに取...
-
C言語とシリアル通信の送受信...
-
ビットマップファイル生成(C言...
-
pcxファイルを開きたい(RGBデ...
-
FTPを使わないファイルアップロ...
-
MacからWinにファイルを添付す...
-
HDDのバイナリイメージの取得方...
おすすめ情報