CSVを取り込む その2
Dim FileN
Dim shTHIS As Worksheet
Dim tmp
Dim strBuf
Dim clm
'取り込むファイルをダイアログで選択、キャンセルで中断
FileN = Application.GetOpenFilename("CSVファイル,*.csv")
If FileN = False Then Exit Sub
'取り込み先のシートを指定
Set shTHIS = ThisWorkbook.Worksheets("シート名")
shTHIS.Cells.Clear
'対象ファイルのフィールド数を特定する
Open FileN For Input As #1
Line Input #1, strBuf
tmp = Split(strBuf, ",")
ReDim clm(UBound(tmp))
For i = 0 To UBound(tmp)
clm(i) = 2
Next i
Close #1
'外部データ取込機能で取り込む、貼り付け位置はDestinationで指定
With shTHIS.QueryTables.Add(Connection:="TEXT;" & FileN, Destination:=shTHIS.Range("$A$1"))
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.TextFileColumnDataTypes = clm
.AdjustColumnWidth = False
.RefreshStyle = xlOverwriteCells
.Refresh
.Delete
End With
Open For Inputだと引用符(")の扱いで難しいのでQuertTablesで取り込むコード。
Excelの外部データ取り込み機能が基。
数値の自動変換対策に全て文字列とする。取り込む列全てに配列で指定しなければいけないので、汎用性を考えOpen For Inputで一行目だけ抜き取り列数を取得している。
↓以下説明とか
VBA CSV ファイルの読み込み (QueryTables.Add 関数を使う)
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
.Name = "" 'クエリとしてのテーブル名
.CommandType = 0
.FieldNames = True