Загрузка файла CSV на лист Excel

Загрузка (импорт) файла CSV на лист Excel

Надстройка предназначена для облегчения импорта данных в Excel из текстовых файлов с разделителями (например, из CSV)

Пока во вложении - обычный файл Excel с нужными макросами, надстройку выложу позже

Использовать функции файла (надстройки) совсем не сложно.

Вот несколько примеров:

Sub ЗагрузитьТекстовыйФайлВАктивнуюЯчейку()
    CSV2Excel
End Sub
 
Sub ЗагрузитьCSVФайлВСледующуюПустуюЯчейкуПервогоСтолбца()
    CSV2Excel "a", , , , "*.csv"
End Sub
 
Sub ЗагрузитьТекстовыйФайлВНовуюКнигу()
    ' текстовый файл с разделителем "пробел"
    CSV2Excel "NewWorkbook", "Импорт данных в новую книгу", , , , " "
End Sub

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Пётр, оформляйте заказ на сайте, прикрепляйте примеры файлов (исходный CSV и итоговый XLS), и подробно описывайте, что и как должно работать.

Здравствуйте, интересует платная доработка скрипта этого скрипта импорта.
Нужно для каждой строки основного листа из одной колонки распарсить содержимое (прописано через "|") на отдельный лист в несколько строк с ключем ID из первоначальной колонке (ну типа как связанные таблицы в БД).
Возьметесь? Предложение прошу в личку. С уважением Петр

Добрый день. Подскажите пожалуйста как ипортировать CSV (его размер около 1Гб) в Excel ???

Надо код немного доработать
Если готовы оплатить - пишите на почту, сделаю

Добрый день! Подскажите, как сделать, чтобы при нажатии на кнопку "Загрузить файл CSV, начиная с первой пустой ячейки в первом столбце" данные разделись по запятой и при этом дробная часть заменялась с точки на запятую (т.е. 12,13,14.5 и т.д. на 12 13 14,5)

Добрый день!
Для решения моей задачи подходит 3-й код - Выгрузка в новую книгу. Но, когда я это делаю, то создается новая книга с вкладкой "данные" и все, вкладка пустая, ничего не выгружается. Сначала он предлагает выбрать файл .csv, я выбираю, затем книга с пустой вкладкой. Не подскажете почему так происходит?
Я столкнулся с проблемой, когда файл .csv в ручную открывается как надо, а вот через макрос все в строках. Нет ли какой-то простой возможности открыть через макрос в нормальном виде? Открываю командой Workbooks.Open Name.

Та же проблема, что и в посте 17 - Кавычки. Что дописать для удаления кавычек? Заранее спасибо.

Вообщем нужно быть внимательным к коду функции, где прописан разделитель, который стоит конкретно в вашем .csv файле. Если в качестве разделителя стоит запятая, то пишем : Optional ByVal ColumnsSeparator$ = "," ..... далее код. Если же точка с запятой ,то: Optional ByVal ColumnsSeparator$ = ";" ... Только в этом случае будет корректное разбиение на столбцы.

Файлы *.csv в большинстве своём открываются "криво", в одном столбце через запятую, не разбиваясь по столбцам. Мне же нужно при открытии разнесение по столбцам. И такой макрос я нашёл, но он открывает новую книгу. Мне же нужно чтобы ФАЙЛ *.csv можно было залить на лист уже открытой книги. Вот и наткнулся на Ваш макрос, думал что нужное найти. Но Ваша функция и по столбцам не разбивает.

Тогда зачем вам разбираться в этом макросе, - файлы CSV, в большинстве своём, открываются как обычная книга Excel
Так что просто запишите свои действия встроенным в Excel макрорекордером, - получите макрос открытия CSV файла из одной строки.

Увы, пока я новичок в VBA, только начал изучать. Оттого сделать мне этого не под силу, как и многим другим несведущим наверное тоже.

Среди параметров вызова функции есть «Разделитель столбцов» - если вы его не задали, используется значение по-умолчанию (точка с запятой или запятая, не помню уже)
Пропишите нужный разделитель - и всё будет корректно открываться.

Файл .csv безусловно открывается, но вот только в том виде в каком он и существует. Разделение на столбцы не происходит.

Максим, для вашей задачи у меня есть специальная надстройка:
http://excelvba.ru/programmes/Lookup

Подсткажите плз, возможно ли с помощью этого макроса импортировать колонки в соответствующие колонки в excel. Например, в csv 2 колонки "Артикул" и "Цена", надо импортировать колонку с ценой, с привязкой по артикулу, т.е. что бы цена артикула в csv соответствовала цене артикула в excel.

Заранее, благодарю

Сделайте цикл по файлам, - каждый файл по-отдельности обрабатывая этим кодом

Функция для получения списка файлов (с примером цикла по найденным файлам):
http://excelvba.ru/code/FilenamesCollection

Вам осталось только совместить эти 2 макроса

Добрый день!

Замечательный код. Все работает на ура!
Как заставить его обрабатывать группу файлов? Сейчас при выборе файла csv он берет только один файл.

Заранее благодарен.

Добрый день!
Спасибо за данный скрипт. У меня почти все работает, только выгружается не вся информация, т.к первая строка по длинне меньше остальных и все мой 1000 строк выгружаются в шесть колонок.
Что нужно добавить в код, чтобы файл читался со второй строки или обрабатывал массив по максимальной длине строки?

вставляет из csv фаила только 25 строк а остальные 1000 нету?

спасибо за быстрый ответ!

еще интересует как можно последний (М) столбец сделать в виде гиперссылки с заданным названием (ссылка :))

нашел в другом Вашем примере:
' если нужна гиперссылка на файл во втором столбце
ActiveSheet.Hyperlinks.Add Range("b" & Rows.Count).End(xlUp), ПутьКФайлу, "", _
"Открыть файл" & vbNewLine & ИмяФайла

как это добавить в данный скрипт к сожалению не представляю (уже читаю Вашу статью "как я стал программистом" :))

Здравствуйте, Александр.

После строки
Set fso = Nothing
добавьте строку
Kill Filename$ ' удаление файла

Благодарю, весьма удобный скрипт.

подскажите, как добавить удаление обработанного CSV файла ?
пробовал след образом:
------------------------
Set FSO = CreateObject("scripting.filesystemobject") ' читаем текст из выбранного файла
Set ts = FSO.OpenTextFile(Filename$, 1, True): txt$ = ts.ReadAll:[B] ts.Delete[/B]
Set ts = Nothing: Set FSO = Nothing
-------------------------
безрезультатно

второй вопрос - как явно указать файл с исходными данными?

Всё можно исправить.

Добавьте в код удаление кавычек (символ с кодом 34),
а по кодировке - возьмите функцию перекодировки здесь:
http://excelvba.ru/code/encode

Если сами не справитесь - вы всегда можете заказать решение под свои нужды
(выслав мне исходный файл CSV, и пример желаемого результата в Excel)

Подскажите после импорта все значения заключены в кавычки, в том числе и в пустых ячейках (прописывается "")
можно ли это исправить.
И еще если в исходном файле была кириллица она "превращается" в кракозябры, как исправить кодировку.

Здравствуйте. Попробовал использовать макрос при открытии csv с данными техпроцесса. Колонки в файле вида: ДАТА;ПАРАМЕТР;ДАТА;ПАРАМЕТР;... и т.д. Дата нормально идет, а вот со значениями параметров беда. Параметры с одним знаком после запятой импортируются нормально, правда в формате текста. А если параметр имеет 10-12 знаков после запятой, то импортируются всё число, только без запятой, т.е. вместо 893,23764875494 получается 89323764875494. В итоге я хотел получить в колонках параметров только целые числа, но наткнулся на такую засаду.
P.S. В макросах я полный 0. Первый раз столкнулся.

Супер!
Спасибо.

можно ли перед фильтром сделать всплывающее окно типа ...

Да, Александр, это сделать можно.
Такие окна делаются функцией InputBox:

' ...
txt = InputBox("Введите фильтр, например, 3=текст")
if txt like "*#=?*" then ' если ввели столбец и критерий
   ' фильтруем массив
   arr = ArrAutofilterEx(arr, trim(txt)) ' добавленная строка
end if
' ...

Огромное спасибо!
только не подумайте, что я сильно много хочу, можно ли перед фильтром сделать всплывающее окно типа "Введите номер столбца и фильтр", а в функцию подставлять эти данные?

Надо в конец функции CSV2Excel, перед выводом на лист результатов, добавить фильтрацию:
(без лишних пробелов в параметрах фильтра)

' ...
    For i = LBound(tmpArr1) To UBound(tmpArr1)
        tmpArr2 = Split(Trim(tmpArr1(i)), ColumnsSeparator$)
        For j = 1 To ColumnsCount
            arr(i + 1, j) = tmpArr2(j - 1)
        Next j
    Next i
 
    ' фильтруем массив
    arr = ArrAutofilterEx(arr, "2=*2.10*") ' добавленная строка

    ' заносим результат в виде двумерного массива на лист,
    ' начиная с заданной ячейки
    GetCell(Destination).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr

вставляю вот так

Sub ЗагрузитьТекстовыйФайл ВАктивнуюЯчейку()
    CSV2Excel
    arr = Range("a3:q100").Value
    ArrAutofilterEx arr, "2 = *2.10*"
End Sub

Пишет "Неверено сформирована строка фильтрации", что не так?

Спасибо,
но не хочу показаться невежой, могли Вы указать "в код загрузки массива данных из файла CSV." в какую именно строку? просто я еще учусь обращаться с макросами.
С Уважением,
Александр.

Надо добавить вызов функции фильтрации массива в код загрузки массива данных из файла CSV.

Здравствуйте. подскажите пожалуйста, как доработать макрос чтобы он загружал не все данные а только соответствующие определенному значению. Например: в столбце В есть данные:
А
А
А
А
Б
Б
Б
Б
В
В
В
нам нужны строки с данными содержащими только А.
Спасибо.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
  _____   _       _   _   ____            __  __ 
| ___| | | | | | | | _ \ _ _ | \/ |
| |_ | | | | | | | |_) | | | | | | |\/| |
| _| | |___ | |_| | | __/ | |_| | | | | |
|_| |_____| \___/ |_| \__,_| |_| |_|
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.