Excel сохранить в csv выделенный диапазон vba
Здесь есть много вопросов по созданию макроса для сохранения рабочего листа в виде файла CSV. Все ответы используют SaveAs, например этот от SuperUser. В основном они говорят о создании такой функции VBA:
Это отличный ответ, но я хочу выполнить экспорт вместо «Сохранить как» . Когда выполняется SaveAs, это вызывает у меня два раздражения:
- Мой текущий рабочий файл становится файлом CSV. Я хотел бы продолжить работу с моим исходным файлом .xlsm, но экспортировать содержимое текущего рабочего листа в файл CSV с тем же именем.
- Появится диалоговое окно с просьбой подтвердить, что я хочу переписать файл CSV.
Можно ли просто экспортировать текущий рабочий лист как файл, но продолжить работу с исходным файлом?
Почти то, что я хотел @Ralph, но вот лучший ответ . Это решит ваши проблемы с кодом:
- он экспортирует только жестко закодированный лист с именем "Sheet1";
- он всегда экспортирует в один и тот же временный файл, перезаписывая его;
- он игнорирует символ разделения языкового стандарта.
Чтобы решить эти проблемы и удовлетворить все мои требования, я адаптировал код отсюда. Я его немного почистил, чтобы было удобнее читать.
В приведенном выше коде есть еще кое-что, на что вы должны обратить внимание:
- .Close и DisplayAlerts=True должны быть в предложении finally, но я не знаю, как это сделать в VBA
- Он работает, только если текущее имя файла состоит из 4 букв, например .xlsm. Не работает в старых файлах .xls excel. Для трехсимвольных расширений файлов необходимо изменить - 5 на - 4 при установке MyFileName.
- В качестве побочного эффекта ваш буфер обмена будет заменен текущим содержимым листа.
Изменить: поставить Local:=True для сохранения с разделителем CSV для локали.
Как я уже сказал, на этом сайте есть несколько мест, где содержимое рабочего листа записывается в CSV. Этот и этот, чтобы указать только на два.
Ниже моя версия
- он явно ищет "," внутри ячейки
- Он также использует UsedRange - потому что вы хотите получить все содержимое рабочего листа
- Использует массив для цикла, так как это быстрее, чем цикл по ячейкам листа
- Я не использовал процедуры FSO, но это вариант
Вот небольшое улучшение по сравнению с этим ответом выше, заботясь о файлах .xlsx и .xls в одной и той же процедуре, если это кому-то поможет!
Я также добавляю строку, чтобы выбрать сохранение с именем активного листа вместо книги, что часто бывает наиболее практичным для меня:
Для тех ситуаций, когда вам нужно немного больше настроить вывод (разделитель или десятичный символ) или у кого большой набор данных (более 65 тысяч строк), я написал следующее:
@NathanClement был немного быстрее. Тем не менее, вот полный код (немного более подробный):
А надо из всего этого сформировать табличку в Excel - приблизительно такого вида:
На помощь придёт функция DATfolder2Array
Код функции DATfolder2Array:
Комментарии
Последнюю строку в статье прочитайте
Надо скопировать в конец кода функцию из другой статьи
Не понимаю, что я делаю не так
Даже без исправлений выдает ошибку "sub or function not defined"
У кого заработало ?
У меня возникла проблема с
Function DATfolder2Array(ByVal FolderPath$, ByVal ColumnsCount As Long, _
ByVal TextColumns$, ByRef ErrorsArr) As Variant
Есть ли работающий вариант?
Найдите в коде строку
Запись ro = Replace(ro, vbTab, ";") заменяет разделитель табуляцию на точку с запятой
По аналогии, можно выполнить и другие замены? для других разделителей
Например, чтобы запятая тоже считалась разделителем, то дополните строку еще одной командой замены:
А можно указать несколько разделителей, если да, то как?
Цифра 7 в этой строке DataArr = DATfolder2Array(Папка, 7, "1,2,4,5", ErrorsArray) я так понимаю указывает на количество столбцов ?
Если до то как сделать без явного указания, чтобы определял из текстовика с разделением через ";" ?
Большое спасибо за Ваши разработки.
Здравствуйте, Иван.
В вашем случае нужен совсем другой, более сложный, макрос. Можем сделать под заказ.
Нет, там функция считывает файл целиком
Если требуется частично файл загружать - это надо другой макрос делать
Спасибо за ответ.
По ходу возник еще вопрос: с помощью функции ReadTXTfile можно выбрать не все строки файла, а только определенные (скажем со 2 по 20)
Здравствуйте, Владимир
Код написан под разделитель столбцов ; (точка с запятой)
Поменяйте в коде ; на , — и всё
Всего в 2 строках надо поменять:
Добрый день, подскажите если не сложно.
В файлах данные разделяются при помощи - ","
Сложно переделать ваш код для того что бы он распознавал такое разделение?
Беру свои слова обратно, все работает
Пробовал запустить выполнение макроса на сбор данных из несколькоих txt файлов в Excel, но ничего не получается. Нельзя ли выложить пример рабочего файла?
Аналогичная проблема, не могу делать удобоваримым под CSV.
У меня тоже с прибора каждые 3 часа файл вылазит.
Я так понимаю что для импорта файлов с таким форматом строки достаточно в коде сделать так: ' считываем данные из все файлов .DAT в папке в двумерный массив
DataArr = CSVfolder2Array(ПапкаДляФайлов$, 66, "2", ErrorsArray), однако импорта не происходит.
А именно и будет много однотипных файлов: каждые сутки прибор формирует CSV файл с именем типа дд_мм_гг.scv, и строки типа:(22:31:35;Time; 1,02400e+03;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;) т.е. время,служебная информация и далее непосредственно данные до 64 значений. Требуется импорт столбца времени и столбцов данных из этих файлов, но при этом в Excel первым столбцом должна быть еще и дата из имени файла или должен создаваться новый лист с именем файла, т.е. датой.
А почему вы решили взять за основу именно этот макрос?
Этот код предназначен для сложной обработки папки с однотипными файлами,
а для одиночного файла макрос подойдёт попроще.
У меня на сайте много примеров таких макросов - выбирайте любой.
Например, можете взять за основу макрос загрузки CSV в Excel
Есть CSV файл состоящий из 66 столбцов, как изменить макрос чтобы импортировать данные из файла?
не показывает то что нужно,я не пойму где в этом макросе указывать строчки которые нужны из документов
Мой макрос загружает ВСЕ строки из текстовых файлов
(а в примере, ссылку на который я дал в предыдущем комментарии, - все строки, кроме первых)
Более того, при вызове функции нужно указывать количество загружаемых столбцов.
К тому же, этот код не универсальный - прямо в функции прописаны разделители строк и полей (точка с запятой, и перевод строки)
Если у вас другие разделители - либо изменяйте код функции, либо ждите, пока я опубликую новую статью с универсальным вариантом макроса загрузки данных из текстовых файлов.
В другой статье я выложил пример использования этого макроса:
(смотрите пример №2 - нажатием первой (зеленой) кнопки скачаете файлы, а нажатием второй (желтой) кнопки, загрузите данные из файлов CSV на лист)
У меня тож не показывает то что нужно,я не пойму где в этом макросе указывать строчки которые нужны из документов,может в этом все дело.
Может и хороший макрос, но.. Увы, не работает.
Добавьте ниже этого макроса код функции ReadTXTfile, взяв его здесь:
эту ошибку исправил, теперь пишет что команда не существует в этом месте newtxt = ReadTXTfile(FolderPath$ & filename)именно чтение TXT, и указывает на Function DATfolder2Array(ByVal FolderPath$, ByVal ColumnsCount As Long, _
ByVal TextColumns$, ByRef ErrorsArr) As Variant что теперь то не так может быть?
PS: Код взят из рабочего файла - так что ошибок быть не должно.
макрос не запускается пишет значение вот этого кода неоднозначно: Function DATfolder2Array(ByVal FolderPath$, ByVal ColumnsCount As Long, _
ByVal TextColumns$, ByRef ErrorsArr) As Variant
что это может быть?
Как мы все знаем, нам легко сохранить рабочий лист в виде файла csv. Но пробовали ли вы когда-нибудь сохранять только отфильтрованные данные в виде файла csv? Обычно Сохранить как функция В Excel сохранит все данные рабочего листа как файл csv, в этом случае, как вы могли бы сохранить или экспортировать только отфильтрованные данные из Excel в файл csv?
Сохранять / экспортировать только отфильтрованные данные из Excel в файл csv с копированием только видимых ячеек
В Excel вы не можете напрямую сохранять отфильтрованные данные в CSV-файл, но вы можете закончить это с помощью обходного пути, сделав следующее:
1. Выберите отфильтрованные данные, которые вы хотите сохранить.
2. Затем нажмите Главная > Найти и выбрать > Перейти к специальному, см. снимок экрана:
3. В Перейти к специальному диалоговое окно, выберите Только видимые ячейки вариант, см. снимок экрана:
4. Затем нажмите OK кнопку, а затем скопируйте и вставьте отфильтрованные данные на новый рабочий лист, и только отфильтрованные данные будут вставлены в новый рабочий лист.
5. Теперь вы можете сохранить этот новый рабочий лист как файл csv, нажмите Файл > Сохранить как, В Сохранить как диалоговом окне укажите имя и расположение для этого файла и выберите CVS (с разделителями-запятыми) из Сохранить как выпадающий список, см. снимок экрана:
Сохранять / экспортировать только отфильтрованные данные из Excel в файл csv с кодом VBA
Это может быть неэффективным способом использования вышеуказанного метода, здесь я могу создать код VBA, который поможет вам быстро и удобно экспортировать отфильтрованные данные в файл csv.
1. Удерживайте Alt + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модуль, и вставьте следующий макрос в Модуль Окно.
Код VBA: сохранение / экспорт только отфильтрованных данных из Excel в файл csv
3, Затем нажмите F5 нажмите клавишу для запуска этого кода, и появится окно подсказки, напоминающее вам о выборе отфильтрованных данных, которые вы хотите сохранить только как файл csv, см. снимок экрана:
4. Затем нажмите OK , и появится еще одно поле, напоминающее вам указать имя файла и местоположение для вашего CSV-файла, см. снимок экрана:
5, Затем нажмите Сохраните Кнопка, только отфильтрованные данные сохраняются как файл csv.
Сохранение / экспорт только отфильтрованных данных из Excel в файл csv Kutools for Excel
Kutools for Excel содержит полезный инструмент -Диапазон экспорта в файл, он может помочь вам экспортировать или сохранить диапазон выбранных ячеек в CSV, PDF, текстовые и другие файлы форматирования.
После установки Kutools for Excel, пожалуйста, сделайте следующее:
1. Выберите отфильтрованные данные для экспорта.
2. Нажмите Kutools Plus > Импорт Экспорт > Диапазон экспорта в файл, см. снимок экрана:
3. В Диапазон экспорта в файл диалоговом окне выберите формат файла, который вы хотите сохранить, под Формат файла, затем щелкните кнопку, чтобы выбрать папку для сохранения экспортированного файла, см. снимок экрана:
4. Затем нажмите Ok , и появится другое окно подсказки, напоминающее вам ввести имя для экспортированного файла, см. снимок экрана:
5, Затем нажмите Ok, и только выбранные отфильтрованные данные были сохранены как файл csv по мере необходимости.
В Excel мы можем сохранить весь рабочий лист как файл csv, используя Сохранить как функция, но пробовали ли вы когда-нибудь экспортировать диапазон ячеек с одного листа в файл csv? В этой статье вы получите методы решения этой проблемы в Excel.
Экспорт диапазона ячеек в Excel в файл csv с кодом VBA
Здесь у меня есть код VBA для экспорта диапазона ячеек из Excel в файл csv, пожалуйста, сделайте следующее:
1. Удерживайте ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модульи вставьте следующий код в Модуль Окно.
Код VBA: экспорт диапазона содержимого ячеек в файл csv
3, Затем нажмите F5 нажмите клавишу для запуска этого кода, и появится окно подсказки, напоминающее вам о выборе диапазона ячеек, который вы хотите экспортировать как файл csv.
4, Затем нажмите OK , укажите каталог для размещения нового файла CSV и укажите имя файла CSV в текстовом поле Имя файла, см. снимок экрана:
5. Затем нажмите Сохраните и выбранный диапазон был сохранен как файл csv, вы можете перейти в указанную папку, чтобы просмотреть его.
Экспорт диапазона ячеек в Excel в файл csv с помощью Kutools for Excel
Если вас не интересует код VBA, здесь я могу представить вам простой инструмент - Kutools for Excel, С его Диапазон экспорта в файл функция, вы можете быстро решить эту задачу.
После установки Kutools for Excel, выполните следующие действия:
1. Выберите диапазон данных, который вы хотите экспортировать в файл csv.
2. Затем нажмите Kutools Plus > Импорт Экспорт > Диапазон экспорта в файл, см. снимок экрана:
3. В Диапазон экспорта в файл диалоговое окно, выберите CSV (с разделителями-запятыми) из Формат файла вариант, а затем укажите Сохранить каталог чтобы сохранить новый файл CSV, см. снимок экрана:
4. Затем нажмите Ok , появится окно с подсказкой, чтобы напомнить вам указать имя для этого нового CSV-файла, как вам нужно, а затем нажмите OK , чтобы закрыть это окно, и выбранные данные будут сразу экспортированы как файл CSV.
Ноты:
Сохраните фактическое значение: Фактические значения будут отображаться в конечном файле.
Сохраните значения, как показано на экране: Значения в конечном файле будут отображаться так же, как вы читаете их на экране компьютера.
Открыть файл после экспорта: Он автоматически откроет окончательный файл после экспорта диапазона, если вы отметите эту опцию.
Читайте также: