• 締切済み

EXCELで外部取込の自動化

教えて下さい。 カンマ、ダブルコーテーションで区切っていないデータを拡張子CSVでもらっています。それで、毎回、EXCELで外部取込からテキストファイルウィザードで決められた位置に区切り位置を指定しています。これが結構大変な作業で、自動にすることは出来ないものかと悩んでいます

みんなの回答

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

コンマで区切られてないのに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

関連するQ&A