今回はVBAでCSVファイルをテキスト形式で書き出す方法を紹介します。
この方法を知っていれば、CSV以外でも「.txt」形式のファイルも書き出せます。
案外、簡単にファイルに書き出せますよ。
テキストファイルに書き出すソースコード
csvファイルを出力する方法は2つあります。
1:テキスト形式で書き出す方法
2:Excelシートに書き出し、フォーマットをCSVに指定して保存する方法
しかし、2の方法はフォーマット変換が上手くいかなくて警告がでたりする場合もあって、私は好んでいません。
1のテキスト形式で書き出した方が確実なので、いつも1の方法でやっています。
今回紹介するのも、1のテキスト形式で書き出す方法です。
今回は、ボールの軌道を計算して、csvファイルに書き出す関数を作ってみました。
(ボールの軌道計算部分は省略しています。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Option Explicit Sub Main() Dim speed As Double Dim angle As Double Dim dt As Double Dim time As Double Dim posvel() As Double Dim tmp As String 'input speed = Cells(2, 2).Value angle = Cells(3, 2).Value dt = Cells(4, 2).Value time = 0 '出力ファイル Open "Output.csv" For Output As #1 Do posvel() = calcBallOrbit(speed, angle, time) tmp = CStr(time) + "," + CStr(posvel(0)) + "," + CStr(posvel(1)) _ + "," + CStr(posvel(2)) + "," + CStr(posvel(3)) Print #1, tmp time = time + dt Loop While posvel(1) >= 0 Close #1 End Sub Function calcBallOrbit(ByVal speed As Double, ByVal angle As Double, _ ByVal tm As Double) As Double() ~ボールの軌道を計算する関数 中身は略~ End Function |
ソースコードの説明
ソースが長くなりましたが、今回のキモは
1 2 3 4 |
'出力ファイル Open "Output.csv" For Output As #1 Print #1, 文字列 Close #1 |
です。これだけ。
ファイルのオープン
Open “ファイル名” For Output As #No
で出力するファイルを開きます。
ファイル読み込みの時は「For Input」でしたが、出力では「For Output」になります。
なお、ファイルが既にある場合は、新しく上書きされます。
もし既存のファイルのデータに追記する場合は、「For Append」で追記になります。
「No」にはファイル番号を指定します。
今回はファイルが1つだけなので「#1」と指定しています。
ファイルのクローズ
ファイルのクローズは、ファイル読み込みの場合と同じです。
Close #No
この一文でOK。
「No」にはファイルオープンの際に指定した番号を入れます。
ファイルに書き出す部分
ファイルに書き出す部分は
Print #No, 文字列
です。
こちらも同様に「No」にはファイルオープンで指定した番号をいれます。
なお、CSV形式にしたいので、文字列にはデータとデータの間にカンマ「,」を入れる必要があります。
1 2 |
tmp = CStr(time) + "," + CStr(posvel(0)) + "," + CStr(posvel(1)) _ + "," + CStr(posvel(2)) + "," + CStr(posvel(3)) |
上記のようにカンマをデータ間に挿入しておきましょう。
なお、書き出し部分の「Print #1, 文字列」の部分を
1 |
Write #1, 文字列 |
とした場合、文字列の出力に「””」が付きます。
「Write」で出力した場合と「Print」で出力した場合のファイルは以下です。


メモ帳(テキストエディタ)で開くと文字列の前後に「””」が付くだけの違いですが、Excelで開いてみると違いが顕著です。

Writeで出力したファイルをExcelで開くと、1つの文字列として認識されてデータがセルに分かれていません。
カンマ区切りが意味をなしていないのです。
なので、csvファイルを出力したいなら、「Write」ではなく「Print」で出力するべきです。
今回はCSVファイル書き出しの方法の紹介でした。
んじゃ、また~
コメント