Макрос для заполнения динамичной таблицы данными из другого листа книги с проверкой на дубликаты, Нужно прокомментировать код, чтобы его модернизировать дальше
Пожалуйста если это не трудно, сделайте комментарии в коде (см. в конце поста, надеюсь автор не будет против), я хочу сам настроить макрос под себя, чтобы не наглеть и не просить решить задачу.
Мне необходимо регулярно сводить одинаковые листы разных книг в одну. Сейчас мучаюсь руками, но это постоянно добавляет дубли, потому как фильтр по возрастанию не всегда установлен и приходится при копипасте ручками чистить. Файлы неизбежно растут и количество добавляемых дублей тоже. Суть макроса не просто собрать, а добавлять новые уникальные значения к уже имеющимся в сводной книге. Собирает данные из сетевых папок, названия книг исходников разные, названия листа одинаковые, формат таблицы на листе одинаковый. В принципе все как в коде описанном выше.
У меня есть поле которое может служить параметром поиска и добавления, это номер заявки (во всех книгах сейчас! это диапазон EB3:EB1002, но может поменяться).
Сразу возник вопрос, у меня часть значений поля номер заявки выглядит как #Н/Д, т.к. это расчетное значение и пока строка не заполнена, соответственно и считать нечего. Вопрос: это значение будет являться параметром для сбора строк в сводную? Если да, то как можно потом эти строки удалить из собранной динамичной таблицы?
Копировать в сводную книгу нужно всю строку с найденным уникальным значением ячейки EB(x), если быть точнее это с A до EN(включительно), для инфо на EN таблица не заканчивается, остальная часть заполняется в сводной и обновляется в исходниках для информирования менеджеров.
Заранее признателен за помощь (комментирование кода или советы как это реализовать)!
Код
Option Explicit
'Kuzmich октябрь 2016 г
'http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=83725
Dim i As Integer
Dim iLastNew As Integer
Sub Кнопка14_Щелкнуть()
Dim FoundSupplier As Range
Dim FoundMagazin As Range
Dim iLastRow As Integer
Dim FAdr As String
Dim FAdrMagaz As String
Dim flag As Boolean
Application.ScreenUpdating = False
With Worksheets("Page1")
Set FoundSupplier = .Columns("L:M").Find("Поставщик", , xlValues, xlWhole)
If Not FoundSupplier Is Nothing Then
FAdr = FoundSupplier.Address
Do
iLastRow = .Cells(FoundSupplier.Row + 2, 12).End(xlDown).Row
For i = FoundSupplier.Row + 2 To iLastRow
Set FoundMagazin = Columns("E").Find(.Cells(i, 12), , xlValues, xlWhole)
If Not FoundMagazin Is Nothing Then
FAdrMagaz = FoundMagazin.Address
flag = False
Do
iLastNew = Range("A1").End(xlDown).Row + 1
If .Cells(i, 5) = Cells(FoundMagazin.Row, 2) And _
.Cells(i, 10) = Cells(FoundMagazin.Row, 3) And _
.Cells(i, 16) = Cells(FoundMagazin.Row, 7) Then
flag = True 'есть на листе NEWСверка такая накладная
End If
Set FoundMagazin = Columns("E").FindNext(FoundMagazin)
Loop While FoundMagazin.Address <> FAdrMagaz
If Not flag Then
Call iInsertRow
End If
Else 'новый поставщик, которого нет на листе NEWСверка
iLastNew = Range("A1").End(xlDown).Row + 1
Call iInsertRow
End If
Next
Set FoundSupplier = .Columns("L:M").Find("Поставщик", FoundSupplier)
Loop While FoundSupplier.Address <> FAdr
End If
End With
Application.ScreenUpdating = True
End Sub
Sub iInsertRow()
Rows(iLastNew).Insert
With Worksheets("Page1")
Cells(iLastNew, 1) = .Range("C" & i) 'тип
Cells(iLastNew, 2) = .Range("E" & i) 'номер
Cells(iLastNew, 3) = .Range("J" & i) 'дата
Cells(iLastNew, 4) = .Range("K" & i) 'валюта
Cells(iLastNew, 5) = .Range("L" & i) 'поставщик
Cells(iLastNew, 7) = .Range("P" & i) 'сумма б/н
Cells(iLastNew, 7).NumberFormat = "#,##0.00"
End With
End Sub
Помогите пожалуйста, как мне реализовать запуск цикла при нажатии кнопки.
В задачу цикла нужно вложить: проверка ячейки [Книга1.xlsx]Лист1'!A1 (если НЕ ПУСТАЯ, берёт значение и подставляет в ячейку A2 текущей книги и сохраняет текущую книгу с названием в ячейке А3, и так идет вниз по списку, а если ПУСТАЯ, значит список закончился и циклу тоже нужно закончиться).
При этом мне еще нужно ячейку А4 выравнивать по высоте, т.к. значение в ячейке A4, по количеству символов получается разное, а нужно чтобы текст был виден полностью!
я с VBA пока, что по имени отчеству и только на ВЫ, но мне благодаря форумам и постам удалось реализовать следующее: Собственными руками указываю значение из [Книга1.xlsx]Лист1'!A1 в A2 текущей книги. Далее немного Эксель магии и что нужно ВПРится и Заполняется "само")))). Руками ячейку выравниваю по высоте. Нажимаю кнопку "Сохранить" (в ней настроено сохранение книги с именем из ячейки А3 в указанную папку с определенным расширением файла).
К сожалению приложить файлы не получится, т.к. после ручного внесения значения в книгу, данные берутся из 3-4 других книг и на основании этого заполняется определенная форма документа, да еще и 2ой лист в книге с кнопкой "Сохранить" тоже заполняется определенным образом!
Потом я отдаю эти файлы, другому сотруднику и он вносит свои дополнения и печатает.
Код кнопки "Сохранить" ниже
Код
Sub MySaveName()
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="C:\1\" & Range("a3").Value & "xls"
Application.DisplayAlerts = True
End Sub
Помогите пожалуйста, как мне реализовать запуск цикла при нажатии кнопки.
В задачу цикла нужно вложить: проверка ячейки [Книга1.xlsx]Лист1'!A1 (если НЕ ПУСТАЯ, берёт значение и подставляет в ячейку A2 текущей книги и сохраняет текущую книгу с названием в ячейке А3, и так идет вниз по списку, а если ПУСТАЯ, значит список закончился и циклу тоже нужно закончиться).
При этом мне еще нужно ячейку А4 выравнивать по высоте, т.к. значение в ячейке A4, по количеству символов получается разное, а нужно чтобы текст был виден полностью!
я с VBA пока, что по имени отчеству и только на ВЫ, но мне благодаря форумам и постам удалось реализовать следующее: Собственными руками указываю значение из [Книга1.xlsx]Лист1'!A1 в A2 текущей книги. Далее немного Эксель магии и что нужно ВПРится и Заполняется "само")))). Руками ячейку выравниваю по высоте. Нажимаю кнопку "Сохранить" (в ней настроено сохранение книги с именем из ячейки А3 в указанную папку с определенным расширением файла).
К сожалению приложить файлы не получится, т.к. после ручного внесения значения в книгу, данные берутся из 3-4 других книг и на основании этого заполняется определенная форма документа, да еще и 2ой лист в книге с кнопкой "Сохранить" тоже заполняется определенным образом!
Потом я отдаю эти файлы, другому сотруднику и он вносит свои дополнения и печатает.
Код кнопки "Сохранить" ниже
Код
Sub MySaveName()
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="C:\1\" & Range("a3").Value & "xls"
Application.DisplayAlerts = True
End Sub
Есть задача привести значение столбца к единому формату, в нашем случае телефон. Сделать можно или индивидуально для каждой ячейки в столбце и протянуть или через обработку всего столбца сразу, например по нажатию кнопки, которой будет заголовок столбца. Выбор решения зависит от нагрузки на файл, нужно чтобы файл не стал огромным при использовании макросов для например 10-15 столбцов с разными параметрами. Ранее находил макрос " =repl(ячейка для обработки;ячейка с перечислением удаляемых символов) ", но сейчас он не работает и не могу найти сам макрос. Если у кого-то из формучан есть опыт или что-то подобное помогите пожалуйста, может я не нашел тему которую обсуждали ранее.