【EXCEL:VBA】UTF-8形式のCSVファイルを作成したい

UTF-8形式のCSVファイルを作成したい

この記事では、EXCELに入力したデータをUTF-8形式のCSVファイルで出力する方法について説明しています。

 

カンマ区切り以外にも指定した文字で項目を区切ることもできます。

 

タブ区切りのテキストファイルも作成できます。

 

 

また、項目をダブルコーテーションでくくりたい場合、そのくくりたい文字を指定すれば可能となります。(例:”1,230″)

 

しかも、出力する列をヘッダー行(1行目)で判定します。

したがって、好きな列数でCSVファイルの作成が可能となっています。

 

一度この機能を作成しておけば、次から簡単にUTF-8形式でカンマ区切りのCSVファイルやタブ区切りのテキストファイルだって作成できるようになります。

 

 

それでは、EXCELに入力したデータをUTF-8形式のCSVファイルで出力する機能を作成していきましょう。

 

困っている女性

EXCELに入力したデータをUTF-8形式でファイル出力したいの・・・、わかる!?

困っている女性

WEBシステムに取り込みするCSVファイルを作成する必要があるの。

困っている女性

WEBシステムでは、ファイル形式をUTF-8で作成しないと文字化けするの。
それなら、VBAを使えばUTF-8形式のファイルを作成することができるよ。

解決する男性

しかも、ヘッダー行で出力する列を判定しているので、好きな列数のファイルを簡単に作成できる。

解決する男性

困っている女性

それそれ、早く教えてよ。

 

 

EXCELで入力したデータからUTF-8形式のCSVファイルを作成する機能に必要なものを、1つ1つ順番に説明していきます。

1.作成するCSVファイル形式を指定するシートを作成する

まず、「区切り文字」、「くくり文字」、「CSVファイルパス」を指定する欄を作成します。

「CSVファイル作成」シートを作成する

「CSVファイル作成」シートを追加する

「CSVファイル作成」シートを追加する

  1. 「CSVファイル作成」という名前のシートを作成します。
  2. 1行目に「区切り文字」と「くくり文字」および「CSVファイルパス」のタイトル行を作成します。
  3. 2行目に「区切り文字」と「くくり文字」および「CSVファイルパス」を入力する欄を作成します

 

ちなみに、「区切り文字」をタブにしたい場合は、「TAB」と入力すれば、タブ区切りでファイルを作成します。

「TAB」以外の文字が入力されていれば、その入力した文字で区切られたファイルを作成します。

カンマ(,)を指定すれば、以下のようにCSVファイルを作成できます。

aaa,bbb,ccc,ddd

 

「くくり文字」は、入力された文字で項目をくくります。

くくり文字に「”」を入力した場合、以下の形式でファイルが作成されます。

“aaa”,”bbb”,”ccc”,”ddd”

 

また、くくり文字を未入力にした場合、項目をなにもくくらないので、以下の形式になります。

aaa,bbb,ccc,ddd

 

2.CSVファイルとして出力したいデータを準備する

それでは、出力したいデータを準備しましょう。

他のEXCELで作成されているデータなら貼り付けましょう。

「データ」シートを作成する

データシートを準備する

データシートを準備する

  1. 「データ」という名前のシートを作成します。
  2. あとは、好きなデータを入力もしくは貼り付けします。

 

上記の画像サンプルでは、1行目に項目のタイトル行(ヘッダー行)を入力していますが、必要ない場合入力しなくてもよいです。

ただし、1行目のデータで出力する列を判断します。

1行目に入力されている最大の列までが、ファイルに出力されます。

また、ファイルに出力される行は、A列に値が入力されている最大行までとなります。

 

3.VBAでCSVファイルを作成する機能を記入する

「Microsoft Visual Basic for Applications」を起動します。

VBAプログラムを記入する(その1)

VBAプログラムを記入する(その1)

 

VBAプログラムを記入する(その2)

VBAプログラムを記入する(その2)

 

標準モジュールを追加して、以下のソースを書きます。

 

4.UTF-8形式のCSVファイルを作成する機能の使い方

それでは、UTF-8形式のCSVファイルを作成する方法を説明します。

 

まず、「CSVファイル作成」シートのA2セルに「区切り文字」を入力します。

次に、B2セルに「くくり文字」を入力します。

そして、C2セルに作成するCSVファイルのパスを入力します。

 

CSVファイル作成する機能の使い方

CSVファイル作成する機能の使い方

 

次に、「開発」タブの「マクロ」をクリックします。

実行ボタンをクリックする

実行ボタンをクリックする

 

先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。

次に、「実行」ボタンをクリックしてCSVファイル作成を開始します。

 

少し待つと、CSVファイルが作成されます。

CSVファイルが作成された

CSVファイルが作成された

 

それでは、UTF-8形式のCSVファイルの中身を見てみましょう。

各項目は、「”」でくくられ、「,」で区切られています。

作成されたCSVファイルの中身

作成されたCSVファイルの中身

 

次に、区切り文字を「TAB」、くくり文字をなしを指定して、実行してみます。

TAB区切りのくくりなしを指定した場合

TAB区切りのくくりなしを指定した場合

 

UTF-8形式のTAB区切りで、くくりなしのファイルが作成されました。

UTF-8形式のタブ区切りのテキストファイル

UTF-8形式のタブ区切りのテキストファイル

 

どうですか、簡単でしょ。

もっと大量のデータでも、同じく簡単ですのでやってみてください。

 

5.CSVファイルを作成するVBAプログラムの説明

それでは、VBAプログラムを説明します。

①「CSVファイル作成」シートを変数に格納する

ここでは、このあとの処理で何度も使う「CSVファイル作成」シートを変数に格納しています。

そうすることにより、入力するプログラムを短くすることができるからです。

何度も「ThisWorkbook.Sheets(“CSVファイル作成”)」と入力するより、「shtMain」と入力するほうが少なくてすむからです。

 

②「データ」シートを変数に格納する

ここでは、このあとの処理で何度も使う「データ」シートを変数に格納しています。

 

③区切り文字を変数に格納する

ここでは、「CSVファイル作成」シートのA2セルに入力されている「区切り文字」を変数に格納しています。

ただし、入力された文字が「TAB」の場合、VBAプログラムのTAB文字を指定しています。

それ以外の文字が入力されている場合、その文字を変数に格納します。

 

④くくり文字を変数に格納する

ここでは、「CSVファイル作成」シートのB2セルに入力されている「くくり文字」を変数に格納しています。

 

⑤CSVファイルパスを変数に格納する

ここでは、「CSVファイル作成」シートのセルC2に入力されている「CSVファイルパス」を変数に格納しています。

 

⑥「データ」シートの最終行を取得する

ここでは、「データ」シートに入力されているデータの最終行を取得しています。

「データ」シートの1列目(A列)の値が入力されている最終行を取得します。

A列の最終行(シートに入力可能な最終行)から上に向かって、値が入力されている最初の行を探しています。

 

⑦「データ」シートの最終列を取得する

ここでは、「データ」シートに入力されているデータの最終列を取得しています。

「データ」シートの1行目の値が入力されている最終列を取得します。

1行目の最終列(シートに入力可能な最終列)から左に向かって、値が入力されている最初の列を探しています。

 

⑧「データ」シートに入力されているデータを配列に格納する

ここでは、「データ」シートに入力されているデータを配列に格納しています。

先程、取得した最終行と最終列を利用して、データの入力範囲を指定しています。

配列にデータを一気に格納しているのは、高速に処理を行うためです。

1セルずつ値を取得するより、配列から取得するほうが早いからです。

 

⑨Streamオブジェクトを生成する

ここでは、UTF-8形式でファイルを作成するために、「ADODB.Stream」を利用して、Streamオブジェクトを生成しています。

 

⑩ファイルタイプにテキスト形式を指定する

ここでは、作成するファイルタイプにテキスト形式を指定しています。

また、1を指定した場合、バイナリーファイル形式になります。

 

⑪文字コードにUTF-8を指定する

ここでは、作成ファイルの文字コードにUTF-8を指定しています。

 

⑫Streamオブジェクトを開く

ここでは、作成ファイルに文字列を出力するために、Streamオブジェクトを開いています。

 

⑬CSVデータを書き込みする

ここでは、「データ」シートに入力されたデータを1行ずつ、line変数に格納しています。

line変数に格納した文字列をStreamオブジェクトに渡して、書き込みしています。

Streamオブジェクトに渡す2つ目の値として、1を指定してします。

1を指定すると、改行文字を付加してくれます。

つまり、1行ずつ改行するようにStreamオブジェクトに指示しています。

 

⑭CSVデータを指定したファイルに保存する

ここでは、Streamオブジェクトに指定したファイルパスで、ファイルを作成するように指示しています。

Streamオブジェクトに渡す2つ目の値として、2を指定しています。

この2は、ファイルが存在しなければ作成し、ファイルがすでに存在すれば上書き保存するように指示しています。

1を指定した場合は、ファイルが存在しなければ作成し、ファイルがすでに存在すればエラーとなり上書き保存しないように指示することになります。

 

⑮Streamオブジェクトを閉じる

ここでは、Streamオブジェクトを閉じています。

使い終わったStreamオブジェクトは閉じるようにしましょう。

 

⑯Streamオブジェクトを解放する

ここでは、使い終わったStreamオブジェクトのメモリを解放しています。

 

 

それでは、好きなデータを「データ」シートに貼り付けして、UTF-8形式のファイルを作成してみましょう。

 

以上です。

 

 

最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です