День добрый. Я столкнулся с проблемой, надеялся что смогу освоить написание макросов в эксель в короткие сроки, но перерыв инет понял что тут не все так просто (не могу понять сходу алгоритмы и логику - во всех макросах различная логика) А стоит вроде простая задача - есть безумная таблица (см. вложение), в которой необходимо скрывать и раскрывать столбцы исходя из следующих критериев которые хотелось задавать/снимать по следующим критериям через выпадающие меню: - период (выбрать один или несколько месяцев) - в строке 3 - ответственный (маркетинг или продажи) - в строке 4 - тип таблицы (план, корр 1 итд) - в строке 5
Понимаю что запуск изменения скрытых столбцов возможен только нажатием отдельной кнопки после выбора по заданным критериям
Группировка тут не поможет Упростить таблицу - тоже не поможет (ибо так задано свыше)
Прошу помочь если есть возможность (сильно не надеюсь, но вдруг найдется кто) В любом случае спасибо
День добрый. Я столкнулся с проблемой, надеялся что смогу освоить написание макросов в эксель в короткие сроки, но перерыв инет понял что тут не все так просто (не могу понять сходу алгоритмы и логику - во всех макросах различная логика) А стоит вроде простая задача - есть безумная таблица (см. вложение), в которой необходимо скрывать и раскрывать столбцы исходя из следующих критериев которые хотелось задавать/снимать по следующим критериям через выпадающие меню: - период (выбрать один или несколько месяцев) - в строке 3 - ответственный (маркетинг или продажи) - в строке 4 - тип таблицы (план, корр 1 итд) - в строке 5
Понимаю что запуск изменения скрытых столбцов возможен только нажатием отдельной кнопки после выбора по заданным критериям
Группировка тут не поможет Упростить таблицу - тоже не поможет (ибо так задано свыше)
Прошу помочь если есть возможность (сильно не надеюсь, но вдруг найдется кто) В любом случае спасибоmitox
Доброго вечера! у вас в файле именованные диапазоны с битыми ссылками и с ссылками на другую книгу типа вот таких Мои документы\AppData\Local\Temp\Деловые игры\Экономика\2018\Бюджет план новый формат\[План продаж_15032018_2.xlsm]Продажи'!$C:$FF
это вы пытались списки делать? или это изначально такой файл у вас с таблицей?
в файле сделайте вариант как изначально выглядит, и как вы хоти чтобы выглядело при изменении ато как то непонятно описали по строкам 3,4,5 не совпадают пожелания с тем что в файле указано.
Доброго вечера! у вас в файле именованные диапазоны с битыми ссылками и с ссылками на другую книгу типа вот таких Мои документы\AppData\Local\Temp\Деловые игры\Экономика\2018\Бюджет план новый формат\[План продаж_15032018_2.xlsm]Продажи'!$C:$FF
это вы пытались списки делать? или это изначально такой файл у вас с таблицей?
в файле сделайте вариант как изначально выглядит, и как вы хоти чтобы выглядело при изменении ато как то непонятно описали по строкам 3,4,5 не совпадают пожелания с тем что в файле указано.K-SerJC
День добрый. Битые ссылки я убрал (это я называл массивы на листах в рабочем файле для работы с формулой ВПР)
Наверно упрощу вопрос (умерю свой аппетит) Критерия для отбора два: - отображать колонки где в строке 5 выбран из выпадающего списка одно из наименований (там указаны: план, корр 1, корр 2, корр 3, корр 4) - отображать колонки где в строке 4 выбрано наименование подразделения (маркетинг или продажи) - запуск макроса кнопкой после выбора позиций критериям
Во вложении: - на листе 1 я скрыл все колонки и оставил только те где я захотел видеть "план" по "маркетинг" - на листе 2 я сформировал таблицу где захотел увидеть "корр 1" по "маркетингу" и "продажам" Вариантов из критериев может быть и больше (к примеру хочу увидеть план и корр, по маркетингу, и т.д.
День добрый. Битые ссылки я убрал (это я называл массивы на листах в рабочем файле для работы с формулой ВПР)
Наверно упрощу вопрос (умерю свой аппетит) Критерия для отбора два: - отображать колонки где в строке 5 выбран из выпадающего списка одно из наименований (там указаны: план, корр 1, корр 2, корр 3, корр 4) - отображать колонки где в строке 4 выбрано наименование подразделения (маркетинг или продажи) - запуск макроса кнопкой после выбора позиций критериям
Во вложении: - на листе 1 я скрыл все колонки и оставил только те где я захотел видеть "план" по "маркетинг" - на листе 2 я сформировал таблицу где захотел увидеть "корр 1" по "маркетингу" и "продажам" Вариантов из критериев может быть и больше (к примеру хочу увидеть план и корр, по маркетингу, и т.д.mitox
Макрос скрытия по содержанию ячейки в определенной строке я нашел, но это не решает задачу выбора по двум критериям и множеством значений в каждом из них которые нужно задавать через выпадающие меню
[vba]
Код
Sub Hide() Dim cell As Range Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения For Each cell In ActiveSheet.UsedRange.Rows(1).Cells 'проходим по всем ячейкам первой строки If cell.Value = "x" Then cell.EntireColumn.Hidden = True 'если в ячейке x - скрываем столбец Next For Each cell In ActiveSheet.UsedRange.Columns(1).Cells 'проходим по всем ячейкам первого столбца If cell.Value = "x" Then cell.EntireRow.Hidden = True 'если в ячейке x - скрываем строку Next Application.ScreenUpdating = True End Sub
Sub Show() Columns.Hidden = False 'отменяем все скрытия строк и столбцов Rows.Hidden = False End Sub
[/vba]
Заменил в нем поиск "х" на ссылку на ячейку где разместил выпадающий список - но получается что макрос скрывает выбранное мною одно значение, а нужно наоборот - скрывать все прочие кроме выбранного. Ищу дальше - в помощи очень нуждаюсь
Макрос скрытия по содержанию ячейки в определенной строке я нашел, но это не решает задачу выбора по двум критериям и множеством значений в каждом из них которые нужно задавать через выпадающие меню
[vba]
Код
Sub Hide() Dim cell As Range Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения For Each cell In ActiveSheet.UsedRange.Rows(1).Cells 'проходим по всем ячейкам первой строки If cell.Value = "x" Then cell.EntireColumn.Hidden = True 'если в ячейке x - скрываем столбец Next For Each cell In ActiveSheet.UsedRange.Columns(1).Cells 'проходим по всем ячейкам первого столбца If cell.Value = "x" Then cell.EntireRow.Hidden = True 'если в ячейке x - скрываем строку Next Application.ScreenUpdating = True End Sub
Sub Show() Columns.Hidden = False 'отменяем все скрытия строк и столбцов Rows.Hidden = False End Sub
[/vba]
Заменил в нем поиск "х" на ссылку на ячейку где разместил выпадающий список - но получается что макрос скрывает выбранное мною одно значение, а нужно наоборот - скрывать все прочие кроме выбранного. Ищу дальше - в помощи очень нуждаюсьmitox
Сообщение отредактировал mitox - Пятница, 16.03.2018, 08:09
Видимо алгоритм макроса должен искать в заданном диапазоне строки, а не во всей (нужно задать диапазон), и скрывать все кроме выбранного, при этом проверять второй критерий и учитывать его значение. С диапазоном проблем не возникло, а вот с учетом второго критерия и срытия кроме выбранного у меня беда [vba]
Код
Sub Скрыть_Процесс() Dim cell As Range Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения For Each cell In ActiveSheet.UsedRange.Range("k4:es4").Cells 'проходим по заданному диапазону If cell.Value = Range("c3") Then cell.EntireColumn.Hidden = True 'если в ячейке выбранное значение в ячейке с3 - скрываем столбец Next Application.ScreenUpdating = True End Sub Sub Скрыть_Этап() Dim cell As Range Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения For Each cell In ActiveSheet.UsedRange.Range("k5:es5").Cells 'проходим по проходим по заданному диапазону If cell.Value = Range("d3") Then cell.EntireColumn.Hidden = True 'если в ячейке выбранное значение в ячейке d3 - скрываем столбец Next Application.ScreenUpdating = True End Sub
Sub Раскрыть_все() Columns.Hidden = False 'отменяем все скрытия строк и столбцов Rows.Hidden = False End Sub
[/vba]
Прикрепил файл (на листе 2 - разместил содержание диапазонов и задал им наименование чтобы настроить списки)
Видимо алгоритм макроса должен искать в заданном диапазоне строки, а не во всей (нужно задать диапазон), и скрывать все кроме выбранного, при этом проверять второй критерий и учитывать его значение. С диапазоном проблем не возникло, а вот с учетом второго критерия и срытия кроме выбранного у меня беда [vba]
Код
Sub Скрыть_Процесс() Dim cell As Range Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения For Each cell In ActiveSheet.UsedRange.Range("k4:es4").Cells 'проходим по заданному диапазону If cell.Value = Range("c3") Then cell.EntireColumn.Hidden = True 'если в ячейке выбранное значение в ячейке с3 - скрываем столбец Next Application.ScreenUpdating = True End Sub Sub Скрыть_Этап() Dim cell As Range Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения For Each cell In ActiveSheet.UsedRange.Range("k5:es5").Cells 'проходим по проходим по заданному диапазону If cell.Value = Range("d3") Then cell.EntireColumn.Hidden = True 'если в ячейке выбранное значение в ячейке d3 - скрываем столбец Next Application.ScreenUpdating = True End Sub
Sub Раскрыть_все() Columns.Hidden = False 'отменяем все скрытия строк и столбцов Rows.Hidden = False End Sub
[/vba]
Прикрепил файл (на листе 2 - разместил содержание диапазонов и задал им наименование чтобы настроить списки)mitox
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C3,F3,G3")) Is Nothing Then Exit Sub
Dim rHid As Range, r As Range, MrPr$, Pl$, Kor$
MrPr = Range("C3").Value 'маркетинг, план, * Pl = Range("F3").Value Kor = Range("G3").Value Set rHid = Range("A1")
With Range("K4:ES5") For Each r In .Rows(1).Cells If r.Value Like MrPr Then If r(2, 1) = Pl Or r(2, 1) = Kor Then Set rHid = Union(rHid, r) End If End If Next r .EntireColumn.Hidden = True Intersect(.Cells, rHid).EntireColumn.Hidden = False End With End Sub
[/vba]
mitox, привет Попробуйте [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C3,F3,G3")) Is Nothing Then Exit Sub
Dim rHid As Range, r As Range, MrPr$, Pl$, Kor$
MrPr = Range("C3").Value 'маркетинг, план, * Pl = Range("F3").Value Kor = Range("G3").Value Set rHid = Range("A1")
With Range("K4:ES5") For Each r In .Rows(1).Cells If r.Value Like MrPr Then If r(2, 1) = Pl Or r(2, 1) = Kor Then Set rHid = Union(rHid, r) End If End If Next r .EntireColumn.Hidden = True Intersect(.Cells, rHid).EntireColumn.Hidden = False End With End Sub
With Range("K4:ES5") For Each r In .Rows(1).Cells If r.Value Like MrPr Then If r(2, 1) = Pl Or r(2, 1) = Kor Then Set rHid = Union(rHid, r) End If End If Next r .EntireColumn.Hidden = True Intersect(.Cells, rHid).EntireColumn.Hidden = False End With End Sub
[/vba]
Спасибо огромное. Так проще конечно же. А что нужно сделать чтобы убрать отбор по ячейке G3 (полезно, но не в моем случае)? Видимо так [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C3,f3")) Is Nothing Then Exit Sub
With Range("K4:ES5") For Each r In .Rows(1).Cells If r.Value Like MrPr Then If r(2, 1) = Pl Or r(2, 1) = Kor Then Set rHid = Union(rHid, r) End If End If Next r .EntireColumn.Hidden = True Intersect(.Cells, rHid).EntireColumn.Hidden = False End With End Sub
Можно, но это путает не искушенного пользователя - и это мои сотрудники (хотя могут и привыкнуть). Да и на сравнении кодов начинаешь понимать как они работают.
Можно, но это путает не искушенного пользователя - и это мои сотрудники (хотя могут и привыкнуть). Да и на сравнении кодов начинаешь понимать как они работают.mitox
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C5,f5,g5")) Is Nothing Then Exit Sub
Dim rHid As Range, r As Range, MrPr$, Pl$, Kor$
MrPr = Range("C5").Value 'ìàðêåòèíã, ïëàí, * Pl = Range("f5").Value Kor = Range("g5").Value Set rHid = Range("A1")
With Range("b9:c16") For Each r In .Rows(1).Cells If r.Value Like MrPr Then If r(2, 1) = Pl Or r(2, 1) = Kor Then Set rHid = Union(rHid, r) End If End If Next r .EntireRow.Hidden = True Intersect(.Cells, rHid).EntireRow.Hidden = False End With End Sub
[/vba]
Поправил, но где то ошибка [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C5,f5,g5")) Is Nothing Then Exit Sub
Dim rHid As Range, r As Range, MrPr$, Pl$, Kor$
MrPr = Range("C5").Value 'ìàðêåòèíã, ïëàí, * Pl = Range("f5").Value Kor = Range("g5").Value Set rHid = Range("A1")
With Range("b9:c16") For Each r In .Rows(1).Cells If r.Value Like MrPr Then If r(2, 1) = Pl Or r(2, 1) = Kor Then Set rHid = Union(rHid, r) End If End If Next r .EntireRow.Hidden = True Intersect(.Cells, rHid).EntireRow.Hidden = False End With End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C5,F5,G5")) Is Nothing Then Exit Sub
Dim rHid As Range, r As Range, MrPr$, Pl$, Kor$ MrPr = Range("C5").Value 'ìàðêåòèíã, ïëàí, * Pl = Range("F5").Value: Kor = Range("G5").Value: Set rHid = Range("A1")
With Range("B9:C16") For Each r In .Columns(1).Cells If r.Value Like MrPr Then If r(1, 2) = Pl Or r(1, 2) = Kor Then Set rHid = Union(rHid, r) End If End If Next r .EntireRow.Hidden = True Intersect(.Cells, rHid).EntireRow.Hidden = False End With End Sub
[/vba]
вот
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C5,F5,G5")) Is Nothing Then Exit Sub
Dim rHid As Range, r As Range, MrPr$, Pl$, Kor$ MrPr = Range("C5").Value 'ìàðêåòèíã, ïëàí, * Pl = Range("F5").Value: Kor = Range("G5").Value: Set rHid = Range("A1")
With Range("B9:C16") For Each r In .Columns(1).Cells If r.Value Like MrPr Then If r(1, 2) = Pl Or r(1, 2) = Kor Then Set rHid = Union(rHid, r) End If End If Next r .EntireRow.Hidden = True Intersect(.Cells, rHid).EntireRow.Hidden = False End With End Sub