Добрый день! Помогите, пожалуйста, написать макрос в Exsel 2010. Имеется огромный файл с данными по поставщикам. Кол-во строк в файле доходит до сотен тысяч. Пример файла прилагаю, строк и столбцов в сотни раз больше, чем в примере. В первом столбце содержится номер поставщика. Это ключевой показатель. Поставщиков около 400. Количество строк с данными по каждому поставщику разное. Необходимо написать макрос, который будет резать данный файл по номеру поставщика и создавать новые файлы, в каждом из которых будут оставаться данные только по одному поставщику. Имя каждого нового файла должно содержать номер конкретного поставщика, к которому относятся данные. Т.е., например, первый вновь созданный файл должен называться 1021184_ЗАО "ОЛИМП И К" и в нем должны быть только строчки с данными Олимпа, второй будет 1021317_ООО "Торговая Компания "Элис" и внутри строки по Элису и т.д. Заранее спасибо за помощь!
Добрый день! Помогите, пожалуйста, написать макрос в Exsel 2010. Имеется огромный файл с данными по поставщикам. Кол-во строк в файле доходит до сотен тысяч. Пример файла прилагаю, строк и столбцов в сотни раз больше, чем в примере. В первом столбце содержится номер поставщика. Это ключевой показатель. Поставщиков около 400. Количество строк с данными по каждому поставщику разное. Необходимо написать макрос, который будет резать данный файл по номеру поставщика и создавать новые файлы, в каждом из которых будут оставаться данные только по одному поставщику. Имя каждого нового файла должно содержать номер конкретного поставщика, к которому относятся данные. Т.е., например, первый вновь созданный файл должен называться 1021184_ЗАО "ОЛИМП И К" и в нем должны быть только строчки с данными Олимпа, второй будет 1021317_ООО "Торговая Компания "Элис" и внутри строки по Элису и т.д. Заранее спасибо за помощь!JuliaPl
Помочь написать Я писала макросы, но давно и самые простые. Или можно написать сам макрос и комментарии к нему :)) Я бы хотела понимать каждую строчку макроса, чтобы иметь возможность его изменить, т.к. предполагаю, что это понадобится.
Помочь написать Я писала макросы, но давно и самые простые. Или можно написать сам макрос и комментарии к нему :)) Я бы хотела понимать каждую строчку макроса, чтобы иметь возможность его изменить, т.к. предполагаю, что это понадобится.JuliaPl
Sub Example2() off_ ' Отключаем пересчет формул, диалоги и обновление экрана Dim rngAdr$ Dim ADO As New ADO Dim tResArr Dim i&, v&
rngAdr = Range("A4:B" & [A1000000].End(xlUp).Row).Address(0, 0, 1, 0) ' определяем в переменную адрес диапазона ADO.DataSource = ThisWorkbook.Path & "\" & ThisWorkbook.Name ' Указываем источник ADO.Query ("SELECT DISTINCT F1, F2 FROM [СМ$" & rngAdr & "] WHERE F1 <> '' AND F2 <> ''") ' Собственно, сам запрос SQL к листу книги, который выбирает уникальные пары значений первых двух столбцов tResArr = ADO.ToArray() ' Результат выводим в массив
For i = 1 To UBound(tResArr) 'проходим по массиву ' Следующий запрос берет уникальные пары значений и выбирает все записи с листа, соответствующие этим парам ADO.Query ("SELECT * FROM [СМ$" & rngAdr & "] WHERE F1 = '" & tResArr(i, 1) & "' AND F2 = '" & tResArr(i, 2) & "';") '
Sheets.Add 'Добавляем новый лист With ActiveSheet .Name = tResArr(i, 1) ' обзываем его первым значением из пары .[a1].CopyFromRecordset ADO.Recordset ' выводим результат запроса на новый лист .Move 'перемещаем его в новую книгу ' Обзываем файл вторым значением из пары, предварительно заменив запрещенные символы и сохраняем его в папку с исходным файлом ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & tResArr(i, 1) & "_" & replPunct(tResArr(i, 2)) ActiveWorkbook.Close False 'закрываем свежеиспеченную книгу End With Next
on_ 'Включаем пересчет формул, диалоги и обновление экрана MsgBox "Все готово!", vbOKOnly End Sub
Sub off_() With Application .DisplayAlerts = False .ScreenUpdating = False .Calculation = xlCalculationManual End With End Sub
Sub on_() With Application .DisplayAlerts = True .ScreenUpdating = True .Calculation = xlCalculationAutomatic End With End Sub
Function replPunct$(ByVal t$) t = Replace(t, """", "") t = Replace(t, "~*", "") t = Replace(t, "\", "") t = Replace(t, "/", "") t = Replace(t, ":", "") t = Replace(t, "<", "") t = Replace(t, ">", "") t = Replace(t, "~?", "") replPunct = t End Function
Sub Example2() off_ ' Отключаем пересчет формул, диалоги и обновление экрана Dim rngAdr$ Dim ADO As New ADO Dim tResArr Dim i&, v&
rngAdr = Range("A4:B" & [A1000000].End(xlUp).Row).Address(0, 0, 1, 0) ' определяем в переменную адрес диапазона ADO.DataSource = ThisWorkbook.Path & "\" & ThisWorkbook.Name ' Указываем источник ADO.Query ("SELECT DISTINCT F1, F2 FROM [СМ$" & rngAdr & "] WHERE F1 <> '' AND F2 <> ''") ' Собственно, сам запрос SQL к листу книги, который выбирает уникальные пары значений первых двух столбцов tResArr = ADO.ToArray() ' Результат выводим в массив
For i = 1 To UBound(tResArr) 'проходим по массиву ' Следующий запрос берет уникальные пары значений и выбирает все записи с листа, соответствующие этим парам ADO.Query ("SELECT * FROM [СМ$" & rngAdr & "] WHERE F1 = '" & tResArr(i, 1) & "' AND F2 = '" & tResArr(i, 2) & "';") '
Sheets.Add 'Добавляем новый лист With ActiveSheet .Name = tResArr(i, 1) ' обзываем его первым значением из пары .[a1].CopyFromRecordset ADO.Recordset ' выводим результат запроса на новый лист .Move 'перемещаем его в новую книгу ' Обзываем файл вторым значением из пары, предварительно заменив запрещенные символы и сохраняем его в папку с исходным файлом ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & tResArr(i, 1) & "_" & replPunct(tResArr(i, 2)) ActiveWorkbook.Close False 'закрываем свежеиспеченную книгу End With Next
on_ 'Включаем пересчет формул, диалоги и обновление экрана MsgBox "Все готово!", vbOKOnly End Sub
Sub off_() With Application .DisplayAlerts = False .ScreenUpdating = False .Calculation = xlCalculationManual End With End Sub
Sub on_() With Application .DisplayAlerts = True .ScreenUpdating = True .Calculation = xlCalculationAutomatic End With End Sub
Function replPunct$(ByVal t$) t = Replace(t, """", "") t = Replace(t, "~*", "") t = Replace(t, "\", "") t = Replace(t, "/", "") t = Replace(t, ":", "") t = Replace(t, "<", "") t = Replace(t, ">", "") t = Replace(t, "~?", "") replPunct = t End Function
SkyPro, спасибо! Буду разбираться А в вашем приложенном файле содержится этот макрос? У меня пишет при открытии, что макросы Visual Basic для приложений VBA повреждены и были удалены.
SkyPro, спасибо! Буду разбираться А в вашем приложенном файле содержится этот макрос? У меня пишет при открытии, что макросы Visual Basic для приложений VBA повреждены и были удалены.JuliaPl
Содержится. Возможно у вас файл "ломает" антивирус, либо стоит английский системным языком. Если все вышеперечисленное не верно, то добавьте макрос сами в файл и возьмите модуль класа из темы по ссылке.
Содержится. Возможно у вас файл "ломает" антивирус, либо стоит английский системным языком. Если все вышеперечисленное не верно, то добавьте макрос сами в файл и возьмите модуль класа из темы по ссылке.SkyPro
Добрый день! Уважаемый SkyPro, я только сейчас добралась до этого макроса. Начала разбираться. Пока мало понятно.... Не могли бы вы пояснить, что такое Dim ADO As New ADO в самом начале макроса? Программа выдает в этом месте ошибку :((
Добрый день! Уважаемый SkyPro, я только сейчас добралась до этого макроса. Начала разбираться. Пока мало понятно.... Не могли бы вы пояснить, что такое Dim ADO As New ADO в самом начале макроса? Программа выдает в этом месте ошибку :((JuliaPl
Добрый день! Не могу разобраться в коде написанном SkyPro. Как выводить результат запроса но новый лист с учетом форматирования ячеек из исходной таблицы? Как сделать, чтобы книги сохранялись не в текущую папку, а в которую я ему укажу? Т.е перед выполнением макроса он спрашивает куда сохранять файлы и автоматом по заданной маске наименования сохраняет.
Добрый день! Не могу разобраться в коде написанном SkyPro. Как выводить результат запроса но новый лист с учетом форматирования ячеек из исходной таблицы? Как сделать, чтобы книги сохранялись не в текущую папку, а в которую я ему укажу? Т.е перед выполнением макроса он спрашивает куда сохранять файлы и автоматом по заданной маске наименования сохраняет.Krechet1987
Сообщение отредактировал Krechet1987 - Четверг, 23.06.2016, 17:27