この記事では、EXCELに入力したデータをCSVファイル形式で出力する方法について説明しています。
カンマ区切り以外にも指定した文字で項目を区切ることもできます。
タブ区切りのテキストファイルも作成できます。
また、項目をダブルコーテーションでくくりたい場合、そのくくりたい文字を指定すれば可能となります。
しかも、出力する範囲をヘッダー行(1行目)で判定するので、途中の行に余計な入力をしていても、問題なく必要な列のみCSV出力可能となっています。
一度この機能を作成しておけば、次から簡単にカンマ区切りのCSVファイルやタブ区切りのファイルだって作成できるようになります。
それでは、EXCELで入力したデータをCSVファイル形式で出力する機能を作成していきましょう。
困っている女性
困っている女性
解決する男性
困っている女性
解決する男性
解決する男性
困っている女性
EXCELで入力したデータからCSVファイルを作成する機能に必要なものを、1つ1つ順番に説明していきます。
もくじ
1.作成するCSVファイル形式を指定するシートを作成する
まず、「区切り文字」、「くくり文字」、「CSVファイルパス」を指定する欄を作成します。
「CSVファイル作成」シートを作成する
- 「CSVファイル作成」という名前のシートを作成します。
- 1行目に「区切り文字」と「くくり文字」および「CSVファイルパス」のタイトル行を作成します。
- 2行目に「区切り文字」と「くくり文字」および「CSVファイルパス」を入力する欄を作成します
ちなみに、「区切り文字」をタブにしたい場合は、「TAB」と入力すれば、タブ区切りでファイルを作成します。
「TAB」以外の文字が入力されていれば、その入力した文字で区切られたファイルを作成します。
「くくり文字」は、入力された文字で以下のように項目をくくります。
くくり文字に「”」を入力した場合、”aaa”,”bbb”のように項目をくくります。
また、くくり文字を未入力にした場合、項目をなにもくくらないので、aaa,bbbのように出力します。
2.CSVファイルとして出力したいデータを準備する
それでは、出力したいデータを準備しましょう。
他のEXCELで作成されているデータなら貼り付けましょう。
「データ」シートを作成する
- 「データ」という名前のシートを作成します。
- あとは、好きなデータを入力もしくは貼り付けします。
上記の画像サンプルでは、1行目に項目のタイトル行(ヘッダー行)を入力していますが、必要ない場合入力しなくてもよいです。
ただし、1行目のデータで出力する列を判断します。
1行目に入力されている最大の列までが、ファイルに出力されます。
また、ファイルに出力される行は、A列に値が入力されている最大行までとなります。
3.VBAでCSVファイルを作成する機能を記入する
「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 55 56 57 58 59 60 61 62 63 64 65 66 |
Public Sub MainProc() Dim shtMain As Worksheet Dim shtData As Worksheet Dim kugiri As String Dim kukuri As String 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 '①「CSVファイル作成」シートを変数に格納する Set shtMain = ThisWorkbook.Sheets("CSVファイル作成") '②「データ」シートを変数に格納する Set shtData = ThisWorkbook.Sheets("データ") '③区切り文字を変数に格納する If shtMain.Range("A2") = "TAB" Then kugiri = vbTab Else kugiri = shtMain.Range("A2") End If '④くくり文字を変数に格納する kukuri = shtMain.Range("B2") '⑤CSVファイルパスを変数に格納する filePath = shtMain.Range("C2") '⑥「データ」シートの最終行を取得する 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 '⑩CSVデータを書き込みする For i = 1 To lastRow line = "" For j = 1 To lastCol line = line & kukuri & varData(i, j) & kukuri If j <> lastCol Then line = line & kugiri End If Next Print #1, line Next '⑪作成するファイルを閉じる Close #1 MsgBox "完了" End Sub |
4.CSVファイルを作成する機能の使い方
それでは、CSVファイルを作成する方法を説明します。
まず、「CSVファイル作成」シートのA2セルに「区切り文字」を入力します。
次に、B2セルに「くくり文字」を入力します。
そして、C2セルに作成するCSVファイルのパスを入力します。
次に、「開発」タブの「マクロ」をクリックします。
先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。
次に、「実行」ボタンをクリックしてCSVファイル作成を開始します。
少し待つと、CSVファイルが作成されます。
それでは、CSVファイルの中身を見てみましょう。
各項目は、「”」でくくられ、「,」で区切られています。
次に、区切り文字を「TAB」、くくり文字をなしを指定して、実行してみます。
TAB区切りで、くくりなしのファイルが作成されました。
どうですか、簡単でしょ。
もっと大量のデータでも、同じく簡単ですのでやってみてください。
5.CSVファイルを作成するVBAプログラムの説明
それでは、VBAプログラムを説明します。
①「CSVファイル作成」シートを変数に格納する
1 2 |
'①「CSVファイル作成」シートを変数に格納する Set shtMain = ThisWorkbook.Sheets("CSVファイル作成") |
そうすることにより、入力するプログラムを短くすることができるからです。
何度も「ThisWorkbook.Sheets(“CSVファイル作成”)」と入力するより、「shtMain」と入力するほうが少なくてすむからです。
②「データ」シートを変数に格納する
1 2 |
'②「データ」シートを変数に格納する Set shtData = ThisWorkbook.Sheets("データ") |
③区切り文字を変数に格納する
1 2 3 4 5 6 |
'③区切り文字を変数に格納する If shtMain.Range("A2") = "TAB" Then kugiri = vbTab Else kugiri = shtMain.Range("A2") End If |
ただし、入力された文字が「TAB」の場合、VBAプログラムのTAB文字を指定しています。
それ以外の文字が入力されている場合、その文字を変数に格納します。
④くくり文字を変数に格納する
1 2 |
'④くくり文字を変数に格納する kukuri = shtMain.Range("B2") |
⑤CSVファイルパスを変数に格納する
1 2 |
'⑤CSVファイルパスを変数に格納する filePath = shtMain.Range("C2") |
⑥「データ」シートの最終行を取得する
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 |
ファイルを開いておかないと、ファイルに値を書き込みできないからです。
⑩CSVデータを書き込みする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'⑩CSVデータを書き込みする For i = 1 To lastRow line = "" For j = 1 To lastCol line = line & kukuri & varData(i, j) & kukuri If j <> lastCol Then line = line & kugiri End If Next Print #1, line Next |
1行目から最終行まで、1行ずつファイルに書き込みします。
1列目から最終列まで、1列ずつ値を取得し、「くくり文字」で値をくくり、「区切り文字」で値同士を区切ります。
最終列のあとは、区切り文字が必要ないので、区切らないようにしています。
1行書き込み(Print)すると、自動的に改行されます。
⑪作成するファイルを閉じる
1 2 |
'⑪作成するファイルを閉じる Close #1 |
出力したいデータを全て出力し終わったので、ファイルを閉じています。
ファイルを閉じる処理を行わないと、ファイルがいつまでも開いたままになりますので、注意してください。
それでは、作成したいデータを「データ」シートに貼り付けして、いろいろなCSVファイルを作成してみましょう。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。