【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は、必ず新規ブックのシートに書き込みされます。
ディスカッション
コメント一覧
まだ、コメントがありません