dポイントプレゼントキャンペーン実施中!

VBAでCSVの1行目だけを書き換える方法について質問させて頂きます。

例として、以下のようなCSVファイルが存在したとします。
1行目がデータラベルで、2行目から数値がデータとして記録されています。

A,B,C,D
1,2,3,4
1,2,3,4
1,2,3,4
1,2,3,4
1,2,3,4

一方、マクロを含んだエクセルのセル(例えばA1, B1,C1,D1)に
Anew, Bnew, Cnew, Dnew
というように新しいデータラベルが入力されています。

今回実現したい動作は、CSVファイルのデータラベルA,B,C,Dを
新しいデータラベルAnew, Bnew, Cnew, Dnewに置き換えることです。

VBAのappend機能を用いて実現しようと思いましたが、最終行に追加することはできても1行目を書き換えることができません。
ポイントとして、データは下に約50万行ほど続いているので、ワークブックとして開いたりすると最悪の場合メモリ不足で
止まってしまいます。1行目の操作だけで作業を完結させたいところです。

良い方法をご存知の方がいらっしゃればご教授いただきたく思います。
よろしくお願いします。

(以下に、最終行に追加するのに用いたコードを参考として記載します)

sub macro()

dim ch as integer
ch=freefile

open "C:\***\data.csv" for append as #ch
j=1
do while cells(1,j)<>"" 'cells(1,1)からcells(1,4)にAnew, Bnew, Cnew, Dnewが記録されています。
print #ch, cells(1,j) & ","; '改行させないため ; を付ける
j=j+1
loop
close #ch

end sub

A 回答 (3件)

Excel VBAには可変長のランダムアクセスが無いので,一回スルーで読み書きが必要になりますね。



簡単に作ってみた例:
sub macro1()
 dim FSO as object
 dim s1 as object
 dim s2 as object
 dim buf as string

 set fso = createobject("Scripting.FileSystemObject")
 set s1 = fso.opentextfile(thisworkbook.path & "\data.csv", 1)
 set s2 = fso.opentextfile(thisworkbook.path & "\out.csv", 2, true)
 buf = "Anew,Bnew,Cnew,Dnew"

 s1.skipline
 s2.writeline buf
 s2.write s1.readall
 s1.close
 s2.close
 set fso = nothing
end sub
    • good
    • 0
この回答へのお礼

サンプルまで示して頂き、ありがとうございました。
やはり基本的に書き換えることは出来ないようなので、時間はかかりますがその方針で行こうと思います。

お礼日時:2011/12/25 06:26

1行だけの変更でも


今あるデータはあくまでデータとして、作るものは別に新しく全部作ることになる。
(1)第1レコート(見出しの1行=1レコードデータ)はプログラムでつくり、新しいファイルに書き出す
(2)今あるファイルの1行目は、読んで読み飛ばし
(3)今あるファイルの第2レコードを読む
新しいレコードとして新しいファイルに書き出しする。
(4)(3)を最後のレコードまで繰返す。
(5)両ファイルをCLOSEする
この基本線を抑えてないから質問になる。
固定長のランダムファイル以外はファイルの一部書き換えはしないのだ。
そういうことをスクールででも行って(や先輩から聞いて)学習してないで、VBAに入るからこういう質問になる。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。

>そういうことをスクールででも行って(や先輩から聞いて)
個人が置かれた状況は様々で、そういう事をする代用の手段としてこの様な掲示板が存在するのだと思っています。

お礼日時:2011/12/25 06:49

コードが一行だったとしても、実際の作業としては全行読み出し、


新規ファイルに書き出しということになるんじゃないかな。
http://q.hatena.ne.jp/1075191001
    • good
    • 0
この回答へのお礼

ありがとうございました。
ご指摘の通りのようです。

お礼日時:2011/12/25 06:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A