• ベストアンサー

VBAでcsvファイルを読み込み、更新する方法

こんにちは。早速ですが、質問です。 VBAを使ってcsvファイルをエクセルに読み込んで、 読み込んだエクセル上でcsvファイル情報を変更すると、 変更した内容が読み込み元のcsvファイルに更新される ようなプログラムを作りたいのです。csvファイルの 読み込みまではうまくいったのですが、csvファイルの 更新の仕方がわかりません。良い方法があれば、 教えてください。よろしくお願いします。

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

  • ベストアンサー
  • i-touch
  • ベストアンサー率40% (170/415)
回答No.3

CSVの仕様にもよりますね。 二重引用符を付けたり、細かい仕様がある場合は、シーケンシャルファイルをOpen(for output)して、セルのデータを1つずつ(For-Nextでまわして)、Print #nで出力しています。 この場合、二重引用符(Chr(34))やカンマ、改行も意識して入れる必要がありますが、必要な仕様にあわせることができるのです。 ファイルはやはり、バックアップ(Name)してから上書きします。 では!

poporikomanaka
質問者

お礼

詳しい回答ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

CSVファイルは、シーケンシャルファイルで(<->ランダムファイル)、「更新」は出来ないと思います。 1文字だけ変えても新しいファイルに、変えない部分も含め、すべてを別ファイルに書き替えないといけないと思います。そして旧ファイルを削除し、別ファイルを旧ファイル名に変更するということになるかと思います。 更新と言うイメージと用語に注意してください。

poporikomanaka
質問者

お礼

更新は出来ないということですか。すべて書き換えるしかないのですね。わかりました。ありがとうございました。

回答No.1

CSV を読み込んだ Workbook オブジェクトを wb とすると wb.Save でいいと思うんですけど・・・。

poporikomanaka
質問者

お礼

他の人の回答を見る限りでは、そう簡単ではないようですね。回答ありがとうございました。

関連するQ&A

  • Excel VBAにてCSVファイルを読みたい

    ExcelにてCSVファイルを読んで処理をしたい。 ただし、CSVファイルをExcelでopenすると遅いので、 VBAにてファイルとして読み込みで処理をしたいのですが、 皆さんは、どのように行っていますか? ※CSVファイルは、テキスト区切り→"(ダブルコーテーション)です  テキスト区切り無しであれば、1行読んで、カンマをsplitすれば良いと思いますが。。。。

  • CSVファイルを手で開いた後VBAを動かしたい

    すみませんが教えてください Excel VBAで、SaveしてあるCSVファイルを開くのは良く見ます でも、この方法ではなくて、あるシステムから切り出してきたCSVファイル を開いた状態からVBAを動かすにはどうしたらよいでしょうか? 理由は、どうも日付データがSaveしてしまうと消えてしまうようで、 (システムから切り出したCSV・・・2013-01-06 00:00:00) (SaveしたCSVを読み出すと・・・0000-00-00 00:00:00) このためSaveしたCSVファイルを開いてVBAを動かすことができません Excel形式にしてSaveしても同様です 何かもっと良い方法がありますか?

  • EXCEL VBAを使用してCSVを自動更新

    こんにちは。 今、EXCELのマクロ(VBA)を使ってネットショップのCSVを自動更新しようと試みているのですが、具体的にいうと価格.comの家電(パソコン・プラズマテレビ)の人気ランク1位~5位までの商品の情報をCSVに落とし込んで、商品コメントと商品画像を同時に取り込みたいという事なのですが、これらのVBAをエクセルで動かしたいのですが、何分VBA初心者なので手詰まりの状態です。 ※CSVの用途は、ネットショップのサイトを更新する情報をCSVにて一括管理しています。通常は、FTPを用いてアップロードして更新しています。 いい記述・もしくは方法はないでしょうか?宜しくお願いします。

  • csvファイルの読み込みができません。

    csvファイルの読み込みができません。 過去にExcelで作成したデータをcsvに変換するマクロを作ってもらいました。 (Excel表の中にマクロを登録したボタンがあって、それをクリックするとcsvファイルが作成される) そのcsvファイルをそのまま使用すると、読み込みができますが、一旦csvファイルを開いて一部データの変更をして保存すると読み込みができなくなります。 また、自動にファイル名が設定されるので、わかりやすいようにファイル名を変更しただけでも読み込みができなくなります。 csvファイルにも種類があるんでしょうか?

  • エクセルVBAでCSVを読み込んで別ファイルにまとめたいです。

    エクセルVBA初心者の者です。 マクロの記録でできたコードをいじって、 なんとか動くものができるレベルです。 Aというフォルダに20~40行程度の内容のCSVファイルが 数百個あります。開けてみないと何行あるのかわかりません。 そのAフォルダのCSVの内容をエクセルで開いて、別のエクセルファイルの一枚のシートにまとめたいのです。 最初にCSVファイル名を一枚のシートのA列に書き出すところ まではやれたのですが、それを順番に読み込んでコピペの 流れができません。 CSVファイル名読み込み 読み込んだファイル1つめCSV開く CSVの20~40行をコピー 別のエクセルファイルのシートに貼り付け 1つめCSV閉じる ↓ 読み込んだファイル2つめCSV開く 繰り返し こういうやり方じゃない方がいいのかもわかりません。 もしかして考え方も違うのでしょうか? サンプルコード教えていただけるとありがたいです。 よろしくお願いします。

  • C#でCSVファイルを逐一更新したい

    C#のプログラムで データをCSVファイルに蓄積するプログラムを作っています。 やり方としては最初にCSVファイルを指定し ボタンを押すたびに、データを追加するように作りました。 以下抜粋 //CSVファイル指定 csvfile = new System.IO.StreamWriter(csvPath, true, encording); ・ ・ ・ //データの書き込み csvfile.Write(data); csvfile.Write(","); ・ ・ ・ //CSVファイルクローズ csvfile.Close(); このプログラムを動作させた所 「csvfile.Close();」の時点で、実際にcsvにデータが書き込まれました。 データの書き込みのたびにCSVファイルが更新されるのが理想なのですが、 その方法としては逐一クローズするしか方法はないのでしょうか? 何らかの方法で逐一更新出来たり、 もしくは異なるCSVへの書き込み方法があれば、教えていただけないでしょうか?

  • VBAでCSVファイルが使用中かどうかの確認

    お世話になっております。 Excel VBA についてご質問します。 今、VBAでCSVファイルを作成してデータ管理を行うソフトを作成しております。 このソフトは、共有をかけて複数の人で使用するため同じCSVファイルに同時にアクセスする可能性があります。そのため、CSVファイルに混同したデータが書き込まれてしまう恐れがあります。 そこで、CSVファイルがオープン中または、アクセス中が認識できる命令等はないでしょうか? よろしくお願いします。

  • 【Excel】 csvファイルを参照した時、頭の0が消されてしまいます。。

    こんにちは。 Excelでcsvファイルを参照するシートが有ります。 参照元のcsvファイルの内容が変更された場合、 このシートの内容を更新するために、csvファイルを開かなければならないと思います。 ただ、Excelでcsvファイルを開くと表示形式が標準となるため、csvに含まれるハイフンのない、 郵便番号(09*****) や電話番号(090********)といった数値の頭の0が消されてしまい(9*****)や(90********)と表示されてしまいます。 文字列として扱えればよいと思うのですが…。 参照先の(09*****)を表示するにはどうしたらよいでしょうか。

  • Excel(VBA)で、レコード長の長いCSVファイル読み込み方法

    現在、VBA(EXCEL)の勉強しています。 次のような場合で良い方法(PG)がありましたら、回答お願いします。 csvファイルで、1レコードに可変データが情報として送られてくる場合の、EXCELにその情報を取り込方法です。 しかし、可変データ数が多数の場合、最初にEXCELのシートに展開できない(シートの最大列数以上のデータ)時、その場合の取り込み方法を教えてください。 うまく伝わらないような気がしますので、例を作成しました。 【例】 <画面(別プロセス)> 営業 青井 19 大卒 石井 19 高卒 佐藤 20 高卒 ・ ・ 人事 後藤 21 専卒 橋口 22 大卒 竹田 23 大卒 ・ ・ ・ 上記のような情報がcsvファイルで送られてくる <CSVファイル> 営業,青井,19,大卒,石井,19,高卒,佐藤,20,高卒・・・・・ 人事,後藤,21,専卒,橋口,22,大卒,竹田,23,大卒・・・・・ ・ ・ ・ このCSVを1レコードづつ読み込んで、編集し帳票にしたいと思います。 部(営業、人事)を最初に大項目名としてA列に入れる。 可変データ編集は名前と年齢をつなげセルA列に、学歴をB列に入れる。 <帳票> 営業 青井(19) 大卒 石井(19) 高卒 佐藤(20) 高卒 ・ ・ ・ 人事 後藤(21) 専卒 橋口(22) 大卒 竹田(23) 大卒 このようにしたいと考えてます。 この場合の、VBAでの読み込み編集方法で、良い方法はありますか? 良い方法がありましたら、教えてください。 (ん~うまく伝わるかなぁ~)

  • EXCEL- VBA(CSVファイル→インポート)

    A列~F列になる複数(100個以上)のCSVファイルをエクセルファイルにインポートして更に個別にエクセルファイルとして保存したいのですが VBAでできるのでしょうか? 記憶マクロでやったらどうにもうまくいきません。 エクセルのVBAについては ほとんど知識ゼロなので困っております。 大変厚かましくありますが どなた様かご教授お願いできたらと思います!! 【元のファイルの状態】   ◆ファイル名「*.CSV」*は文字数それぞれ違います。   <例:tanaka.xls だったり 09福島.xls>  ◆入っているドライブ   TEXT;C:\Documents and Settings\AA_B\デスクトップ\練習  ◆A~F列にデータが入っている 【やりたいこと】    (1)A~F列はカンマ区切りで全て文字列としたい  (2)元のファイル名でエクセルとして保存したい「*.XLS」

専門家に質問してみよう