プロが教えるわが家の防犯対策術!

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

A 回答 (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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!