【Excel VBA】Excel VBAからCSVファイルを読み込む - 変換.tokyo | henkan.tokyo

【Excel VBA】Excel VBAからCSVファイルを読み込む

 
■【Excel VBA】Excel VBAからCSVファイルを読み込む

Excel VBAからCSVファイルを取り込む機会は多いと思いますが、CSVファイルの開き方や読み込み方にもいろいろあり、また読み込む速度も大きく異なる場合があります。

今回は、(1)定番の読み込み方、(2)改行された値を含むCSVの読み込み方、の2つをご紹介します♪

まずは(1)定番の読み込み方から。こちらは、

Webサイト「Excel VBAを使ったCSVファイル読み込み時の高速化、タブ区切り対応、ダブルクォーテーション削除のコツ」
http://www.atmarkit.co.jp/ait/articles/1706/16/news032.html

を参考に作成しました。


【サンプルコード@ 定番】

Sub CSVファイルの読み込み()
Dim fso As New Scripting.FileSystemObject
Dim csvFile As Object
Dim csvData As String
Dim splitcsvData As Variant
Dim i As Integer
Dim j As Integer

'OpenTextFileメソッドでCSVデータを、読み込み専用で開く
Set csvFile = fso.OpenTextFile("C:\test\test.csv", 1)
i = 1

'変数iを1で初期化しておき、AtEndOfStreamプロパティを使うことでファイルの最後の行に達するまで、処理を繰り返す
Do While csvFile.AtEndOfStream = False
'ReadLineメソッドで読み込んだCSVファイルの1行を読み込む
csvData = csvFile.ReadLine

'Split関数でカンマ(,)で区切られた各文字列を(1次元)配列として返し、変数splitcsvDataに格納する
splitcsvData = Split(csvData, ",")

'UBound関数を使い配列の要素の数を調べ、変数jに格納する。+1しているのは配列の添え字が0から開始されるため
j = UBound(splitcsvData) + 1

'Sheet2のi行目の1列目からi行目のj列目までの範囲に、読み込んだCSVデータを表示する
Sheet2.Range(Sheet2.Cells(i, 1), Sheet2.Cells(i, j)).Value = splitcsvData
i = i + 1
Loop

csvFile.Close
Set csvFile = Nothing
Set fso = Nothing

End Sub


続いて、(2)改行された値を含むCSVを読み込む場合です。

CSVファイルを読み込むVBAを簡単に作成するには【サンプルコード@ 定番】のような形を取ることが多いですが、この作り方の場合、動きとしてはテキストファイルを1行ずつ読み込んでいくようなイメージになります。
この場合、例えば値の中に改行コードを含むようなCSV(ex. Excelのセルの中でAlt+Enterキーで改行したような値を含む etc.)を読み込んでしまうと...ご想像の通り、1レコードの途中で改行されてしまい、正しくCSVファイルを読み込めなくなります。

そんなCSVを読み込む時には...
非常にシンプルな考え方ですが、CSVファイルを開いて、その内容をExcelシートにコピーする、という方法もあります。
こちらは、

Webサイト「マクロ(Excel VBA)で CSV ファイルを開いてシートの中に取り込む方法」
https://my-tax-nology.com/import-csv-data-to-excel-by-using-excel-vba

を参考に作成しました。

VBA_Read_csv.png


【サンプルコードA 改行された値を含むCSVの読み込み】

Sub Csv_Import()

Dim A_Sheet 'Excelファイルのシート名を入れ込む変数'
Dim Csv_Import_File 'Excelファイルに取り込むCSVファイルの名前を入れ込む変数'

'現在アクティブなシート名を変数 A_Sheet に入れ込む
A_Sheet = ActiveSheet.Name
'CSVファイルを選択する
Csv_Import_File = Application.GetOpenFilename("CSVファイル,*.csv")
If Csv_Import_File = "False" Then Exit Sub 'キャンセルなら終了

'「CSVデータ取込み」シートのセル「A1〜ZZ100000」をクリアする
ThisWorkbook.Sheets("CSVデータ取込み").Range("A1:ZZ100000").ClearContents

With Workbooks.Open(Csv_Import_File)
'全てのデータをこのブックの「CSVデータ取込み」シートにコピー
.Sheets(1).Cells.Copy ThisWorkbook.Sheets("CSVデータ取込み").Range("A1")
.Close 'CSVファイルを閉じる'
End With

'A_Sheet という名前のシートをアクティブにする'
Worksheets(A_Sheet).Activate

End Sub


■サンプルVBAダウンロード
こちらから


■VBA開発に参考となる図書

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

入門者のExcel VBA 初めての人にベストな学び方 (ブルーバックス) [ 立山秀利 ]
価格:1058円(税込、送料無料) (2018/10/1時点)

楽天で購入

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

たった1日で即戦力になるExcelの教科書 [ 吉田拳 ]
価格:1922円(税込、送料無料) (2018/10/1時点)

楽天で購入


by カエレバ
by カエレバ
by カエレバ
by カエレバ
by カエレバ
by カエレバ