アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

CSVファイルの書き出し

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


Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.