質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

7632閲覧

EXCEL VBAでテキストファイルの途中に文章を差し込む方法

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/02/15 12:25

エクセルVBAで、テキストファイルを読み込んで、テキストファイルの途中に文章を差し込むというプログラムを作成中です。

素直にやると、全レコードを一度配列変数か何かに読み込んで、その後、1行ずつ吐き出しながら新たにファイルを構築するのが素直なやり方かなと思っておりますが、やはりそのようにするのが無難といいますか、それしかないものなのでしょうか?

その方法だと、ファイルの行数が膨大になってきますと、非常にメモリを食う事になりますので、どうしたものなのかなぁと。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

メモリ使用量を気にされていますので、そちらの方面で補足を。

テキストファイルの処理方法は大きく2パターンあり、それぞれメリット・デメリットがあります。

1. 少しずつ読み取って処理をする

ファイルの中身を少しずつ(例:一行ずつ)読み取り、新しいファイルへ書き出しを行います。

メリット

一度に読み込む量が少ないのでメモリ使用量が少ない。

デメリット

ファイル - プログラム間のやりとりのオーバーヘッドがあるため、2の方法より処理が遅くなりやすい。

(今回やりたいことの場合)一度別ファイルに書き出したのち、元のファイルと置き換えを行う必要がある。

VBAで読み込む方法

VBA組み込みのファイル操作ステートメント(Line Input)や、
Scripting.FileSystemObjectOpenTextFileでTextStreamを取得して、ReadLineなどで読み込むことで、少しずつファイルを読み込むことが出来ます。

2. 一度に全部まとめて読み込んで処理をする

ファイルの中身をまとめて読み込み、メモリ上で処理をして、ファイルへ書き出しを行います。

メリット

ファイル - プログラム間のやりとりが少なく、高速なメモリ上で処理を行えるため、処理が速い。

デメリット

メモリ上に乗りきらない場合は、処理できない、処理できても速度が非常に遅くなる。

分割したい場合は自分で処理をする必要がある(単純な行分割ならSplitでいいですが)

VBAで読み込む方法

VBA組み込みのファイル操作ステートメントでもまとめて読み込みは出来ますが、ややトリッキーな書き方になります。
そのため、TextStreamのReadAllメソッドを使用した方が無難です。

投稿2018/02/16 10:00

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/17 02:50

imihoito様 なるほど。 ありがとうございました。
guest

0

ベストアンサー

素直にと言うことだと、1行読んで、その1行を書いて、を繰り返すというのが普通です。

テキストファイルの途中に文章を差し込む

の条件によってはやや難しいが出来ないわけじゃない。

やさしい例:「○△×」が含まれる行の後に「※★」という行を差し込む。「○△×」が行をまたぐことは無い。
難しい例:「○△×」の後に「※★」を差し込む。「○△×」は行をまたいでいるかも。差し込んだ結果行が長くなったら改行位置を変えて、それ以降の行も数文字ずつずらす。

投稿2018/02/15 12:37

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/15 22:21

otn様 うーん、ではそうするしかないでしょうかねぇ。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問