ExcelをVBAでテキストファイルへ書き出す − GoGoマクロ

HOME > レッスン > テキストファイル出力

ExcelをVBAでテキストファイルへ書き出す

テキスト出力マクロ


pickup
応用力を身に付ける!(このページの便利な活用法)



今回はテキストファイルへデータを書き出す方法について、その基本処理を しっかり押さえて置きたいと思います。

説明するまでもないとは思いますが、テキストファイルとは普通にメモ帳等 で開くことのできる(拡張子が.txtや.csv、等々の)もので、Excelのブック のファイルというものではありません。

まず、
そのテキストファイルへ読み書きする際の処理の基本手順というのは 以下になります。

(1)ファイル名(パス名)を指定してテキストファイルを開く
(2)テキスト(文字列)を読み込む/書き込む
(3)ファイルを閉じる

■サンプルプログラム
――――――――――――――――――――――+
Sub Macro1()
  ChDir ThisWorkbook.Path
  sFileName = "out1.txt"
  Open sFileName For Output As #6
  Call Macro2
  Close #6
End Sub

'開いているシートの全ての表データを書き出す
Sub Macro2()
  n = Cells(Rows.Count, "A").End(xlUp).Row
  m = Cells(1, Columns.Count).End(xlToLeft).Column
  For i = 1 To n
    tmp = ""
    For j = 1 To m
      tmp = tmp & Cells(i, j)
    Next j
    Print #6, tmp
  Next i
End Sub
――――――――――――――――――――――+


解説しますと、まず

(1)テキストファイルを開く為の基本構文は、

 Open [ファイル名] For [オープンモード] As [#ファイル番号]

です。

この[ファイル名]の部分は、出力先のファイル名をなるべくフルパスにて 指定します。

例文)
 Open "C:\test.txt" For Output As #6

もし、フルパスで指定しない(ファイル名のみの)場合には、カレントの フォルダ(通常はデフォルト設定のドキュメントフォルダ)に、ファイル が出力されます。

★ポイント
パスの指定方法は、ChDirで予めカレントフォルダの移動を行うか、 もしくは ThisWorkbook.Path(マクロが記述されているブックのパス名 の取得)を使うのが一般的で便利です。

例文)
 ChDir ThisWorkbook.Path
   sFileName = "out1.txt"
      ↓
 sFileName = ThisWorkbook.Path & "\OutputData" & "\out1.txt" 
   (※フォルダ区切りマークの \ (←円マーク)を忘れずに!)

[オープンモード]の部分には、主に

 入力モード Input (読み込み)
 出力モード Output (書き込み)
 追加モード Append (追加書き)

を使います。

※「出力モード(Output)」で既に存在するファイル名を指定して 開いた場合は前データは上書き削除されますので注意が必要です。 (同名のファイルが存在しない場合は新規作成されます。)

※データを上書きではなく追加する場合は「追加モード(Append)」 で開きます。(新規でもOKです。)

[#ファイル番号]の部分は、

#マークの後に任意の数字で重複しない番号を適当に指定します。
閉じるまで同じ番号で別のファイルを開くことは出来ません。(違う数字 なら何でも、何個でも、OKです。)

(2)データをテキストファイルに書き込む為の基本構文(Print文)

 Print [#ファイル番号], [書き込む文字列]

例文)
 Print #6, tmp

[#ファイル番号]は、
先ほどのファイルを開いたときと必ず同じ番号を指定します。

[書き込む文字列]については、
通常は、変数に書き出す内容を予めセットして置くのがよいでしょう。

例文)
 c = 25.3
 tmp = “本日の気温は” & c & “度です。”
 Print #6, tmp 
 
上記の例では、テキストファイルに実際に書き出される文字列は、

 本日の気温は25.3度です。

といった具合になります。


★ポイント(指定したフォーマットで出力する)
数値データをテキストファイルへきれいに書き出す場合(桁合わせ等)には、
Format関数が便利です。

 tmp = tmp & Cells(i, j) 'Cells(i, j)は、i行j列の値を取得します
( Cells(*, *).Valueの省略形 )

  ↓

 tmp = tmp & Cells(i, j) & “ “   '空白文字区切りで書き出す例

  ↓

 tmp = tmp & Format(Cells(i, j), "00.000 ")  '小数点以下3桁まで揃えて書き出す例

例1)基本文例( Office Supportより抜粋 )

 Format(5459.4, "##,##0.00") ' "5,459.40" を返します。
 Format(334.9, "###0.00") ' "334.90" を返します。
 Format(5, "0.00%") ' "500.00%" を返します。
 Format("HELLO", "<") ' "hello" を返します。
 Format("This is it", ">") ' "THIS IS IT" を返します。

例2)実数のケタ合わせ例

 Format(31.36, "000.000") → 031.360
 Format(31.36, "0.000") → 31.360
 Format(31.36, "0.0") → 31.4
 Format(31.36, "0") → 31

例3)@を使った文字列の出力例

 Format("ABCDEF", "@は@@の@@@です") → "AはBCのDEFです"


ということで、以上がテキストファイルにデータを書き出す方法についての 基本になります。興味のある方は、先のサンプルプログラムを使って(コピ ッペして)、色々とテキストファイルへの出力 試してみてください。


今回はこれで終了です。



NEXT >>
データのある範囲だけを自動印刷するマクロ