Добрый день! Помогите, пожалуйста, с макросом:) Задача состоит в следующем: на 6-ом листе документа есть таблица, в которой отдельные данные выделены соответствующим цветом, эти данные нужно разнести по 4-ем листам (первый выступает в качестве примера), в зависимости от имени и инициалов человека, которое в таблице указано под столбцом «E», а на листах в ячейке «A2». Информация, выделенная красным, говорит о месте, куда прописывать «зеленые» и «синие» данные, затем в нужной графе «зеленая» строчка располагается снизу, «синяя» -сверху, думаю, из примера будет все понятно. Файл приложен. P.S. В оригинальном файле информация в виде таблицы, подлежащая сортировке, находится на 262 листе, а листов, куда нужно все это разместить - 260 (идут подряд с 1 по 260), напишите, пожалуйста, код с учетом этого. Огромное Вам спасибо!
Добрый день! Помогите, пожалуйста, с макросом:) Задача состоит в следующем: на 6-ом листе документа есть таблица, в которой отдельные данные выделены соответствующим цветом, эти данные нужно разнести по 4-ем листам (первый выступает в качестве примера), в зависимости от имени и инициалов человека, которое в таблице указано под столбцом «E», а на листах в ячейке «A2». Информация, выделенная красным, говорит о месте, куда прописывать «зеленые» и «синие» данные, затем в нужной графе «зеленая» строчка располагается снизу, «синяя» -сверху, думаю, из примера будет все понятно. Файл приложен. P.S. В оригинальном файле информация в виде таблицы, подлежащая сортировке, находится на 262 листе, а листов, куда нужно все это разместить - 260 (идут подряд с 1 по 260), напишите, пожалуйста, код с учетом этого. Огромное Вам спасибо!VladimirTavr
При активном 262 листе и при условии, что все 260 листов есть в книге, запустить макрос [vba]
Код
Sub Tablica262() Dim i As Long Dim iLastRow As Long Dim iData As Date Dim Nomer As Long Dim NomerList As Integer Dim iMonth As String Dim iYear As Long Dim FoundMonth As Range Dim FoundYear As Range iLastRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To iLastRow With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\d{1,2}\.\d{4}(?=г.)" iData = "01." & .Execute(Cells(i, "B"))(0) iMonth = UCase(Format(iData, "MMMM")) iYear = WorksheetFunction.Text(iData, "YYYY") .Pattern = "(\d{6}) от\s{1,4}(\d{1,2}\.\d{1,2}\.\d{4})$" Nomer = .Execute(Cells(i, "B"))(0).SubMatches(0) iData = .Execute(Cells(i, "B"))(0).SubMatches(1) .Pattern = "\d{1,3}" NomerList = .Execute(Cells(i, "E"))(0) End With With Worksheets("Лист" & NomerList) Set FoundMonth = .Rows(10).Find(iMonth, , xlValues, xlWhole) Set FoundYear = .Columns(1).Find(iYear, , xlValues, xlWhole) .Cells(FoundYear.Row, FoundMonth.Column) = Nomer .Cells(FoundYear.Row + 1, FoundMonth.Column) = iData .Range("A2") = Cells(i, "E") End With Next End Sub
[/vba]
Цитата
находится на 262 листе
При активном 262 листе и при условии, что все 260 листов есть в книге, запустить макрос [vba]
Код
Sub Tablica262() Dim i As Long Dim iLastRow As Long Dim iData As Date Dim Nomer As Long Dim NomerList As Integer Dim iMonth As String Dim iYear As Long Dim FoundMonth As Range Dim FoundYear As Range iLastRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To iLastRow With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\d{1,2}\.\d{4}(?=г.)" iData = "01." & .Execute(Cells(i, "B"))(0) iMonth = UCase(Format(iData, "MMMM")) iYear = WorksheetFunction.Text(iData, "YYYY") .Pattern = "(\d{6}) от\s{1,4}(\d{1,2}\.\d{1,2}\.\d{4})$" Nomer = .Execute(Cells(i, "B"))(0).SubMatches(0) iData = .Execute(Cells(i, "B"))(0).SubMatches(1) .Pattern = "\d{1,3}" NomerList = .Execute(Cells(i, "E"))(0) End With With Worksheets("Лист" & NomerList) Set FoundMonth = .Rows(10).Find(iMonth, , xlValues, xlWhole) Set FoundYear = .Columns(1).Find(iYear, , xlValues, xlWhole) .Cells(FoundYear.Row, FoundMonth.Column) = Nomer .Cells(FoundYear.Row + 1, FoundMonth.Column) = iData .Range("A2") = Cells(i, "E") End With Next End Sub
Kuzmich, спасибо огромное за Ваш труд! К сожалению, выдает ошибку run-time error '9' Subscript out of range. ПОдскажите, пожалуйста, как сделать 262 лист активным и влияет ли название листов на работу макроса?
Kuzmich, спасибо огромное за Ваш труд! К сожалению, выдает ошибку run-time error '9' Subscript out of range. ПОдскажите, пожалуйста, как сделать 262 лист активным и влияет ли название листов на работу макроса?VladimirTavr
Сообщение отредактировал VladimirTavr - Суббота, 30.05.2020, 13:09
Kuzmich, да, на примере сработал. Листы переименовал, теперь их 262 (были дублеры), теперь активный 263. пишет ошибку Run-time error "5" invalid procedure call or argument. И, я, похоже, понял, в чем суть проблемы: в таблице, откуда нужно перенести информацию, фамилия и инициалы написаны так: "ВАЛЕРЬЯНОВ П Н 80", а на листе так: "Валерьянов Петр Николаевич 80". Есть ли возможность игнорирования регистра, а также осуществления работы макроса по фамилии и номеру? Я прошу прощения за невнимательность.
Kuzmich, да, на примере сработал. Листы переименовал, теперь их 262 (были дублеры), теперь активный 263. пишет ошибку Run-time error "5" invalid procedure call or argument. И, я, похоже, понял, в чем суть проблемы: в таблице, откуда нужно перенести информацию, фамилия и инициалы написаны так: "ВАЛЕРЬЯНОВ П Н 80", а на листе так: "Валерьянов Петр Николаевич 80". Есть ли возможность игнорирования регистра, а также осуществления работы макроса по фамилии и номеру? Я прошу прощения за невнимательность.VladimirTavr
Сообщение отредактировал VladimirTavr - Суббота, 30.05.2020, 16:00
Макрос берет имя листа из ячеек столбца Е общего листа (в примере Лист6) Прокофьев П П 5 - значит Лист5. В макросе нет проверки существует ли лист5 в книге. Посмотрите в редакторе на какой строке макрос выдает ошибку. Пройдите код в пошаговом режиме.
Макрос берет имя листа из ячеек столбца Е общего листа (в примере Лист6) Прокофьев П П 5 - значит Лист5. В макросе нет проверки существует ли лист5 в книге. Посмотрите в редакторе на какой строке макрос выдает ошибку. Пройдите код в пошаговом режиме.Kuzmich
Не видя ваших реальных данных, трудно судить об ошибках. Может надо привести пример листов на 5-6. Какой разрядности м.б. Nomer? В вашем примере это было 6
Не видя ваших реальных данных, трудно судить об ошибках. Может надо привести пример листов на 5-6. Какой разрядности м.б. Nomer? В вашем примере это было 6Kuzmich