- ベストアンサー
ファイル取り込みが・・・
VBA初心者です。 いくつかのcsvファイルを開いてシートに、そのデータを取込んで使いたいのですが どの様に記述したらよいのかアドバイスください。 csvの中身は、全て同じ並びのデータで日付、時間でできているファイルです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
この質問は回答者にすべてコードを書かせるタイプで、この課題は丸投げです。 VBA初心者ですというが、VBAでも上級の課題ではないでしょうか。 マクロの記録で、ある程度のコードは出るのですから、それで色々変えてトライして見て質問してください。 ーー エクセルで ファイルー開くーcsvファイル と データー外部データの取り込み と2つありますが、校舎が適当でしょう。 読み込む位置(セル)が指定できる 各列の書式が設定できる、という理由から。 ーー 別法 下記のほかに、Csvファイルから1行づつLine Inputで読んで、 カンマでSplitし、各列に代入するロジックもあります。 ーーー コード Sub Macro1() Dim fn(10) Dim dt(10) fn(1) = "test01": dt(1) = Array(5, 2, 1) fn(2) = "test02": dt(2) = Array(2, 2, 1, 1) fn(3) = "test03": dt(3) = Array(2, 1, 1, 1) For i = 1 To 3 d = Range("a65536").End(xlUp).Row With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\Documents and Settings\xxxx\My Documents\" & fn(i) & ".csv", Destination:= _ Range("A" & d + 1)) .Name = fn(i) .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = dt(i) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With Next i End Sub マクロの記録の結果を使っていますが、 ファイルの数だけ繰り返さないといけませんが、そのとき各回で 変える場所は 繰り返しの回数 (ファイル数) For i = 1 To 3の3 ファイル名と.Name 開始セル (順順に最終行の次を指す) TextFileColumnDataTypes の5点です。 上記では3つのファイル名を配列にセットして、利用してます。 多い場合はその数だけ、ファイル名を配列の値として増やしてください。Dim fn(10)の10にも注意。 ーー TextFileColumnDataTypes の設定はdt(i)で定義してますが、 >全て同じ並びのデータで日付、時間でできているフ・・ なら同じでよいです。 上例は3つのファイルで、ばらばらのフォーマットを読み込む例のコードです。 ()中の数字は、1は数字、2は文字列、3以上のコードは、5(YMD)などは操作のウイザード(3/3)で出てくる日付の書式的種類を指定するコードです。