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 | 列に設定する書式
にします ※この引数を指定するときには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 |
|
(任意項目) | |||
引数名 | 型 | 詳細 | 省略時 |
OutputWorksheet | Worksheet | CSVデータを読み込みたいシートのWorksheetオブジェクトを指定します
(例)Worksheets("CSV取込") |
新規シートが作成されます |
TextColumns | String | 文字列形式で取り込みたい列を指定します
列はCSVファイルで「何列目」かを指定します。複数の列を指定したいときは「,」で区切ります。(※1) (例1)"1" → 1列目を文字列形式で読み込み |
- |
SkipColumns | String | 読み込まない列を指定します
列はCSVファイルで「何列目」かを指定します。複数の列を指定したいときは「,」で区切ります。(※1) (例1)"1" → 1列目を読み込まない |
- |
ColumnNumberFormats | Dictionary | 各列の詳細な書式を指定します
「Key=列、Value=書式」からなるDictionaryを引数として入れます。 「NumberFormatParams」プロシージャを使うことでDictionaryを自動生成できます。 (※1) (例) |
- |
ReadHeader | Boolean | 1行目を読み込み表示するかどうかを指定します
例) |
True |
OutputRow | Long | CSVデータを表示する先頭「行」を指定します | 1行目 |
OutputCol | Long | CSVデータを表示する先頭「列」を指定します | 1列目 |
Delimiter | String | 区切り文字を指定します ※区切り文字の長さは1文字しか指定できません (例)vbTab →タブで区切られます |
「,」 |
Charset | String | CSVファイルの文字コードを指定します
(例1)"utf-8" → UTF-8(BOM付き) |
自動判定 |
QuoteChar | String | 「引用符」を指定します
(例)"'" → 引用符を「'」にします |
「"」 |
LineEndingCode | String | CSVファイルの改行コードを指定します
(例)vbLF → 改行コードを「LF」にします |
自動判定 |
AutoFit | Boolean | CSVファイルを表示したときの列幅を自動調整するかどうかを指定します
(例)False → 列幅の自動調整をしない |
True |
※1 | TextColumns、SkipColumns、ColumnNumberFormatsを同時に指定した場合には、次の順序で適用されます。
(最優先)SkipColumns>ColumnNumberFormats>TextColumns |
返り値
Worksheetsオブジェクト(=CSVファイルを読み込んだワークシートのオブジェクト)が得られます。
エクセルブック ダウンロード
下記からダウンロードできます。
この2つのファイルを、手元のPCの同一フォルダに保存してください。
なお、ご使用は自己責任でお願いいたします。
不具合などがあった場合も、損害について補償は一切できませんので、あらかじめご了承ください。
なお、不具合についてご連絡頂ければ、可能な限り対応いたします。
お問い合わせフォームより、ご連絡ください。