【EXCEL:VBA】CSVファイルを取り込みたい

CSVファイルを取込したい

この記事では、EXCELにCSVファイルを取込する方法について説明しています。

 

カンマ区切りで作成されたCSVファイルの各項目のデータ形式を指定さえすれば、取込できます。

 

データ形式は、日付・文字・整数・小数から選択するだけです。

 

一度この機能を作成しておけば、次から簡単にCSVファイルを取込できるようになります。

 

 

それでは、EXCELにCSVファイルを取込する機能を作成していきましょう。

 

困っている女性

他のシステムで作成したCSVファイルをEXCELに取込したいの・・・。

困っている女性

EXCELの「外部データ取り込み」機能を使えば、取込できるけど、設定が難しくてよくわからないの。
それなら、VBAを使えば各項目のデータ形式を指定して、簡単にCSVファイルを取込することができるよ。

解決する男性

困っている女性

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

 

似たような機能で、EXCELに入力したデータをCSVファイルで出力する機能については、以下の記事を参照してください。

入力したデータをCSVファイル形式で出力したい 【EXCEL:VBA】入力したデータをCSVファイル形式で出力したい

 

◆似たような作業で、指定されたフォルダに存在するすべてのCSVファイルを一気に取り込みする方法については、以下の記事を参照してください。

フォルダに存在するCSVファイルを全て取り込みたい 【EXCEL:VBA】フォルダに存在するCSVファイルを全て取り込みたい

 

CSVファイルを取込する機能に必要なものを、1つ1つ順番に説明していきます。

1.取込するCSVファイルのデータ形式を指定するシートを作成する

まず、「取込ファイルパス」、「取込データ形式」を指定する欄を作成します。

「CSV取込」シートを作成する

CSV取込シートを作成する

CSV取込シートを作成する

  1. 「CSV取込」という名前のシートを作成します。
  2. 1行目に「取込ファイルパス」のタイトル行を作成します。
  3. 2行目に「取込ファイルパス」を入力する欄を作成します。
  4. 3行目に「取込データ形式(日付、文字、整数、小数)」のタイトル行を作成します。
  5. 4行目に「列No」、「データ形式」のタイトル行を作成します。
  6. 5行目以降は、「列No」と「データ形式」を入力する欄になります。

 

「列No」が入力されている行までが、取込データ形式が設定されている行と見なします。

「データ形式」は、日付・文字・整数・小数を入力します。
取込するCSVファイルの各項目のデータ形式を指定します。

 

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

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

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

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

データシートを作成する

データシートを作成する

  1. 「データ」という名前のシートを作成します。
  2. 中身は特に入力しないでよいです。

 

このシートは、CSVファイルの中身が書込みされます。

 

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

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

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

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

 

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

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

 

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

 

4.CSVファイルを取込する機能の使い方

それでは、CSVファイルを取込する方法を説明します。

取込するCSVファイルを準備する

まず、取込するCSVファイルを準備します。

取込するCSVファイル

取込するCSVファイル

 

取込するCSVファイルの中身は、以下のようにカンマ区切りになっています。

取込するCSVファイルの中身

取込するCSVファイルの中身

 

取込するCSVファイルの「ファイルパス」と「取込データ形式」を入力する

まず、「CSV取込」シートのA2セルに取込するCSVファイルのパスを入力します。

次に、取込するCSVファイルの各項目のデータ形式をA5セルから入力します。

取込するCSVファイルの設定

取込するCSVファイルの設定

今回用意したCSVファイルのサンプルは、以下のようになっているので、上の図のようにデータ形式を入力しています。

  1. 日付  ⇒日付
  2. 担当者 ⇒文字
  3. 商品名 ⇒文字
  4. 単価  ⇒整数
  5. 数量  ⇒整数
  6. 金額  ⇒整数

もし、123.45みたいな小数を含むデータの場合は、データ形式を「小数」を指定してください。

 

マクロを実行する

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

マクロボタンを押す

マクロボタンを押す

 

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

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

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

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

 

少し待つと、CSVファイルの取込が完了します。

取込が完了すると、「データ」シートにCSVファイルの中身が書込みされます。

CSVファイルの取込が完了

CSVファイルの取込が完了

 

間違いなく「データ形式」を指定していれば、「データ」シートに正しくデータが書込みされます。

 

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

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

 

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

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

①「CSV取込」シートを変数に格納する

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

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

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

 

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

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

 

③取込ファイルパスを変数に格納する

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

 

④取込データ形式の最終行を取得する

ここでは、「CSV取込」シートの5行目以降に入力されている「データ形式」の最終行を取得しています。

A列の値が入力されている最終行を探しています。

 

⑤データ形式を配列に格納する

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

 

⑥最大列数を取得する

ここでは、入力された「データ形式」の最大列数を取得しています。

 

⑦行番号を初期化する

ここでは、これからCSVファイルを取込するにあたり、行番号を0に初期化しています。

この変数は、いま何行目を取込しているかを判断するのに利用します。

 

⑧取込ファイルを開く

ここでは、指定されているCSVファイルを開いています。

CSVファイルの中身を取り込みするには、まずファイルを開かないといけないからです。

 

⑨取込ファイルの最終行まで読込みを繰り返す

ここでは、取込ファイルの最終行まで読込みを繰り返しています。

最終行に到達すると、処理を終わらせます。

 

⑩行番号をカウントアップする

ここでは、現在読込しようとしている行に合わせて、変数をカウントアップしています。

こうすることにより、現在何行目を読み込んでいるか判断できるようになるからです。

 

⑪1行読込み、変数に格納する

ここでは、CSVファイルの1行を読込み、変数「buf」に格納しています。

 

⑫カンマで区切って、配列に格納する

ここでは、先程1行分を格納したデータを、カンマで区切って配列に格納しています。

 

⑬読込した1行分を1項目ずつシートに書込みする

ここでは、1行分のデータを格納した配列の1項目ずつを、「CSV取込」シートに設定されているデータ形式に従って、データ形式を変換しています。

データ形式に「日付」を指定している場合、日付か確認してから、日付型に変換し変数「tmp」に格納します。

日付でない場合は、取込したままの形式で変数「tmp」に格納します。

 

データ形式に「整数」を指定している場合、数値か確認してから、整数型に変換し変数「tmp」に格納します。

数値でない場合は、取込したままの形式で変数「tmp」に格納します。

 

データ形式に「小数」を指定している場合、数値か確認してから、小数型に変換し変数「tmp」に格納します。

数値でない場合は、取込したままの形式で変数「tmp」に格納します。

 

データ形式に「日付」、「整数」、「小数」以外が指定されている場合、取込したままの形式で変数「tmp」に格納します。

「文字」を指定されている場合も同様です。

 

そして、変数「tmp」を「データ」シートに書込みしています。

 

⑭ファイルを閉じる

ここでは、CSVファイルを閉じています。

 

それでは、お好きなCSVファイルを指定して、EXCELに取込してみましょう。

 

以上です。

 

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

 

コメントを残す

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