0

Excel 2010 では、すべてのテキスト ファイル データをフォルダーから 1 つのワークシートに読み込みたいと考えています。

各シートには、1 つのテキスト ファイルのデータが含まれている必要があります。

各シートは、最初の行のヘッダーで区切られたパイプです。

マクロの更新

Sub LoadTextFilesLoop()
    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim ws As Worksheet

    Set objFSO = CreateObject("Scripting.FileSystemObject")
     'Get the folder object associated with the directory
    Set objFolder = objFSO.GetFolder("C:\Export\")
     'Loop through the Files collection
    For Each objFile In objFolder.Files
    NewFileImport (objFile.Name)
    Next
     'Clean up!
    Set objFolder = Nothing
    Set objFile = Nothing
    Set objFSO = Nothing
End Sub

Sub NewFileImport(FileName)
    Sheets.Add After:=Sheets(Sheets.Count)
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Export\FileName", _
        Destination:=Range("$A$1"))
        .Name = FileName
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

ループはデータをロードしていません。

各ファイルの列数を取得する方法を理解する必要があります。

.TextFileColumnDataTypes = Array(1, 1, 1)

この行は、このファイルの 3 つの列を示しています。これは、ファイルの列によって異なります。

4

1 に答える 1

0

最後に、これが機能するようになりました。これが私のマクロです。

Sub LoadTextFilesLoop()
Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim ws As Worksheet

    Set objFSO = CreateObject("Scripting.FileSystemObject")
     'Get the folder object associated with the directory
    Set objFolder = objFSO.GetFolder("C:\Export\")
     'Loop through the Files collection
    For Each objFile In objFolder.Files
    NewFileImport (objFile.Name)
    Next
     'Clean up!
    Set objFolder = Nothing
    Set objFile = Nothing
    Set objFSO = Nothing
    End Sub

Sub NewFileImport(FileName)
Dim fName As String
fName = Left(FileName, Len(FileName) - 4)
Sheets.Add After:=Sheets(Sheets.Count)
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Export\" + FileName, _
        Destination:=Range("$A$1"))
        .Name = fName
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    ActiveSheet.Select
    ActiveSheet.Name = Left(fName, 31)
End Sub
于 2012-04-10T19:38:58.920 に答える