- 締切済み
EXCELで外部取込の自動化
教えて下さい。 カンマ、ダブルコーテーションで区切っていないデータを拡張子CSVでもらっています。それで、毎回、EXCELで外部取込からテキストファイルウィザードで決められた位置に区切り位置を指定しています。これが結構大変な作業で、自動にすることは出来ないものかと悩んでいます
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ham_kamo
- ベストアンサー率55% (659/1197)
コンマで区切られてないのにCSV…。 と言う突っ込みは置いておいて、区切り位置を指定しているということは固定長フィールドですよね。 とりあえずその作業をマクロで記録したら、以下のようになったので、これを手直しして個人用マクロブック(PERSONAL.XLS)の標準モジュールに入れておけばいかがでしょうか。 <注意点> ファイル名は test.csv、シート名は test と固定されているので、適切な物に変えてください。(3行目、5行目) 毎回ファイル名が変わるのであれば、ファイル選択のダイアログを出すように処理を追加するので、補足をお願いします。 フォーマット指定ですが、最後の .TextFileColumnDataTypes = Array(1, 1, 1, 1) .TextFileFixedColumnWidths = Array(4, 2, 2) の部分で、1行目をフィールドの数だけ1を並べてください。(表示形式が標準の場合。文字列の場合は2、それ以外(日付、スキップ)の場合はちょっとややこしいので、日付が入る場合はどのような形式で入るのか、また補足してください。 上記の2行目が各列に取り込むフィールドの長さを指定していて、上記の場合は4列(A~D列)取り込んで、最初の3つのフィールド長がそれぞれ4,2,2という意味なので、これもファイルのフォーマットにあわせて修正してください。 Sub 外部ファイル取り込み() With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;test.csv", Destination:= _ Range("A1")) .Name = "test" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = xlWindows .TextFileStartRow = 1 .TextFileParseType = xlFixedWidth .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1) .TextFileFixedColumnWidths = Array(4, 2, 2) .Refresh BackgroundQuery:=False End With End Sub