今回はVBAでCSVファイルをテキスト形式で書き出す方法を紹介します。
この方法を知っていれば、CSV以外でも「.txt」形式のファイルも書き出せます。
案外、簡単にファイルに書き出せますよ。
テキストファイルに書き出すソースコード
csvファイルを出力する方法は2つあります。
1:テキスト形式で書き出す方法
2:Excelシートに書き出し、フォーマットをCSVに指定して保存する方法
しかし、2の方法はフォーマット変換が上手くいかなくて警告がでたりする場合もあって、私は好んでいません。
1のテキスト形式で書き出した方が確実なので、いつも1の方法でやっています。
今回紹介するのも、1のテキスト形式で書き出す方法です。
今回は、ボールの軌道を計算して、csvファイルに書き出す関数を作ってみました。
(ボールの軌道計算部分は省略しています。)
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
ソースコードの説明
ソースが長くなりましたが、今回のキモは
'出力ファイル
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形式にしたいので、文字列にはデータとデータの間にカンマ「,」を入れる必要があります。
tmp = CStr(time) + "," + CStr(posvel(0)) + "," + CStr(posvel(1)) _
+ "," + CStr(posvel(2)) + "," + CStr(posvel(3))
上記のようにカンマをデータ間に挿入しておきましょう。
なお、書き出し部分の「Print #1, 文字列」の部分を
Write #1, 文字列
とした場合、文字列の出力に「””」が付きます。
「Write」で出力した場合と「Print」で出力した場合のファイルは以下です。
メモ帳(テキストエディタ)で開くと文字列の前後に「””」が付くだけの違いですが、Excelで開いてみると違いが顕著です。
Writeで出力したファイルをExcelで開くと、1つの文字列として認識されてデータがセルに分かれていません。
カンマ区切りが意味をなしていないのです。
なので、csvファイルを出力したいなら、「Write」ではなく「Print」で出力するべきです。
今回はCSVファイル書き出しの方法の紹介でした。
んじゃ、また~
コメント