【ExcelVBA】CSVファイルの読み込み
目次
1行ごとに読み込み
下記の例ではカンマを区切り文字としているため「\1,000」の様なカンマが含まれた文字列が存在する場合は、列を正しく分割できません。
この問題点を回避したい場合は「2.シートにインポート」を使用してください。
CR+LF改行コードの場合
カンマ区切りのCSVファイルを1行目から1行ずつ読み込み
Sub Sample()
Dim Buf As String
Dim tmp As Variant
Open "E:\dummy.csv" For Input As #1
Do Until EOF(1)
Line Input #1, Buf
tmp = Split(Buf, ",")
Debug.Print tmp(0), tmp(1)
Loop
Close #1
End Sub
※10行目では Split で文字列を分割しtmp配列に格納。tmp(0) は1列目、tmp(1)は2列目の内容カンマ区切りのCSVファイルを2行目から1行ずつ読み込み(1行目にあるヘッダー行が不要なときにどうぞ)
Sub Sample()
Dim Buf As String
Dim tmp As Variant
Open "E:\dummy.csv" For Input As #1
Line Input #1, Buf '1行目を無駄に読み込む
Do Until EOF(1)
Line Input #1, Buf
tmp = Split(Buf, ",")
Debug.Print tmp(0), tmp(1)
Loop
Close #1
End Sub
LF改行コードの場合
Sub Sample2()
Dim buf As String
Dim tmp As Variant, tmp2 As Variant
Dim i As Long
Open "E:\dummy.csv" For Input As #1
Line Input #1, buf
Close #1
tmp = Split(buf, vbLf)
For i = 0 To UBound(tmp) - 1
tmp2 = Split(tmp(i), ",")
Debug.Print tmp2(0), tmp2(1)
Next i
End Sub
※10行目のtmpは配列です。tmp(0),tmp(1),tmp(2),...の各要素には、行末まので1行分がそれぞれ納まります。※13行目で1行分をカンマ区切りで分割します。
シートにインポート
QueryTables.Addメソッドを使う
Sub Sample()
Dim FullPath As String
FullPath = "E:\dummy.csv"
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" + FullPath, Destination:=Range("$A$1"))
.Name = "TestTable" '外部データ範囲の名前
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False 'クエリが更新されるたびにインポートするテキストファイル名を指定する
.TextFilePlatform = 932 ’932(SJIS),UTF-8(65001)
.TextFileStartRow = 1 '読み込みの開始行
.TextFileParseType = xlDelimited '区切り文字(xlDelimited),固定長(xlFixedWidth)
.TextFileTextQualifier = xlTextQualifierDoubleQuote '二重引用符(xlTextQualifierDoubleQuote),引用符なし(xlTextQualifierNone),一重引用符(xlTextQualifierSingleQuote)
.TextFileConsecutiveDelimiter = False '連続する区切り文字を1つの区切り文字として扱う
.TextFileTabDelimiter = False 'Tabが区切り文字
.TextFileSemicolonDelimiter = False 'セミコロンが区切り文字
.TextFileCommaDelimiter = True 'カンマが区切り文字
.TextFileSpaceDelimiter = False '空白が区切り文字
.TextFileColumnDataTypes = Array(1, 1, 1, 1) 'フィールドのデータ型(左記のサンプルは4列全部既定値)
.TextFileTrailingMinusNumbers = True 'マイナス記号で始まれば、負符号として扱う(True):テキストとして扱う(False)
.Refresh BackgroundQuery:=False 'クエリをバックグラウンド (非同期) で実行
.Refresh
End With
End Sub
※QueryTables.Addは、既存ブックのシートに書き込みされます。OpenTextメソッドを使う
Sub Sample() Dim FullPath As String FullPath = "E:\dummy.csv" Workbooks.OpenText _ Filename:=FullPath _ , Origin:=932 _ , StartRow:=1 _ , DataType:=xlDelimited _ , TextQualifier:=xlDoubleQuote _ , ConsecutiveDelimiter:=False _ , Tab:=False _ , Semicolon:=False _ , Comma:=True _ , Space:=False _ , Other:=False _ , TrailingMinusNumbers:=True End Sub※OpenTextは、必ず新規ブックのシートに書き込みされます。




ディスカッション
コメント一覧
まだ、コメントがありません