【超簡単】エクセルVBAでCSVファイルを読み込むマクロ

VBAでCSVファイルを読み込むための「汎用CSV読み込みマクロ」を作りました。

CSVファイルを読み込むとき、通常の手順で開こうとすると次のように面倒な場合があります。

  • 「1-2-3」→「2001/2/3」
    「09012345678」→「9012345678」、など内容が変化してしまう
  • 文字化けしてしまう
  • テキストファイルウィザードで、データの形式を「文字列」に直すのが面倒くさい

このページで紹介するマクロを使えば、このようなトラブルが避けられます。

若干、VBAの知識が必要になりますが、少し引数を指定するだけで、ファイルを適切に取り込むことができます。

他のホームページで公開されているマクロとは違い、かなり汎用性が高いプログラムだと思いますので、ぜひ、試してみてください。

 

このページで公開しているマクロでは、下記のような処理に対応しています。

  • 文字列、金額のカンマ区切り、和暦など指定した表示形式で取り込む
  • 不要な列を自動で削除する
  • 文字コードがUTF-8のファイルを取り込む
  • 改行コードが「LF」のファイルを取り込む


ダウンロードして、試しに使ってみる

サンプルファイルのダウンロード

以下の2つのファイルをダウンロードしてください。

この2つのファイルを、手元のPCの同一フォルダに保存してください

ダウンロードしたら、エクセルブック(ReadCSV_Ver0_1.xlsm)を開いてください。

取込例1

エクセルブックを開いた後に、Ctrl+Shift+Zを押すと、シートが1枚挿入され、CSVファイルが取り込まれます。

※クリックすると拡大して表示されます

マクロ内で3列目、9列目を文字列として取り込む(=見た目のまま取り込む)指定をしているため、表示が崩れずに表示されています。

取込例2

Ctrl+Shift+Yを押すと、同じようにシートが1枚挿入されCSVファイルが取り込まれます。

先ほどと同じCSVファイルを取り込んでいるのですが、次のような加工をしています。

  • 元々の4列目~10列目は削除
  • 3列目は文字列、11列目は「yyyy年mm月dd日」形式に設定

CSV取り込みマクロの使い方(初心者向け)

標準モジュール「Sample」に、サンプルのソースコードが2つ入っています。

まずは、サンプルのソースコードを見てみましょう。

そして、必要に応じて引数(下記、着色している部分)を修正してみてください。

取込例1(CSVファイルの場所、文字列で取り込む列を指定する)

Sub 取込例1()
  Dim WS As Worksheet
  Set WS = ReadCSV.ReadCSV(Filepath:=ThisWorkbook.Path & "¥testdata.csv", _
                           TextColumns:="3,9")
End Sub

プロシージャReadCSVを呼び出すことでCSV取り込みができます。
このサンプルでは、引数として、以下の2項目を指定しています。

FilePath 読み込むCSVファイルのファイルパス
ブックと同じフォルダの「testdata.csv」を読み込みます
TextColumns 文字列として読み込む列をカンマ区切りで指定します
今回は、3列目と9列目も文字列型で読み込みます

上記を実行すると、次のようになります。

※クリックすると拡大して表示されます

新規ワークシートにCSVファイルの読み込み結果を出力します。

「Set WS = ... 」と書いておくことで、変数WSを使って、読み込み先のワークシートの操作をすることができます。

取込例2(表示形式・非読み込み列、出力先行・列の指定を行う)

</code>Sub 取込例2()
  Call ReadCSV.ReadCSV(Filepath:=ThisWorkbook.Path & "¥testdata.csv", _
    OutputWorksheet:=Worksheets("取込例2サンプル"), _
    ColumnNumberFormats:=NumberFormatParams(3, "@", 11, "yyyy年mm月dd日"), _
    SkipColumns:="4,5,6,7,8,9,10", _
    OutputColumn:=2, _
    OutputRow:=3)
End Sub

今回は、様々な引数を指定しています。

FilePath 読み込むCSVファイルのファイルパス
ブックと同じフォルダの「testdata.csv」を読み込みます
OutputWorksheet 出力先ワークシート
「取込例2サンプル」シートに出力します
ColumnNumberFormats 列に設定する書式

  • CSVファイルの3列目を「@」(文字列形式)
  • 11列目を「yyyy年mm月dd日」形式

にします

※この引数を指定するときにはNumberFormatParams( ... )の中に、「列」と「適用する表示形式」を交互に記入してください

SkipColumns 読み込まない列の指定
CSVファイルの4列目~10列目は読み込みません
OutputColumn 取り込み結果をワークシートの何列目から表示するかの指定
ワークシートの2列目から表示します
OutputRow 取り込み結果をワークシートの何行目から表示するかの指定
ワークシートの3行目から表示します

上記を実行すると、次のようになります。

CSV読み込みボタンの追加

必要に応じて起動ボタンを追加してみましょう。

起動ボタンを付けるだけならVBAのマクロを修正する必要はありません。

 

たとえば、下記の記事で解説している方法で、

  • 「取込例2サンプル」シートにボタンを追加して
  • 「取込例2」を起動

するように設定すると、ショートカットキーを使わないでもボタンでCSVの取り込みができるようになります。

詳細はこちら→マクロ実行・別シート移動のエクセル「ボタン」の超簡単な作り方

サンプルマクロを改変する(中級者向け)

若干マクロの追加・変更をすると、下記のような用途にも対応できます。

ファイル名を都度入力できるようにする

「取込例1」のマクロを改良して、ファイルを指定できるようにしてみます。

Sub 取込例1()
  Dim Filepath As String
  With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "CSVファイル(*.csv)", "*.csv", 1
    .InitialFileName = ThisWorkbook.Path & "¥"
    .Show
    
    If .SelectedItems.Count = 0 Then
      End
    End If
    
    Filepath = .SelectedItems(1)
  End With

  Dim WS As Worksheet
  Set WS = ReadCSV.ReadCSV(Filepath:=Filepath, TextColumns:="3,9")
End Sub

Ctrl+Shift+Zで実行すると、次のように、ファイルダイアログが表示されます。

既存のブックにCSV読み込みマクロを組み込む(上級者向け)

既存のブックで、このCSV読み込みマクロを使うこともできます。

今回のCSV出力プログラムは、標準モジュール「ReadCSV」の中に作られています。

そこで、標準モジュール「ReadCSV」を、別ブックにドラッグアンドドロップでコピーしてみてください。

これで、他のブックでも「CSV読み込みマクロ」の機能を使えるようになります。

引数・返り値

引数一覧

ReadCSV.ReadCSVでは、次の引数を指定することができます。

(必須項目)
引数名 詳細
Filepath String 読み込むCSVファイルのファイルパスを指定する
(例)C:¥test.csv
(任意項目)
引数名 詳細 省略時
TargetSheet Worksheet CSVデータを読み込みたいシートのWorksheetオブジェクトを指定します

(例)Worksheets("CSV取込")

新規シートが作成されます
TextColumns String 文字列形式で取り込みたい列を指定します

列はCSVファイルで「何列目」かを指定します。複数の列を指定したいときは「,」で区切ります。(※1)

(例1)"1" → 1列目を文字列形式で読み込み
(例2)"1,3" → 1列目と3列目を文字列形式で読み込み

-
SkipColumns String 読み込まない列を指定します

列はCSVファイルで「何列目」かを指定します。複数の列を指定したいときは「,」で区切ります。(※1)

(例1)"1" → 1列目を読み込まない
(例2)"1,3" → 1列目と3列目を読み込まない

-
ColumnNumberFormats Dictionary 各列の詳細な書式を指定します

「Key=列、Value=書式」からなるDictionaryを引数として入れます。

「NumberFormatParams」プロシージャを使うことでDictionaryを自動生成できます。 (※1)

(例)
NumberFormatParams(3, "@", 11, "yyyy年mm月dd日")
 → 3列目を文字列形式、11列目を「yyyy年mm月dd日」形式で取り込む

-
ReadHeader Boolean 1行目を読み込み表示するかどうかを指定します

例)
True:1行目から読み込む
False:2行目以降を読み込む

True
OutputRow Long CSVデータを表示する先頭「行」を指定します 1行目
OutputCol Long CSVデータを表示する先頭「列」を指定します 1列目
Delimiter String 区切り文字を指定します
※区切り文字の長さは1文字しか指定できません

(例)vbTab →タブで区切られます

「,」
Charset String CSVファイルの文字コードを指定します

(例1)"utf-8" → UTF-8(BOM付き)
(例2)"utf-8n" → UTF-8(BOMなし)
(例3)"euc_jp" → euc

自動判定
QuoteChar String 「引用符」を指定します

(例)"'" → 引用符を「'」にします

「"」
LineEndingCode String CSVファイルの改行コードを指定します

(例)vbLF → 改行コードを「LF」にします

自動判定
AutoFit Boolean CSVファイルを表示したときの列幅を自動調整するかどうかを指定します

(例)False → 列幅の自動調整をしない

True
※1 TextColumns、SkipColumns、ColumnNumberFormatsを同時に指定した場合には、次の順序で適用されます。

(最優先)SkipColumns>ColumnNumberFormats>TextColumns

返り値

Worksheetsオブジェクト(=CSVファイルを読み込んだワークシートのオブジェクト)が得られます。

エクセルブック ダウンロード

下記からダウンロードできます。

この2つのファイルを、手元のPCの同一フォルダに保存してください

なお、ご使用は自己責任でお願いいたします。
不具合などがあった場合も、損害について補償は一切できませんので、あらかじめご了承ください。

なお、不具合についてご連絡頂ければ、可能な限り対応いたします。
お問い合わせフォームより、ご連絡ください。

エクセル基礎講座 「無料」動画マニュアル

「経理事務のためのエクセル基礎講座(初級編)」(動画マニュアル 総収録時間162分)を無料プレゼント中です!

このマニュアルで解説していることを一通り学べば、経理事務を行う上で最低限必要となる知識が得られます。

ご登録者の方には、合わせて、公認会計士が実体験を通して身に付けたエクセルを使う技をメールにてお伝えしていきます!

無料動画講座 登録フォーム

※ご登録頂いたメールアドレスに、エクセルを使いこなすための情報を配信するメールセミナー「エクセル倍速講座」も合わせて配信させていただきます。