
※当記事で使用しているデータは全て架空のサンプルデータです
目次
CSVファイル読み込み
CSVのファイルを読み込むにはOpenメソッドを使用することが一般的です。
Openメソッドは使用方法は下記のとおりです。

下記のサンプルコードはCSVのファイルパスを指定してCSVのデータをエクセルに取り込んでいます。
サンプルコード
Sub CSV取り込み()
Dim ImportWS As Worksheet
Dim CSV_Path As String
Dim FileNumber As Long
Dim LineData As String
Dim CSV_Arr As Variant
Dim CntRow As Long
'CSVを取り込むシートを指定する
Set ImportWS = Worksheets("CSV")
With ImportWS
'ワークシート内のセルから取り込むCSVのパスを取得する
CSV_Path = "C:\Users\○○\Desktop\SAMPLE.csv"
'ファイル番号の取得
FileNumber = FreeFile
'CSVファイルをオープン
Open CSV_Path For Input As FileNumber
'最初に記入する行番号を指定
CntRow = 1
'ファイルの内容を1行ずつ読み込む
Do While Not EOF(FileNumber)
Line Input #FileNumber, LineData
'読み込んだデータを配列に変換
CSV_Arr = Split(LineData, ",")
'セルに記入
.Range(.Cells(CntRow, "A"), .Cells(CntRow, UBound(CSV_Arr) + 1)).Value = CSV_Arr
CntRow = CntRow + 1
Loop
' ファイルを閉じる
Close FileNumber
End With
MsgBox "CSVの取り込みが完了しました"
End Sub
実行結果
CSVファイルをエクセルファイルに読み込むことが出来ました。
エクセルから転記を行うときと同様に、WorkBooks.Open(CSVのファイルパス)として読み込むことも出来ますが、上記の方法で読み込みを行うと、より高速に読み込みを行うことができます。

文字化け対策
読み込むCSVによっては文字コードが『UTF-8』になっている場合は、上記の方法でエクセルに取り込むと下記のように文字化けを起こしてしまいます。

対策としては文字コードがUTF-8の場合は、文字コードを指定してCSVファイルの読み込みを行います。
※注意
下記のコードはAsc関数を使用し特殊文字が含まれていないかどうかで判断しているため、場合によっては正しく判断できない場合もあります。
ツールを作成する場合は、どの文字コードのCSVファイルを使用するかをあらかじめ決めておくことをお勧めいたします。
サンプルコード
Sub CSV取り込み()
Dim ImportWS As Worksheet
Dim CSV_Path As String
Dim BoolUTF_8 As Boolean
Dim FileNumber As Long
Dim LineData As String
Dim FileContent As String
Dim LineArr As Variant
Dim CSV_Arr As Variant
Dim CntRow As Long
Dim stream As Object
Dim LoopArr As Long
'CSVを取り込むシートを指定する
Set ImportWS = Worksheets("CSV")
With ImportWS
'ワークシート内のセルから取り込むCSVのパスを取得する
CSV_Path = "C:\Users\○○\Desktop\SAMPLE_UTF-8.csv"
'下記で作成した関数(BoolEncode)で文字コードがUTF-8かそれ以外かを判断する
BoolUTF_8 = BoolEncode(CSV_Path)
'文字コードがUTF-8の場合は文字コードを指定して読み込みを行う
If BoolUTF_8 Then
'ADODB.Streamオブジェクトを作成する
Set stream = CreateObject("ADODB.Stream")
'ストリームの設定
stream.Type = 2 'テキストモード
stream.Charset = "UTF-8" '文字エンコーディングをUTF-8に設定
stream.Open
'ファイルをストリームに読み込む
stream.LoadFromFile CSV_Path
'ファイルの内容を文字列として取得
FileContent = stream.ReadText
'ストリームを閉じる
stream.Close
'上記で読み込んだCSVのデータを改行ごとに配列に格納
LineArr = Split(FileContent, vbCrLf)
'最初に記入する行番号を指定
CntRow = 1
'CSVデータを1行ずつ繰り返す
For LoopArr = LBound(LineArr) To UBound(LineArr)
Debug.Print LineArr(LoopArr)
'カンマ(,)区切りで配列に格納する
CSV_Arr = Split(LineArr(LoopArr), ",")
'セルに記入する
.Range(.Cells(CntRow, "A"), .Cells(CntRow, UBound(CSV_Arr) + 1)).Value = CSV_Arr
CntRow = CntRow + 1
Next LoopArr
'最初に記入する行番号を指定
CntRow = 1
'リソースの解除
Set stream = Nothing
'それ以外は上記の「CSVファイル読み込み」で説明した通りの処理を行う
Else
'ファイル番号の取得
FileNumber = FreeFile
'CSVファイルをオープン
Open CSV_Path For Input As FileNumber
'最初に記入する行番号を指定
CntRow = 1
'ファイルの内容を1行ずつ読み込む
Do While Not EOF(FileNumber)
Line Input #FileNumber, LineData
'読み込んだデータを配列に変換
CSV_Arr = Split(LineData, ",")
'セルに記入
.Range(.Cells(CntRow, "A"), .Cells(CntRow, UBound(CSV_Arr) + 1)).Value = CSV_Arr
CntRow = CntRow + 1
Loop
' ファイルを閉じる
Close FileNumber
End If
End With
MsgBox "CSVの取り込みが完了しました"
End Sub
'読み込まれるCSVファイルの文字コードがUTF-8かどうかを判断する関数(UTF-8の場合はTrue,それ以外はFalse)
Private Function BoolEncode(arg_csv_path As String) As Boolean
BoolEncode = False
Dim FileNumber As Long
Dim textLine As String
Dim byteCount As Long
Dim i As Long
'ファイル番号の取得
FileNumber = FreeFile
'CSVファイルをオープン
Open arg_csv_path For Input As FileNumber
'ファイルの最後までループ
Do While Not EOF(FileNumber)
'1行ずつ読み込む
Line Input #FileNumber, textLine
'各行の文字をチェックする
For i = 1 To Len(textLine)
'文字コードが127より大きい場合、ANSIではない可能性がある
If Asc(Mid(textLine, i, 1)) > 127 Then
BoolEncode = True
Exit Do '1つでも見つかったらループを終了
End If
Next i
Loop
' ファイルを閉じる
Close FileNumber
End Function
実行結果
上記の判断を行うことで文字化けせずに読み込みが行えました。

CSVを読み込む場合は、指定したファイルが本当に存在するかを確認する処理を入れることをお勧めします。 ファイルの存在確認を行う場合は、こちらの記事をご参考ください。