この記事では、EXCELに入力したデータをダブルコーテーションくくりでCSVファイル出力する方法について説明しています。
ダブルコーテーションくくりのCSVファイルを作成することにより、カンマを使った値でも問題なくCSVファイルを作成することができます。
今回の機能では、出力する範囲をヘッダー行(1行目)の列数で判定するので、途中の行に余計な入力をしていても、問題なく必要な列のみ出力可能となっています。
一度この機能を作成しておけば、次から簡単にダブルコーテーションくくりのCSVファイルを作成できるようになります。
それでは、EXCELで入力したデータをダブルコーテーションくくりで出力する機能を作成していきましょう。
困っている女性
困っている女性
解決する男性
解決する男性
困っている女性
◆EXCELに入力したデータからカンマ区切りのCSVファイルを作成する方法については、以下の記事を参照してください。
【EXCEL:VBA】入力したデータをCSVファイル形式で出力したい
◆入力したデータをタブ区切りで出力する方法については、以下の記事を参照してください。
【EXCEL:VBA】入力したデータをタブ区切りで出力したい
EXCELで入力したデータからダブルコーテーションくくりのCSVファイルを作成する機能に必要なものを、1つ1つ順番に説明していきます。
もくじ
1.作成するファイルパスを指定するシートを作成する
まず、出力するファイルパスを指定する欄を作成します。
「メイン」シートを作成する
- 「メイン」という名前のシートを作成します。
- 1行目に「出力ファイルパス」のタイトル行を作成します。
- 2行目に「出力ファイルパス」を入力する欄を作成します
2.ダブルコーテーションくくりで出力したいデータを準備する
それでは、出力したいデータを準備しましょう。
他のEXCELで作成されているデータなら貼り付けましょう。
「データ」シートを作成する
- 「データ」という名前のシートを作成します。
- あとは、好きなデータを入力もしくは貼り付けします。
2行目のC列「商品名」に、「えんぴつ,ノート」が入力されています。
このデータをそのままCSVファイルを作成すると、2行目は以下のようになります。
2020/6/1,鈴木,えんぴつ,ノート,200,5,1000
3行目は以下のようになります。
2020/6/1,鈴木,ボールペン,100,3,300
2行目は7項目、3行目は6項目となり、他のシステムやEXCELで開くと項目がズレてしまいます。
そのため、ダブルコーテーションで値をくくることにより、項目数が変化することを防ぐことができます。
上記の画像サンプルでは、1行目に項目のタイトル行(ヘッダー行)を入力していますが、必要ない場合入力しなくてもよいです。
ただし、1行目のデータで出力する列を判断します。
1行目に入力されている最大の列までが、ファイルに出力されます。
つまり、上記の画像では、A列からF列までを対象にファイルに出力されます。
また、ファイルに出力される行は、A列に値が入力されている最大行までとなります。
つまり、上記の画像では、A列が入力されていない14行目以降はファイルには出力されません。
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 |
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("データ") '③CSVファイルパスを変数に格納する 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 & "," End If Next Print #1, line Next '⑨作成するファイルを閉じる Close #1 MsgBox "完了" End Sub |
4.ダブルコーテーションくくりでCSVファイル出力する機能の使い方
それでは、ダブルコーテーションくくりのCSVファイルを作成する方法を説明します。
「データ」シートに出力したいデータを入力しておきます。
次に、「メイン」シートのA2セルに「出力ファイルパス」を入力します。
次に、「開発」タブの「マクロ」をクリックします。
先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。
次に、「実行」ボタンをクリックしてファイル作成を開始します。
少し待つと、ファイルが作成されます。
それでは、ダブルコーテーションくくりのCSVファイルの中身を見てみましょう。
各項目は、ダブルコーテーションでくくられて出力されています。
ちなみに、このCSVファイルをEXCELで開いても、問題なく全ての行が6項目として認識されます。
どうですか、簡単でしょ。
もっと大量のデータでも、同じく簡単ですのでやってみてください。
5.ダブルコーテーションくくりのCSVファイルを作成するVBAプログラムの説明
それでは、VBAプログラムを説明します。
①「メイン」シートを変数に格納する
1 2 |
'①「メイン」シートを変数に格納する Set shtMain = ThisWorkbook.Sheets("メイン") |
そうすることにより、入力するプログラムを短くすることができるからです。
何度も「ThisWorkbook.Sheets(“メイン”)」と入力するより、「shtMain」と入力するほうが少なくてすむからです。
②「データ」シートを変数に格納する
1 2 |
'②「データ」シートを変数に格納する Set shtData = ThisWorkbook.Sheets("データ") |
③CSVファイルパスを変数に格納する
1 2 |
'③CSVファイルパスを変数に格納する 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 |
'⑧ダブルコーテーションくくりのデータを書き込みする For i = 1 To lastRow line = "" For j = 1 To lastCol line = line & """" & varData(i, j) & """" If j <> lastCol Then line = line & "," End If Next Print #1, line Next |
ここでは、配列に格納したデータをファイルに書き込みしています。
1行目から最終行まで、1行ずつファイルに書き込みします。
1列目から最終列まで、1列ずつ値を取得し、ダブルコーテーションで値をくくります。
最終列は、区切り文字が必要ないので、区切らないようにしています。
1行書き込み(Print)すると、自動的に改行されます。
⑨作成するファイルを閉じる
1 2 |
'⑨作成するファイルを閉じる Close #1 |
出力したいデータを全て出力し終わったので、ファイルを閉じています。
ファイルを閉じる処理を行わないと、ファイルがいつまでも開いたままになりますので、注意してください。
それでは、作成したいデータを「データ」シートに貼り付けして、ダブルコーテーションくくりのCSVファイルを作成してみましょう。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。