質問: エクセルVBAで、テキストファイルを読み込んで、テキストファイルの途中に文章を差し込むというプログラムを作成中です。 素直にやると、全レコードを一度配列変数か何かに読み込んで、その後、1行ずつ吐き出しながら新たにファイルを構築するのが素直なやり方かなと思っておりますが、やはりそのようにするのが無難といいますか、それしかないものなのでしょうか? その方法だと、ファイルの行数が膨大になってきますと、非常にメモリを食う事になりますので、どうしたものなのかなぁと。。。
回答: メモリ使用量を気にされていますので、そちらの方面で補足を。 テキストファイルの処理方法は大きく2パターンあり、それぞれメリット・デメリットがあります。 1. 少しずつ読み取って処理をする ================== ファイルの中身を少しずつ(例:一行ずつ)読み取り、新しいファイルへ書き出しを行います。 メリット 一度に読み込む量が少ないのでメモリ使用量が少ない。 デメリット ファイル - プログラム間のやりとりのオーバーヘッドがあるため、2の方法より処理が遅くなりやすい。 (今回やりたいことの場合)一度別ファイルに書き出したのち、元のファイルと置き換えを行う必要がある。 VBAで読み込む方法 VBA組み込みのファイル操作ステートメント(Line Input)や、 `Scripting.FileSystemObject`の`OpenTextFile`でTextStreamを取得して、ReadLineなどで読み込むことで、少しずつファイルを読み込むことが出来ます。 2. 一度に全部まとめて読み込んで処理をする ======================= ファイルの中身をまとめて読み込み、メモリ上で処理をして、ファイルへ書き出しを行います。 メリット ファイル - プログラム間のやりとりが少なく、高速なメモリ上で処理を行えるため、処理が速い。 デメリット メモリ上に乗りきらない場合は、処理できない、処理できても速度が非常に遅くなる。 分割したい場合は自分で処理をする必要がある(単純な行分割ならSplitでいいですが) VBAで読み込む方法 VBA組み込みのファイル操作ステートメントでもまとめて読み込みは出来ますが、ややトリッキーな書き方になります。 そのため、TextStreamのReadAllメソッドを使用した方が無難です。