web-dev-qa-db-ja.com

マクロを使用してCSVファイルをExcelにインポートする

Excelワークシートで特定のセルに日付を入力して、マクロがテキストファイルを含むフォルダーに移動するマクロを開発したいと思います。あなたが言うことができるデータベース。日付として書き込まれている対応するファイル名を検索し、データを区切り記号で区切り、最初に日付を入力した場所のすぐ下のセルに貼り付けます。

フォルダーは常に同じ場所にあり、テキストファイルはすべてDD_MM_YYYYでフォーマットされます。そして、下のセルは常に空になります

私が求めているものを理解しやすくするためのいくつかの写真。

Result Data Input Step 1Data Input Step 2Data Input Step 3

4
B-Ballerl

マクロ内からテキストインポートWizard(または、その機能を使用できます)を呼び出すことができるため、これは思ったよりも簡単です。CSVパーサーを記述したり、そのような空想は何でも。

実際、以下のマクロで行ったのは、組み込みのレコード関数を使用し、ニーズに合わせて少し調整することだけです。

マクロの使用:

  1. 何か問題が発生した場合に備えて、現在のExcelファイルをバックアップします。

  2. マクロのfolderの定義を、すべてのデータファイルを含むパスに変更します。末尾にスラッシュが含まれていることを確認してください。

  3. 必須ファイルの名前を含む列のヘッダーセルを選択しますファイル拡張子を含む。拡張子を削除したい場合は、データのロード後にこのフィールドを編集できます。

  4. マクロを実行します。

行動

現在のセルからファイル名を取得し、指定されたfolderを調べて、セルで指定されたファイルを開きます。次に、CSVとしてインポートします。正確に1つのセル選択したセル(マクロの開始時).

そのため、マクロを実行すると、選択したセルの下のセルが上書きされる可能性があります。注意が必要です。

ファイルが見つからない場合、またはその他のエラーが発生した場合、これは通常のVBAエラーボックスで失敗し、わかりやすいエラーメッセージは表示されません。

マクロコード

QueryTablesを自分で使用する方法を学ぶのではなく、録音から取得すると言ったように、これの一部はおそらくトリミングできますが、そのままでは問題はなく、確実に機能するようです。

Sub LoadFromFile()
    Dim fileName As String, folder As String

    folder = "C:\Path\To\Your\Files\"
    fileName = ActiveCell.Value

    ActiveCell.Offset(1, 0).Range("A1").Select

    With ActiveSheet.QueryTables _
        .Add(Connection:="TEXT;" & folder & fileName, Destination:=ActiveCell)
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
5
DMA57361