tamago8610のブログ

日々の勉強を備忘録としてブログを書いています。

VBAを使ってExcelからCSVファイルを出力する方法

※注意 この記事は、投稿者が勉強用に作成している備忘録のようなものです。 メソッドやプロパティ、変数に代入されている値の説明など省略されている箇所があります。

 

 

ExcelからCSVファイルを作成する方法に、普通に名前を付けて保存でCSVファイルを作成することはできます。

(※ただし、Excelで表示した際に、数値データの頭の数字「0」が消えてしまいます。メモ帳やテラパッドで開いたときは大丈夫でした。)

ここでは、VBAを使ってExcelからCSVを出力する方法を記述しています。

 

前回と同様に参照設定でADOオブジェクトを使用できるように参照設定をします。

前回の記事:CSVファイルを読み込む - tamago8610のブログ

 

用意する変数

  • ADODB.streamオブジェクトを生成する変数
  • シートの最終行を取得する変数
  • 書き込むCSVファイルのパスを格納する変数
  • Streamに書き込むため、Excelシートから1行ずつデータを格納する変数
  • 行、列のデータを準に取得するための繰り返し変数

 

処理の流れ

①シートの最終行を変数に格納・出力ファイルのパスを変数に格納

②出力するCSVファイルの改行コード、文字コードを設定、Streamを開く

③シートのセルの値を1行ずつカンマ区切りで結合してStreamに追記

④Streamファイルに出力し、Streamを閉じる

 

 

書き込むコード

f:id:tamago8610:20210509191948p:plain

CSVファイルを出力する

出力するCSVファイルの文字コード、改行コードをADODB.streamオブジェクトで設定していきます。

ADOオブジェクトのプロパティの説明等は前回のブログに掲載。

 

WriteTextメソッド

文字列をStreamに書き込みます。

 

【構文】

Streamオブジェクト.WriteText Data [,Options]

 

【引数】

Data … 書き込む文字列データを指定します。

Options …

  adWriteChar  文字列データを改行せずに書き込みます。(既定値)

  adWriteLine 文字列データを改行して書き込みます。

 

(例)adoStr.WriteText strBuf,adWriteLine

変数「adoStr」に、Streamオブジェクト。変数「strBuf」にCSVに書き出すデータを格納。

 

※注意 WriteTextメソッドの引数、Optionsは基本adWriteLineを設定した方が良い。

WriteTextメソッドの引数Optionsを省略すると、既定値のadWriteCharになります。

意図して改行せず1行で文字列データを出力するのでしたら、いいのですが、データ量が多いとすべての文字列データがCSVファイルに収まり切れなくなります。

以下の画像がその例です。

f:id:tamago8610:20210509204928p:plain

Optionsを省略、または既定値にした場合

ファイルに出力処理をするSaveToFileメソッド

Streamオブジェクトからファイルにデータを書き込みます。

 

【構文】

Streamオブジェクト.SaveToFile FileName,SaveOptions

 

【引数】

FileName  出力するファイルをパスで指定。

 

SaveOptions  ファイルがまだ存在しない場合は新しいファイルを作成しますが、ファイルが存在する場合には上書きするかどうかを指定する。

 adSaveCreateNotExist  上書きなし

 adSaveCreateOverWrite  上書きする

 

(例)adoStr.SaveFile path, adSaveCreateOverWrite