以下のようなCSVファイル(4列あり)を…
列を指定して読み込むことができます!
※例えば「1列目」と「4列目」のみを読み込むことができます。
CSVファイルに「0001」とある場合、
シート上も「0001」となるようにします!
※0が消えて「1」とならないようにします。
読み込む際の文字コードは
・UTF-8
・Shift_JIS
を指定できます!
ただ今回ご紹介する方法では
・読み込み開始セルが必ずセル「A1」から
になります…。
※読み込み開始セルの指定は不可です。
前提
今回ご紹介する「VBAによる列を指定したファイルの読み込み」は、「txt」ファイルでのみできます。「csv」ファイル等ではできません。
※これは本当にイマイチです。
※VBAからPower Query(M言語)を使用すれば、CSVファイル等でもできると思います(未確認)。
※ただVBAからPower Query(M言語)の使用は、難易度が高いと思います(個人的な感想)。
よって読み込む前に「csv」ファイルを一時的に「txt」ファイルへ変更します。
※ファイルの拡張子を変更します。
VBAコード
ここでは例として、
・デスクトップ配下のCSVファイル「employee.csv」の
・1列目「id列」と4列目「section列」のみを
・シート「input」へ
・文字コード「UTF-8」で読み込み
をします。
※2列目「name列」と3列目「sex列」は読み込まないようにします。
Option Explicit
Sub readCsvFile()
Dim sheetName As String
Dim csvFile As String
Dim fso As Object
Dim sheet As Worksheet
'読み込むファイル(CSV)を指定
csvFile = "C:\Users\user\Desktop\employee.csv"
'CSVファイルを読み込むシート名を指定
sheetName = "input"
Set fso = CreateObject("Scripting.FileSystemObject")
'読み込むファイルの拡張子を「csv→txt」へ変更 ※ファイル名の末尾に「txt」を付与する
fso.GetFile(csvFile).name = fso.GetFileName(csvFile) & ".txt"
'作成予定のシートが既に存在する場合は削除
For Each sheet In ThisWorkbook.Worksheets
If sheet.name = sheetName Then
'確認メッセージを非表示
Application.DisplayAlerts = False
'シート削除
Worksheets(sheetName).Delete
'確認メッセージを表示
Application.DisplayAlerts = True
End If
Next
'新規ブックへtxtファイルを読み込み(列指定)
'1列目:2(文字列として読み込み)
'2列目:9(読み込まない)
'3列目:9(読み込まない)
'4列目:2(文字列として読み込み)
Workbooks.OpenText fileName:=fso.GetFile(csvFile & ".txt"), _
Origin:=65001, _
Comma:=True, _
FieldInfo:=Array(Array(1, 2), Array(2, 9), Array(3, 9), Array(4, 2))
'新規ブックの「txtファイルを読み込んだシート」のシート名を変更
Workbooks.item(Workbooks.Count).Sheets(1).name = sheetName
'新規ブックから「txtファイルを読み込んだシート」を移動 ※新規ブックは自動的に閉じる
Workbooks.item(Workbooks.Count).Sheets(1).Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
'読み込むファイルの拡張子を「txt→csv」へ戻す
fso.GetFile(csvFile & ".txt").name = fso.GetFileName(csvFile)
'後片付け
Set fso = Nothing
End Sub
実行結果
列を指定したCSVファイルの読み込みができました。
参考①
シート上の表(一連のセル範囲)をテーブル化することで、
・スタイルの設定
・テーブル化した範囲の名前定義
ができます。
詳細は以下の記事をご確認ください。
参考②
CSVファイル読み込みにより作成された表のデータの並び替え(ソート)もできます。
詳細は以下の記事をご確認ください。
参考③
もちろん普通にCSVファイルを読み込むこともできます。
詳細は以下の記事をご確認ください。
参考④
CSVファイルの読み込み後、不要なデータを削除したほうが良いかもしれません。
オートフィルタを使用して不要なデータを削除できます。
詳細は以下の記事をご確認ください。
参考⑤
シートへ読み込んだデータを、配列へ格納することもできます。
詳細は以下の記事をご確認ください。
参考⑥
上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
●「Workbooks」オブジェクトの「OpenText」メソッド
●「Worksheet」オブジェクトの「Move」メソッド