こんにちは、Ryoです。
ワークシート上に作成した表などのデータを読み込み、テキストファイルに出力するケースは多々あると思います。その中でワークシートの行単位でテキストファイルへ出力したい場合はPrintステートメントを利用することで対処できますので、今回はその内容について書いていきます。
1.サンプル概要
サンプルとして以下の簡易的な表を作成しています。この表に対し行単位でテキストファイルに書込んでいきます。
この表に対してサンプルコードを実行してテキストファイルに出力すると以下のように行単位でカンマ区切りのデータとして書き込まれます。
サンプルコードを実行して出力されるテキストファイルは実行ファイル保存先と同じ場所で「Sample1.txt」として保存されます。
以上がサンプル概要になります。
2.サンプルコード
Sub Sample1() Dim num As Integer Dim temp As Variant Dim i As Long 'セルA1を含むアクティブセル領域の範囲を '変数tempに配列として格納 temp = Cells(1, 1).CurrentRegion.Value 'ファイル番号を取得 num = FreeFile '「Sample1.txt」ファイルを ' シーケンシャル出力モードで開く Open ThisWorkbook.Path & "\Sample1.txt" _ For Output As #num '配列「temp」に対する処理 For i = 1 To UBound(temp) '各行の値からカンマ区切りのデータを作成し、 'そのデータをテキストファイルに入力 Print #num, Join(Application. _ WorksheetFunction.Index(temp, i), ",") Next 'ファイルを閉じる Close #num End Sub
セルA1を含むアクティブセル領域範囲をCurrentRegionプロパティで取得し、変数tempに配列として格納しています。
次にFreeFile関数で取得したファイル番号を使用してOpenステートメントでTextファイルを開きます。
num = FreeFile
Open ThisWorkbook.Path & “\Sample1.txt” For Output As #num
後はループ処理を利用して全ての行を順番に処理していきます。ここで使用するPrintステートメントは1行分のデータを書き込みますので、Index関数を使用して配列から1行分の配列を抜き出し、Join関数を使用してカンマで区切り1行分のデータとしています。
For i = 1 To UBound(temp)
Print #num, Join(Application. _
WorksheetFunction.Index(temp, i), “,”)
Next
構文:Print #filenumber[ ,outputlist]
このようにワークシートの内容をテキストファイルに書き込むにはPrintステートメントを利用します。Print #ステートメントはシーケンシャル出力モード(OutputまたはAppend)で開いたファイルにデータを書き込みます。
以上がワークシートのデータを行単位でテキストファイルに書き込むサンプルコードの説明になります。
3.まとめ
以前に投稿した記事はテキストファイルを1行ずつ読み込んでセルに書込むものでしたが、今回はその逆でワークシート上のデータを行単位で読み込んでテキストファイルに出力するものです。
テキストファイルとの連携は何かと機会も多いので手段を知っておいて損はないと思います。サンプルのようにアクティブセル領域で一括りできるデータであればループ処理しながら必要なデータのみ抽出して簡単にテキスト出力するようなこともできますので、機会があればご活用くださいませ。
以上、ワークシートの行単位でテキストファイルに書き込む方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo