• ベストアンサー

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

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

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答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

ak9457
質問者

お礼

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

ak9457
質問者

補足

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

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>Key1とKey2の間にデータを書き込みたい 例示されたものでは、間に"cccc"がありますが? 正確には、Key1の後ろですか?それともkey2の前ですか? 1.キーが現れるまでデータを読み込んで、どこかに格納するかファイルに書き出す。 2.差し込むデータを格納場所に追加。 3.続けてデータを読み込んで格納する。 4.ファイルに書き込む。 差し込むデータはどこに置かれるのですか? 作業データを保持する場所はシート?配列?ファイル? これによってプログラムの難易度が変化しますよ。

ak9457
質問者

お礼

ご回答ありがとうございます。 ご質問の件ですが、Key2の前になります。 マクロが実行される毎に作業データをKey1とKey2の間に蓄積していくような形を考えております。 また差し込むデータは作業変数(局所変数)で、保持する場所は配列です。 (テキストファイルに追記する際はJoinで結合しようと思ってますので最終的にはString型になります。)

関連するQ&A

  • DTSパッケージでテキストファイルのインポート

    SQLServer2000で、DTSパッケージを使ってテキストファイルをインポートしているのですが、インポート先テーブルに主キーを設定していないためか、インポートするたびにレコードの順番が変わってしまいます。 例) テキストファイル fld1|fld2|fld3 1111|AAAA|aaaa 2222|BBBB|bbbb 3333|CCCC|cccc SQLServerのテーブル fld1|fld2|fld3 2222|BBBB|bbbb 3333|CCCC|cccc 1111|AAAA|aaaa のようになってしまいます。 これをテキストファイル通りのレコード順でインポートするにはどうすればいいのでしょうか? ちなみに実際のファイルにはソートをかけられるフィールドはありません。 よろしくお願いします。

  • SQLの書き方について教えてください。

    accessについて。 シートの中に列名name、列名friendnameがあります。 name,friendname aaaa,bbbb bbbb,cccc cccc,aaaa dddd,aaaa eeee,bbbb ffff,eeee ほしいデータは aaaa,bbbb,cccc bbbb,cccc,aaaa cccc,aaaa,bbbb dddd,aaaa,bbbb eeee,bbbb,cccc ffff,eeee,bbbb と友達の友達の名前がほしいのです。 SQLの書き方を教えてください。 よろしくお願いします。

  • エクセルでデータの張り付け方がわかりません

    大変申し訳ありませんが 下記の内容がわかる方がいれば幸いです 11111 AAAA 22222 BBBB 33333 CCCC 44444 DDDD のデータがテキストであるのですが、 それをエクセルの枠に入れたいのですが・・・・。 簡単に一括で出来る方法がないのかな?と思い書き込みしました A1の枠に「11111」、B1の枠に「AAAA」 A2の枠に「22222」、B2の枠に「BBBB」 A3の枠に「33333」、B3の枠に「CCCC」 A4の枠に「44444」、B4の枠に「DDDD」 としたいのですが・・・・。 ちなみに「11111」と「AAAA」の間には 「半角スペース2個分」があります ご返答を頂ければ幸いです 宜しくお願いいたします

  • エクセル マクロVBAの VLOOKUPと条件分岐について

    エクセルのマクロVBAで質問です。 1つのシートに下記のような(1)(2)のデータと 同ブック内・別シートに(3)(4)のデータがあり (1)のデータ内を検索して、 別シート内の置換リスト(3)に値が存在すれば、 (4)の値を(2)に記載し、なければ、(1)の値をそのまま(2)に記載 するという内容にしたいのですが、どうもうまくいきません。 (1)    (2) AAAA ■■■←AAA BBBB ■■■←JJJ CCCC ■■■←CCC DDDD ■■■←GGG EEEE ■■■←UUU FFFF ■■■←FFF 置換リスト(同ブック内・別シート) (3)    (4) BBBB JJJ DDDD GGG EEEE UUU いい方法はないでしょうか。

  • PHP 読み込んだファイルのブラウザ表示につい

    読み込んだTXTファイルの内容をブラウザに表示したいと思っています。 TXTファイルには aaaa bbbb cccc が入っています。 読み込んだデータを <?php $data = fopen("test.txt","r"); fpassthru($data); ?> でブラウザに表示しようとすると {\rtf1\ansi\ansicpg932\cocoartf1038\cocoasubrtf350 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \paperw11900  ~ 省略 ~  \cf0 aaaa\ bbbb\ cccc} と最後にTXTの中身がありますが、余計なものも一緒に表示されてしまいます。 aaaa bbbb cccc と表示させるにはどうすればよいでしょうか?

    • ベストアンサー
    • PHP
  • 以下の様なファイルの中身から重複を取り除いて表示したいのですが、

    以下の様なファイルの中身から重複を取り除いて表示したいのですが、 awk 'NR==1||prev!=$0;{prev=$0}' file.txt の使い方を教えてください。 何故、重複を除いて表示できるのですが。 printなどを使っていないのに表示ができているのですか。 file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。

  • エクセルについて

    エクセルを使って、たとえば aaaa bbbb(BBBB) cccc eeee (EEEE) とある文字列から( )を取り除き、 aaaa bbbb cccc eeee と表示させたいのですが、( )を含んだものについてはこの部分を取り、意図する通りに表示させることはできますが、( )が付いていないものに対して同じ処理を行うと#VALUEと出てうまくいきません。 この処理をどのようにして良いかなかなか思いつきません。 ちなみに表示の方法は search関数で ( 位置を探し、その後mid関数で ( の一つ左側まで表示させています。 bbbb(BBBB)→ bbbb   何か良い方法はないでしょうか。 よろしくお願いします。

  • コマンドプロンプトでのファイル操作について

    コマンドプロンプトでのファイル操作について、ご存知のかたどうか教えてください。 a.txt b.txtという2つのファイルがあるとします。 <a.txtの内容> 1111 2222 3333 <b.txtの内容> aaaa bbbb cccc 上記の2つのファイルを読み取りc.txtというファイルへ以下のように 出力したいのですが、コマンドプロンプト(batでも問題ありません) にてできるのでしょうか? <c.txtの内容> 1111,aaaa 2222,bbbb 3333,cccc ご教授のほど、宜しくお願いします。

  • Excel抽出のマクロかVBAを教えてください

    A列にxxxがあった場合、その上に存在するIDの値を抽出する方法を教えていただけますでしょうか? 例)xxxがあった場合、IDの値を抽出したい。 以下の場合、ID:1111とID:3333と表示したい。 (ID以降の値はランダムです) A列 ID:1111 aaaa bbbb cccc dddd eexxx ←xxxがあるのでその上のIDを抽出 ffffff ID:2222 aaaa bbbb cccc dddd eeee ffffff ID:3333 aaaa bbbb cccc dddd eexxx ←xxxがあるのでその上のIDを抽出 ffffff

  • VBAでパスを取得した後、分割して取り扱いたい

    VBAでパスを取得するとします。 例えば、 A:\BBBB\CCCC\DDDD\EEEE.TXT この時パスを次のように分割をしようとしています。 PATH1=A:\BBBB\CCCC\DDDD\ PATH2=EEEE.TXT といった具合です。 これらの作業をどのようにプログラミングすれば良いのかわかりません。 情けない質問ですが、ご教授お願いします。

専門家に質問してみよう