アクセス上位ページ
 
最近の更新内容
(9)-b.テキストファイル読込 ⇐ [PREV]

Excel VBA ≫ 1.基礎編 - テキストファイル入出力(9)-c.テキストファイル新規書込

テキストファイルの新規書き込み方法

テキストファイルを新規作成して出力したり、既存ファイルの内容を上書きしたい場合は Open ステートメントに Output モードを指定します。

データを書き込むステートメントには Print #Write # の2つあります。 Print # ステートメントはデータがそのまま出力されるのに対して、 Write # ステートメントは文字列がダブルクォーテーションで括られるなどの違いがあります。 Write # ステートメントで出力したデータはInput # ステートメントで正しく読み込むことができます。



    <ファイルを開く>
  • 【構文】
    Open PathName For Output [Lock] As #FileNumber

  • 引数名 省略 説明
    PathName × 文字列式にはファイル名を指定します。 フォルダ名、またはドライブ名も含めて指定できます。
    Lock 開くファイルに対する、他のプロセスからのアクセスを制御する、次のいずれかのキーワードを指定します。

    Shared
    Lock Read
    Lock Write
    Lock Read Write
    FileNumber × 1 〜 511 の範囲で任意のファイル番号を指定します。 予めFreeFile 関数を使用して次に使用可能なファイル番号を取得しておいてください。


    <ファイルへ書き込む@>
  • 【構文】
    Print #FileNumber, [OutputList]

  • 引数名 省略 説明
    FileNumber × ファイルをオープンする際に指定したファイル番号を指定します。
    OutputList ファイルに出力する式や文字列式を指定します。 セミコロン (;) で区切ることで、複数のデータ項目を続けて出力することができます。 スペースを追加する Spc(n) 関数や、タブを追加する Tab(n) 関数を使用することができます。


    <ファイルへ書き込むA>
  • 【構文】
    Write #FileNumber, [OutputList]

  • 引数名 省略 説明
    FileNumber × ファイルをオープンする際に指定したファイル番号を指定します。
    OutputList ファイルに出力するデータをカンマで区切って指定します。 セミコロン (;) で区切ることで、複数のデータ項目を続けて出力することができます。


    <ファイルを閉じる>
  • 【構文】
    Close [#FileNumber1] [, #FileNumber2 …]

  • 引数名 省略 説明
    FileNumber1… ファイルをオープンする際に指定したファイル番号を指定します。 カンマで区切って複数指定することができます。 省略した場合は、Open ステートメントで開いたすべてのファイルが閉じられます。
  • テキストファイルへの書き込み例1
  • Print # ステートメントを使用し、 データ表のタイトル行およびD列がTRUEの行をCSV形式で出力する例です。
    Sub sample_eb093_01()
        Dim myPath          As String
        Dim FileNumber      As Integer
        Dim outDats(1 To 5) As Variant
        Dim myRow           As Long
        Dim i               As Integer
        Dim flg_out         As Boolean
    
        'このマクロが組み込まれたエクセルファイルと
        '同じフォルダにある"test_output1.csv"を出力ファイルとします。
        myPath = ThisWorkbook.Path & "\test_output1.csv"
    
        '空いているファイル番号を取得します。
        FileNumber = FreeFile
        'ファイルをOutputモードで開きます。
        Open myPath For Output As #FileNumber
    
        'アクティブシートの使用済み領域を出力範囲とします。
        With ActiveSheet.UsedRange
            For myRow = 1 To .Rows.Count
                '出力対象のチェック
                If myRow = 1 Then
                    flg_out = True  'タイトル行は出力
                ElseIf CBool(.Cells(myRow, 5).Value) Then
                    flg_out = True  '[対象]がTRUEの場合は出力
                Else
                    flg_out = False '上記以外は出力しない
                End If
    
                If flg_out Then
                    '出力用の配列へデータをセットします。
                    For i = 1 To 5
                        outDats(i) = .Cells(myRow, i).Value
                    Next i
                    '配列の要素をカンマで結合して出力します。
                    Print #FileNumber, Join(outDats, ",")
                End If
            Next myRow
        End With
    
        '入力ファイルを閉じます。
        Close #FileNumber
    End Sub
    
    ⇒ サンプルマクロ集 へ

    <アクティブシートのデータ表> アクティブシートのデータ表 <sample_eb093_01 実行結果> sample_eb093_01実行結果
  • テキストファイルへの書き込み例2
  • Write # ステートメントを使用し、前述サンプルと同様に データ表のタイトル行およびD列がTRUEの行をCSV形式で出力する例です。
    Sub sample_eb093_02()
        Dim myPath          As String
        Dim FileNumber      As Integer
        Dim myRow           As Long
        Dim i               As Integer
        Dim flg_out         As Boolean
    
        'このマクロが組み込まれたエクセルファイルと
        '同じフォルダにある"test_output2.csv"を出力ファイルとします。
        myPath = ThisWorkbook.Path & "\test_output2.csv"
    
        '空いているファイル番号を取得します。
        FileNumber = FreeFile
        'ファイルをOutputモードで開きます。
        Open myPath For Output As #FileNumber
    
        'アクティブシートの使用済み領域を出力範囲とします。
        With ActiveSheet.UsedRange
            For myRow = 1 To .Rows.Count
                '出力対象のチェック
                If myRow = 1 Then
                    flg_out = True  'タイトル行は出力
                ElseIf CBool(.Cells(myRow, 5).Value) Then
                    flg_out = True  '[対象]がTRUEの場合は出力
                Else
                    flg_out = False '上記以外は出力しない
                End If
    
                If flg_out Then
                    Write #FileNumber, _
                          .Cells(myRow, 1).Value, _
                          .Cells(myRow, 2).Value, _
                          .Cells(myRow, 3).Value, _
                          .Cells(myRow, 4).Value, _
                          .Cells(myRow, 5).Value
                End If
            Next myRow
        End With
    
        '入力ファイルを閉じます。
        Close #FileNumber
    End Sub
    
    ⇒ サンプルマクロ集 へ

    <アクティブシートのデータ表> アクティブシートのデータ表 <sample_eb093_02 実行結果> sample_eb093_02実行結果

カテゴリ内ページ



Page
Top