Доброго времени суток, уважаемые Гуру! Требуется ваша профессиональная помощь по написанию скрипта. Суть такова: Имеется документ Excel с двумя листами "График ТО кусты", в котором собственно находится таблица годового графика, диапазон ячеек с именованным списком "результат". Лист2 - "Акты_ТО-2-3" с Актами ТО в равном количестве объектов из графика первого листа. Необходимо: скрыть диапазоны строк с Актами, у которых в "результат" "0" или "". Моих знаний в программировании не достаточно для написания макроса, применив цикл, а тот код, который я применил, он хоть и легкий, но процесс его набивки будет очень долог. Вот этот код:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Worksheets("Акты_ТО-2-3").Range("ТОк01").EntireRow.Hidden = (Range("P5") = 0) Or (Range("P5") = "") 'ТОк01 - с именованным списком Worksheets("Акты_ТО-2-3").Range("ТОк02").EntireRow.Hidden = (Range("P6") = 0) Or (Range("P6") = "") '............................. Worksheets("Акты_ТО-2-3").Range("$271:$297").EntireRow.Hidden = (Range("P15") = 0) Or (Range("P15") = "") 'с диаппазоном '............................. Worksheets("Акты_ТО-2-3").Range("$406:$432").EntireRow.Hidden = (Range("P20") = 0) Or (Range("P20") = "") '.............................. End Sub
[/vba]
И таких строк может быть очень много. Файл для примера я прикрепил, там же есть немного описания. Заранее спасибо за помощь и отзывчивость.
Доброго времени суток, уважаемые Гуру! Требуется ваша профессиональная помощь по написанию скрипта. Суть такова: Имеется документ Excel с двумя листами "График ТО кусты", в котором собственно находится таблица годового графика, диапазон ячеек с именованным списком "результат". Лист2 - "Акты_ТО-2-3" с Актами ТО в равном количестве объектов из графика первого листа. Необходимо: скрыть диапазоны строк с Актами, у которых в "результат" "0" или "". Моих знаний в программировании не достаточно для написания макроса, применив цикл, а тот код, который я применил, он хоть и легкий, но процесс его набивки будет очень долог. Вот этот код:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Worksheets("Акты_ТО-2-3").Range("ТОк01").EntireRow.Hidden = (Range("P5") = 0) Or (Range("P5") = "") 'ТОк01 - с именованным списком Worksheets("Акты_ТО-2-3").Range("ТОк02").EntireRow.Hidden = (Range("P6") = 0) Or (Range("P6") = "") '............................. Worksheets("Акты_ТО-2-3").Range("$271:$297").EntireRow.Hidden = (Range("P15") = 0) Or (Range("P15") = "") 'с диаппазоном '............................. Worksheets("Акты_ТО-2-3").Range("$406:$432").EntireRow.Hidden = (Range("P20") = 0) Or (Range("P20") = "") '.............................. End Sub
[/vba]
И таких строк может быть очень много. Файл для примера я прикрепил, там же есть немного описания. Заранее спасибо за помощь и отзывчивость.Storm-103
Добрый день. Если структура актов такая же как и в примере, можно скрывать вот таким макросом. [vba]
Код
Sub hide_() arr_ = Sheets(1).Range("P5:P32").Value With Sheets(2) For x = 1 To UBound(arr_) Select Case arr_(x, 1) Case 0, "" .Rows(27 * (x - 1) + 1 & ":" & (27 * (x - 1) + 27)).Hidden = True End Select Next x End With End Sub
[/vba]
Добрый день. Если структура актов такая же как и в примере, можно скрывать вот таким макросом. [vba]
Код
Sub hide_() arr_ = Sheets(1).Range("P5:P32").Value With Sheets(2) For x = 1 To UBound(arr_) Select Case arr_(x, 1) Case 0, "" .Rows(27 * (x - 1) + 1 & ":" & (27 * (x - 1) + 27)).Hidden = True End Select Next x End With End Sub
Что-то не сростается с этим макросом. При выборе месяца и переходе на лист2, кол-во графиков остается без изменения, не скрывается группа строк из условия. При запуске макроса вручную, да, скрываются, но не те. Если выбрать любой другой месяц из лист1, изменений на лист2 тоже нет. Повторный запуск макроса скрывает полностью все строки.
Что-то не сростается с этим макросом. При выборе месяца и переходе на лист2, кол-во графиков остается без изменения, не скрывается группа строк из условия. При запуске макроса вручную, да, скрываются, но не те. Если выбрать любой другой месяц из лист1, изменений на лист2 тоже нет. Повторный запуск макроса скрывает полностью все строки.Storm-103
Ну так я привел код для скрытия. Про обработку изменений и отображения скрытых строк Вы не спрашивали, подумал, что допилите своими силами. В модуль листа1 [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$P$4" Then Exit Sub Sheets(2).Rows("1:757").Hidden = False hide_ End Sub
[/vba]
Ну так я привел код для скрытия. Про обработку изменений и отображения скрытых строк Вы не спрашивали, подумал, что допилите своими силами. В модуль листа1 [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$P$4" Then Exit Sub Sheets(2).Rows("1:757").Hidden = False hide_ End Sub
Просто нет слов Всё работает согласно желаемому результату! Спасибо огромное, не первый раз обращаюсь за помощью на ваш сайт. Вы лучшие. Буду пробовать усложнять себе задачу дополнительными листами и данными.
Просто нет слов Всё работает согласно желаемому результату! Спасибо огромное, не первый раз обращаюсь за помощью на ваш сайт. Вы лучшие. Буду пробовать усложнять себе задачу дополнительными листами и данными.Storm-103
Сообщение отредактировал Storm-103 - Вторник, 19.12.2017, 06:54
Доброе утро, уважаемый sboy! Переборов свою скромность, решил обратиться за помощью еще раз по этой же теме. Можно было бы решить задачу при помощи формул, но макрос выглядит красивее. Вопрос: каким образом можно сделать выборку данных с "лист1" и поместить в диапазон на "лист2" по условию? Цель: - найти в диапазоне "P5:P32" значение "ТО-1" (лист1); - из диапазона "В5:В32" (лист1), через запятую скопировать данные в диапазон "Н10:АЕ12" (лист2), при этом текст "Кустовая площадка №" исключить.
Очень рассчитываю на Вашу помощь.
Доброе утро, уважаемый sboy! Переборов свою скромность, решил обратиться за помощью еще раз по этой же теме. Можно было бы решить задачу при помощи формул, но макрос выглядит красивее. Вопрос: каким образом можно сделать выборку данных с "лист1" и поместить в диапазон на "лист2" по условию? Цель: - найти в диапазоне "P5:P32" значение "ТО-1" (лист1); - из диапазона "В5:В32" (лист1), через запятую скопировать данные в диапазон "Н10:АЕ12" (лист2), при этом текст "Кустовая площадка №" исключить.