Автоматически разбить файл excel на несколько по условию

Имеется файл с большим количеством строк, пример во вложении.
Требуется разбить файл на несколько по первому столбцу (для каждого филиала свой файлик).
С VBA сталкиваюсь впервые, подскажите, пожалуйста, с чего начать, куда копать..
Возможно у кого-то уже есть что-то либо подобное.
Буду очень благодарен за помощь!
Лучшие ответы ( 1 )
| Здесь вы можете заказать любую студенческую или школьную работу. |
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Можно ли одну сумму разбить на несколько платежей автоматически?
допустим есть кредит 10 000 тисяч можно ли разбить автоматически сумму на платеж в месяц чтоб я в.
Как разбить столбец на несколько по условию
Есть таблица в MS SQL 2000: Адрес|Параметр|Значение 1|202|30 2|202|50 1|203|100 2|203|350 .
разбить текстовый файл на несколько
Добрый вечер! Имеется файл текстовый очень большого размера. Его надо разбить на несколько.
Разбить файл на несколько #include
Простой код. Рисует зеленую точку (квадрат) на черном фоне. #include "gl/glut.h" void.
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086

Сообщение было отмечено crok как решение
Решение
Посмотри вариант здесь Макрос для нарезки файлов по условию требует доработки
Регистрация: 15.12.2014
Сообщений: 6
toiai, все работает, спасибо большое!
сможете еще подсказать, что нужно исправить, чтобы при выполнении не запрашивало для каждого создаваемого файла «сохранить изменения для файла?», а сразу сохраняло с именем филиала (значением первого столбца, по которому и идет отбор записей)
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086
Вставьте в код ло начала цикла строку:
Application.DisplayAlerts=False
Не забудьте в конце выполнения вернуть значение True
Регистрация: 15.12.2014
Сообщений: 6
Теперь системное окно не выскакивает, но и результат не сохраняется.
как я понимаю не отрабатывает строка сохранения:
ActiveWorkbook.SaveAs PathFile & "\" & c.Value & ".xlsx"
вероятно поэтому каждый раз и запрашивается «Сохранить изменения в книге?»
c.Value — это как раз и есть название филиала из первого столбца? когда вылезает диалог сохранения, по умолчанию название «книга №»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Sub Otdelenie() Dim shSrc As Worksheet, rCol1 As Range, c As Range Dim PathFile$ Dim cl As New Collection Set shSrc = ActiveSheet PathFile = ActiveWorkbook.Path Set rCol1 = shSrc.UsedRange.Columns(1) Set rCol1 = rCol1.Cells(2).Resize(rCol1.Cells.Count - 1) On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False For Each c In rCol1.Cells cl.Add 0, CStr(c.Value) If Err Then Err.Clear Else shSrc.Copy ActiveSheet.Range(rCol1.Address).ColumnDifferences(c).EntireRow.Delete ActiveWorkbook.SaveAs PathFile & "\" & c.Value & ".xlsx" ActiveWorkbook.Close shSrc.Activate End If Next Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
Макрос excel как разбить большой текстовый файл
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Макрос excel как разбить большой текстовый файл
Hugo121, доигрался?
тобою уже пользователей пугают.
strannick, очень правильный ход — если задача не очень интересная, а ответ получить надо (обратите внимание, кто ответил первым)))), правда есть одна ошибка. Hugo121, он еще и в словарь может, причем ему удавалась загнать в словари такие слова. котырые до этого ни в одном словаре не встречались (Даль и Ожегов — отдыхают)
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Регистрация: 11.05.2010
Сообщений: 5,166
У меня тоже отработало.
Я говорил немного о другом — если сразу весь текст прочитать в переменную, затем бить в массив — то это нужно 2*14м строк (т.е. держать весь файл 2 раза в памяти). Затем переменную можно убить, и частями перекладывать из большого массива в миллионные — т.е. 14м+1м.
Если же объявлять по миллиону, заполнять из файла, выгружать и снова — то максимум миллион и одна текущая строка (ну или что там из файла будет в памяти) — что намного меньше.
Ну и сам заполняемый файл Экселя тоже где-то как-то должен жить.
webmoney: E265281470651 Z422237915069 R418926282008
Форумчанин
Регистрация: 21.10.2011
Сообщений: 433
Сообщение от Скрипт
У меня мало оперативной памяти на компьютере (2 Гб), но этот код выполнился
у меня подвисло(((
IgorGO насчет словарей — это я забыл))) было дело и неоднократно. Кстати, мой исходный файл — это словарь (английские слова и буквосочетания). Вот такой каламбурчик.
Hugo121 Видел на планете по такой почти теме вариант через массив, но не въехал. А вот «построчно» упоминание тоже встречалось, но примера так и не нашел. В загашниках не найдется?
Регистрация: 02.05.2009
Сообщений: 3,907
| В загашниках не найдется? |
В загашнике есть Скальпель,самописный
Текстовый файл чуть больше 16 млн.строк.
Строка длинной 60 символов.
Файл 998 метров.
Скальпель режет на файлы по 1 млн. строк со скоростью 1 файл -3 секунды.
Памяти берет 30 метров.
Анализ,обработка данных Недорого
Последний раз редактировалось doober; 28.05.2013 в 00:36 .
Регистрация: 11.05.2010
Сообщений: 5,166
По задаче словарь не нужен — с ним возни больше. Набрать в словарь легко, выгрузить сложнее.
Вот нашёл пример чтения построчно — там правда ещё и словарь, и разбивка строк в массив — на это не смотрите
Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile _ ("c:\temp\Test.txt", ForReading) With CreateObject("Scripting.Dictionary") .CompareMode = 1 Do Until objTextFile.AtEndOfStream strNextLine = objTextFile.Readline arr = Split(strNextLine) For i = 0 to Ubound(arr) .item(arr(i))=0& Next Loop msgbox .count end with
webmoney: E265281470651 Z422237915069 R418926282008
Форумчанин
Регистрация: 24.12.2012
Сообщений: 906
| Hugo121: Вот нашёл пример чтения построчно |
я что-то не понял сложность задачи. Почему вы что-то искали, а не просто написали код по взятию данных из текстового файла в VBA-массив? В чём сложность?
strannick, в двух процедурах в константах нужно указать пути и имена текстовых файлов.
Sub Main() '1. Помещаем в константу "mySource" путь и имя текстового файла, 'из которого нужно взять данные. Const mySource As String = "C:\Users\User\Desktop\Новый текстовый документ.txt" '2. Помещаем в константу число, которое 'означает, сколько строк будет в массиве. Const mySize As Long = 1000000 Dim myArray() As Variant Dim myLineIndex As Long Dim myFileIndex As Long '3. Подготавливаем массив "myArray" к использованию. ReDim myArray(1 To mySize) '4. Открываем текстовый файл. '"For Input" переводится "для ввода", а нам нужно открыть 'для чтения. На самом деле всё правильно, просто 'это какая-то нестыковка в терминах. '1 - это имя в виде числа, которое даётся файлу. 'С помощью этого имени можно обращаться к файлу. Open mySource For Input As 1 '5. Двигаемся от строки к строке по текстовому файлу. 'Явно команды нет для перехода с одной строки на другую. 'Переход к следующей строке происходит после 'команды "Line Input". 'Двигаемся от строки к строке, пока не достигнем конца файла. Do While EOF(1) = False 'Сразу создать массив с нужным количеством 'строк мы не всегда сможем, т.к. может не хватить 'оперативной памяти. Поэтому будем периодически 'очищать массив. '6. С помощью переменной "myLineIndex" будем подсчитывать, 'сколько строк текстового файла мы уже взяли в массив. myLineIndex = myLineIndex + 1 'Если в массиве уже нужное количество строк. If myLineIndex > mySize Then '7. Формируем фрагмент имени текстового файла, в который 'перенесём данные. myFileIndex = myFileIndex + 1 '8. Переносим данные из массива куда-нибудь, 'например в другой текстовый файл. Call Procedure_1(myArray(), myLineIndex - 1, myFileIndex) '9. Очищаем массив. ReDim myArray(1 To mySize) '10. Подготавливаем переменную "myLineIndex". myLineIndex = 1 End If '11. Берём данные из текущей строки текстового файла 'и помещаем в массив. Line Input #1, myArray(myLineIndex) Loop '12. Переносим остатки в текстовый файл. myFileIndex = myFileIndex + 1 Call Procedure_1(myArray, myLineIndex, myFileIndex) '13. Закрываем текстовый файл. Close 1 End Sub Sub Procedure_1(myArray() As Variant, myLineIndex As Long, myFileIndex As Long) 'Перенос данных из массива в текстовый файл. '1. Помещаем в константу имя папки, где будут находиться 'текстовые файлы и первый фрагмент имени файла. Const myFolder As String = "C:\Users\User\Desktop\Новая папка\Файл_" Dim i As Long '2. Создаём и одновременно открываем текстовый файл. 'Здесь также перевод слова "Output" (вывод) не совпадает 'с тем, для чего мы открыли текстовый файл. Мы его 'открыли для ввода. Open myFolder & myFileIndex & ".txt" For Output As 2 '7. Переносим данные из массива в текстовый файл. For i = 1 To myLineIndex Step 1 Print #2, myArray(i) Next i '8. Закрываем текстовый файл. Close 2 End Sub
- Про работу с текстовыми файлами можно почитать на русском языке в самоучителях. Часто в VBA-самоучителях есть специально глава для работы с текстовыми файлами.
- Данный код предназначен для работы с текстовыми файлами с кодировкой «ANSI». Если предполагается работать с текстовыми файлами с кодировкой «Unicode», то нужно внести изменения в код или вообще отказаться от использования «Open» и использовать что-нибудь другое, например, объект «File System Object», или VBA-инструменты для работы с файлами, которые есть в самих программах «MS Office».
Последний раз редактировалось Скрипт; 28.05.2013 в 08:31 .
Разделение текста на столбцы с помощью мастера распределения текста по столбцам
С помощью мастера распределения текста по столбцам текст, содержащийся в одной ячейке, можно разделить на несколько.

Проверьте, как это работает!
- Выделите ячейку или столбец с текстом, который вы хотите разделить.
- На вкладке Данные нажмите кнопку Текст по столбцам.
- В мастере распределения текста по столбцам установите переключатель с разделителями и нажмите кнопку Далее.
- Выберите разделители для своих данных. Например, запятую и пробел. Данные можно предварительно просмотреть в окне Образец разбора данных.
- Нажмите кнопку Далее.
- В поле Поместить в выберите место на листе, где должны отображаться разделенные данные.
- Нажмите кнопку Готово.