Это проще, чем вы думаете, потому что вы можете вызывать Мастер импорта текста (или, скорее, вы можете использовать его функциональные возможности) из макроса, нет необходимости писать анализатор 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