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を閉じる
書き込むコード
出力する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ファイルに収まり切れなくなります。
以下の画像がその例です。
ファイルに出力処理をするSaveToFileメソッド
Streamオブジェクトからファイルにデータを書き込みます。
【構文】
Streamオブジェクト.SaveToFile FileName,SaveOptions
【引数】
FileName 出力するファイルをパスで指定。
SaveOptions ファイルがまだ存在しない場合は新しいファイルを作成しますが、ファイルが存在する場合には上書きするかどうかを指定する。
adSaveCreateNotExist 上書きなし
adSaveCreateOverWrite 上書きする
(例)adoStr.SaveFile path, adSaveCreateOverWrite