это проще, чем вы думаете, потому что вы можете вызвать мастер импорта текста (или, скорее, вы можете использовать его функциональность) из макроса, нет необходимости писать CSV-анализатор или что-нибудь подобное.
на самом деле, все, что я сделал с макросом ниже, чтобы использовать встроенную функцию записи, а затем настроить его немного, чтобы удовлетворить ваши потребности.
использование макроса:
резервное копирование текущего файла Excel, в случае чего сорваться.
изменить определение folder
в макросе должен быть путь, содержащий все ваши файлы данных - убедитесь, что вы включили косую черту.
выберите ячейку заголовка столбца, который должны содержит имя одного из ваших файлов - включая расширение файла. Вы можете изменить это поле после загрузки данных, если хотите удалить расширение.
запустить макрос.
действия
он будет принимать имя файла из текущей ячейки, посмотрите в указанном folder
и откройте файл, указанный в ячейке. Затем он импортирует его как CSV, ровно одну ячейку ниже выбранная ячейка (при запуске макроса).
как таковой, он, вероятно, перезапишет ячейки ниже выбранной ячейки при запуске макроса-внимание осведомленный.
если файл не найден, или происходит какая-либо другая ошибка, это не удастся с обычным полем ошибки 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