Страницы: 1
RSS
Частичный импорт данных из CSV в эксель
 
Здравствуйте,

Есть простая задача, но не получается ее решить стандартными средствами (импорт из текстового файла и с помощью PowerQuery)

Есть файл 1.csv (лежит на рабочем столе)

Если его открыть в экселе, то он будет выглядеть так:


Нужен какой-то скрипт или набор команд или макрос, который из этого CSV файла будет вытаскивать значения, соответствующие ячейкам B2,B4,B25,B24,B31,B39,B38,B11,B10,B15,B16
и вставит их последовательно в новую книгу (из которой запущен макрос), в текущий лист, справа от выделенной ячейки включительно последовательно, в строку.

При этом не открывая исходный CSV файл в экселе

Не подскажите, как такое реализовать?

Спасибо
 
Verticalx, Добрый день.
Код
Sub tt()
Dim iTempPath$, a, b, i&
iTempPath$ = "e:\Temp\1.csv"
a = Split(CreateObject("Scripting.FileSystemObject").Getfile(iTempPath$).OpenasTextStream(1).ReadAll, vbNewLine)
b = Array(2, 4, 25, 24, 31, 39, 38, 11, 10, 15, 16)

ReDim out(1 To 11, 1 To 1)
For i = 1 To 11
    out(i, 1) = Split(a(b(i - 1) - 1), ";")(2)
Next

Workbooks.Add(1).Sheets(1).Cells(1).Resize(11, 1) = out
End Sub
 
Спасибо! :)
Единственное, только чтобы он не новую книгу создавал, а вставлял данные в текущую книгу и лист, справа от выделенной ячейки в столбцы
Ну, то есть, в одну строку

Изменено: Verticalx - 15.05.2025 14:55:13
 
Можно предпоследнюю строку заменить на такую:
Код
ActiveCell.Offset(, 1).Resize(1, 11) = Application.Transpose(out)
или
ActiveCell.Resize(1, 11) = Application.Transpose(out)

смотря как именно нужно выгружать.
Ну чтобы не переписывать кроме выгрузки ещё и формирование этого массива.
Ну а так правильнее формировать сразу горизонтальный массив, и ещё проверить что есть место для его выгрузки.
Изменено: Hugo - 15.05.2025 15:34:17
 
Цитата
Hugo написал:
ActiveCell.Resize(1, 11) = Application.Transpose(out)

Большое спасибо вам за помощь! Второй вариант - то, что нужно  :)
 
Здравствуйте!  
pq
Страницы: 1
Читают тему
Наверх