◆CSVファイルの書き出し
ファイルの書き出し用のステートメントを下の表にまとめました。
| Put | 書き出す位置を指定できます。ランダムにアクセスできます。 |
| Write # | データを書き出すときにデータ項目の間にカンマ を挿入します。 文字列は、ダブル クォーテーション ("") で囲んで出力します。 |
| Print # | スペースの挿入や出力位置を指定できます。 |
上の表で分かるように、CSVファイルの書き出しには、 Write # ステートメントを
使用します。
Write # ステートメントは最後の文字を出力したあと、改行を挿入します。
Write #, 変数名1, 変数名2
上記の場合は、変数名2の後に改行が入ります。
汎用的な使い方として、For ループでセルの内容を下記のように書き出した場合
For i = 1 To 10
Write # ,Cells(Rowcnt,i)
Next
毎回改行が入ってしまいます。このままでは使えません。
Write # ,Cells(Rowcnt,i);
変数の最後にセミコロン (;)を付けると改行が入らなくなります。
サンプルでは、最後のセルの買出しの時だけセミコロン (;)を付けるようにしています。
example19 をダウンロードして動作を確認してください。
Sub CSV_Write()
Dim FileType, Prompt As String
Dim FileNamePath As Variant
Dim StartRow, StartColumn, Max_Row, Max_Column As Integer
Dim Rowcnt, Columncnt As Integer
Dim UsedCell As Range
Dim ch1 As Long
FileType = "CSV ファイル (*.csv),*.csv"
Prompt = "保存するファイルの名前を付けてください"
'保存するファイルのパスを取得します
FileNamePath = SaveFileNamePath(FileType, Prompt)
If FileNamePath = False Then 'キャンセルボタンが押された
End
End If
'空いているファイル番号を取得します
ch1 = FreeFile
'FileNamePath のファイルをオープンします
Open FileNamePath For Output As #ch1
'使用しているセルの取得
Set UsedCell = ActiveSheet.UsedRange
StartRow = UsedCell.Cells(1).Row
StartColumn = UsedCell.Cells(1).Column
Max_Row = UsedCell.Cells(UsedCell.Count).Row
Max_Column = UsedCell.Cells(UsedCell.Count).Column
For Rowcnt = StartRow To Max_Row
For Columncnt = StartColumn To Max_Column - 1
'改行を挿入しないで書き出す ; を最後に付ける
Write #ch1, Cells(Rowcnt, Columncnt);
Next
'改行を挿入する
Write #ch1, Cells(Rowcnt, Max_Column)
Next
'ファイルを閉じます
Close #ch1
End Sub
Function SaveFileNamePath(FileType, Prompt) As Variant
SaveFileNamePath = Application.GetSaveAsFilename _
(ActiveSheet.Name, FileType, , Prompt)
End Function