この記事では、EXCELに入力したデータをタブ区切りで出力する方法について説明しています。
タブ区切りのテキストファイルを作成することにより、他のシステムで取り込むことができるようになります。
しかも、出力する範囲をヘッダー行(1行目)の列数で判定するので、途中の行に余計な入力をしていても、問題なく必要な列のみ出力可能となっています。
一度この機能を作成しておけば、次から簡単にタブ区切りのテキストファイルを作成できるようになります。
それでは、EXCELで入力したデータをタブ区切りで出力する機能を作成していきましょう。
困っている女性
困っている女性
解決する男性
解決する男性
困っている女性
◆似たような作業で、EXCELに入力したデータからカンマ区切りのCSVファイルを作成する方法については、以下の記事を参照してください。
【EXCEL:VBA】入力したデータをCSVファイル形式で出力したい
EXCELで入力したデータからタブ区切りのファイルを作成する機能に必要なものを、1つ1つ順番に説明していきます。
もくじ
1.作成するファイルパスを指定するシートを作成する
まず、出力するファイルパスを指定する欄を作成します。
「メイン」シートを作成する
- 「メイン」という名前のシートを作成します。
- 1行目に「出力ファイルパス」のタイトル行を作成します。
- 2行目に「出力ファイルパス」を入力する欄を作成します
2.タブ区切りで出力したいデータを準備する
それでは、出力したいデータを準備しましょう。
他のEXCELで作成されているデータなら貼り付けましょう。
「データ」シートを作成する
- 「データ」という名前のシートを作成します。
- あとは、好きなデータを入力もしくは貼り付けします。
上記の画像サンプルでは、1行目に項目のタイトル行(ヘッダー行)を入力していますが、必要ない場合入力しなくてもよいです。
ただし、1行目のデータで出力する列を判断します。
1行目に入力されている最大の列までが、ファイルに出力されます。
つまり、上記の画像では、A列からF列までを対象にファイルに出力されます。
また、ファイルに出力される行は、A列に値が入力されている最大行までとなります。
つまり、上記の画像では、A列が入力されていない14行目以降はファイルには出力されません。
3.VBAでタブ区切りでファイル出力する機能を記入する
「Microsoft Visual Basic for Applications」を起動します。
標準モジュールを追加して、以下のソースを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
Public Sub MainProc() Dim shtMain As Worksheet Dim shtData As Worksheet Dim filePath As String Dim lastRow As Long Dim lastCol As Long Dim varData As Variant Dim i As Long Dim j As Integer Dim line As String '①「メイン」シートを変数に格納する Set shtMain = ThisWorkbook.Sheets("メイン") '②「データ」シートを変数に格納する Set shtData = ThisWorkbook.Sheets("データ") '③出力ファイルパスを変数に格納する filePath = shtMain.Range("A2") '④「データ」シートの最終行を取得する lastRow = shtData.Cells(shtData.Rows.Count, 1).End(xlUp).Row '⑤「データ」シートの最終列を取得する lastCol = shtData.Cells(1, shtData.Columns.Count).End(xlToLeft).Column '⑥「データ」シートに入力されているデータを配列に格納する varData = shtData.Range(shtData.Cells(1, 1), shtData.Cells(lastRow, lastCol)) '⑦作成するファイルを開く Open filePath For Output As #1 '⑧タブ区切りデータを書き込みする For i = 1 To lastRow line = "" For j = 1 To lastCol line = line & varData(i, j) If j <> lastCol Then line = line & vbTab End If Next Print #1, line Next '⑨作成するファイルを閉じる Close #1 MsgBox "完了" End Sub |
4.タブ区切りでファイル出力する機能の使い方
それでは、タブ区切りファイルを作成する方法を説明します。
「データ」シートに出力したいデータを入力しておきます。
次に、「メイン」シートのA2セルに「出力ファイルパス」を入力します。
次に、「開発」タブの「マクロ」をクリックします。
先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。
次に、「実行」ボタンをクリックしてファイル作成を開始します。
少し待つと、ファイルが作成されます。
それでは、タブ区切りファイルの中身を見てみましょう。
各項目は、タブで区切られて出力されています。
また、F列の「金額」まで出力されています。
どうですか、簡単でしょ。
もっと大量のデータでも、同じく簡単ですのでやってみてください。
5.タブ区切りファイルを作成するVBAプログラムの説明
それでは、VBAプログラムを説明します。
①「メイン」シートを変数に格納する
1 2 |
'①「メイン」シートを変数に格納する Set shtMain = ThisWorkbook.Sheets("メイン") |
そうすることにより、入力するプログラムを短くすることができるからです。
何度も「ThisWorkbook.Sheets(“メイン”)」と入力するより、「shtMain」と入力するほうが少なくてすむからです。
②「データ」シートを変数に格納する
1 2 |
'②「データ」シートを変数に格納する Set shtData = ThisWorkbook.Sheets("データ") |
③出力ファイルパスを変数に格納する
1 2 |
'③出力ファイルパスを変数に格納する filePath = shtMain.Range("A2") |
④「データ」シートの最終行を取得する
1 2 |
'④「データ」シートの最終行を取得する lastRow = shtData.Cells(shtData.Rows.Count, 1).End(xlUp).Row |
「データ」シートの1列目(A列)の値が入力されている最終行を取得します。
A列の最終行(シートに入力可能な最終行)から上に向かって、値が入力されている最初の行を探しています。
⑤「データ」シートの最終列を取得する
1 2 |
'⑤「データ」シートの最終列を取得する lastCol = shtData.Cells(1, shtData.Columns.Count).End(xlToLeft).Column |
「データ」シートの1行目の値が入力されている最終列を取得します。
1行目の最終列(シートに入力可能な最終列)から左に向かって、値が入力されている最初の列を探しています。
⑥「データ」シートに入力されているデータを配列に格納する
1 2 |
'⑥「データ」シートに入力されているデータを配列に格納する varData = shtData.Range(shtData.Cells(1, 1), shtData.Cells(lastRow, lastCol)) |
先程、取得した最終行と最終列を利用して、データの入力範囲を指定しています。
配列にデータを一気に格納しているのは、高速に処理を行うためです。
1セルずつ値を取得するより、配列から取得するほうが早いからです。
⑦作成するファイルを開く
1 2 |
'⑦作成するファイルを開く Open filePath For Output As #1 |
ファイルを開いておかないと、ファイルに値を書き込みできないからです。
⑧タブ区切りデータを書き込みする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
'⑧タブ区切りデータを書き込みする For i = 1 To lastRow line = "" For j = 1 To lastCol line = line & varData(i, j) If j <> lastCol Then line = line & vbTab End If Next Print #1, line Next |
ここでは、配列に格納したデータをファイルに書き込みしています。
1行目から最終行まで、1行ずつファイルに書き込みします。
1列目から最終列まで、1列ずつ値を取得し、タブで値同士を区切ります。
最終列は、区切り文字が必要ないので、区切らないようにしています。
1行書き込み(Print)すると、自動的に改行されます。
⑨作成するファイルを閉じる
1 2 |
'⑨作成するファイルを閉じる Close #1 |
出力したいデータを全て出力し終わったので、ファイルを閉じています。
ファイルを閉じる処理を行わないと、ファイルがいつまでも開いたままになりますので、注意してください。
それでは、作成したいデータを「データ」シートに貼り付けして、いろいろなタブ区切りファイルを作成してみましょう。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。