VBAを使用してCSVファイルを読み込むための方法を説明します。
Workbooks.OpenTextを使う方法
この方法は、CSVファイルを直接開く際に使用します。
サンプルのcsvデータを用意します。以下のデータを「file.csv」として任意のフォルダに保存します。保存にはUTF-8(BOM付き)で保存してください。
名前,年齢,性別,職業,国籍
山田太郎,30,男,エンジニア,日本
佐藤花子,25,女,デザイナー,日本
参考次郎,20,男,タレント,日本
ジョンスミス,40,男,警察官,アメリカ
メモ帳などで保存するときにエンコードをUTF-8(BOM付き)に指定して保存します。
次にこのコードのファイルパスをcsvが保存しているフォルダに変更します。
Sub ImportCSV()
Dim filePath As String
filePath = "C:\path\to\your\file.csv" ' CSVファイルのパスを指定してください
Workbooks.OpenText Filename:=filePath, Origin:=65001, DataType:=xlDelimited, Comma:=True
End Sub
UTF-8エンコーディングのCSVファイルを読み込む場合は、Workbooks.OpenTextメソッドのOriginパラメータに適切な値を設定する必要があります。65001はUTF-8エンコーディングを表します
ファイルシステムオブジェクト (FileSystemObject) を使う方法
この方法は、より柔軟にCSVファイルを読み込むことができ、セルに手動でデータを挿入することが可能です。
FSOのcsv読み込みの注意点
エンコーディングの対応の引数のformat
object.OpenTextFile (filename, [ iomode, [ create, [ format ]]])
このformatがUnicode 形式とAscii 形式とシステムの既定の設定でファイルを開くことしかできません。日本語のUTF-8にすると文字化けになります。
メモ帳などで保存するときにエンコードをANSIに指定して保存します。昔ははShift_JISというのがありましたがANSIに置き換わりました。
コードを実行する為には「Microsoft Scripting Runtime」のライブラリが必要になります。
VBAエディタで「ツール」→「参照設定」から「Microsoft Scripting Runtime」にチェックを入れてください。
FSOのコードは以下になります
Sub ImportCSV_ANSI()
Dim fso As Scripting.FileSystemObject
Dim ts As Scripting.TextStream
Dim filePath As String
Dim textLine As String
Dim rowNum As Long
Dim colNum As Long
Dim cellData As Variant
Dim lineData() As String
' ファイルパスを設定
filePath = "C:\path\to\your\file.csv"
' FSOを使ってファイルを開く
Set fso = New Scripting.FileSystemObject
Set ts = fso.OpenTextFile(filePath, ForReading, False, TristateFalse) ' TristateFalseはANSIを指定
' シートをクリア
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Cells.Clear
rowNum = 1
' ファイルを読み込む
Do While Not ts.AtEndOfStream
textLine = ts.ReadLine
lineData = Split(textLine, ",")
colNum = 1
For Each cellData In lineData
ws.Cells(rowNum, colNum).Value = cellData
colNum = colNum + 1
Next cellData
rowNum = rowNum + 1
Loop
' ファイルを閉じる
ts.Close
Set ts = Nothing
Set fso = Nothing
End Sub
「FileSystemObject(FSO)」を作成し、テキストファイルをANSIとして開きます。「TristateFalse」はANSIエンコーディングを指定します。
ファイルを1行ずつ読み込み、カンマで区切られたデータをセルに書き込みます。
このコードを実行することで、ANSIエンコーディングのCSVファイルを正しく読み込み、シートにデータを表示することができます。