Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Скрытие столбцов по значению флажков

Автор haldamir, 05.03.2012, 12:30

« назад - далее »

haldamir

Добрый день, дорогие гуру в области Excel.
Снова и снова обращаюсь к Вам за помощью.
Проблема далеко не нова, но разобраться с ней никак не могу. (то ли в виду своего скудоумия, то ли отсутствия понятных формулировок)
Суть задачи в следующем. Есть два листа: фильтр и результат - на листе фильтр флажки с именами столбцов листа результат (см. пример). Нужно, чтобы отображались только те столбцы, в который стоит флажок.
Огромная просьба решение сопроводить подробными комментариями, потому как результат в интернете нашел, а какими путями он сделан - непонятно... знаю, что нужно использовать элемент ActiveX, а как с ними работать - не понял...
Всем заранее спасибо.

Poltava

#1
Ну пока метры не подключились вставлю свои 5 копеек. Как это сделать без VBA не знаю.
но вот простейший вариант с VBA прилагаю ниже
1 действие заходим в свойства кнопочки и связываем ее с ячейкой
2 дописываем обработчик к коду VBA

Private Sub Worksheet_Activate() 'События при активизатции листа
   Application.ScreenUpdating = False 'Отключаем обновление экрана
   Columns("A:M").Select 'Выделяем скрываемую область
   Selection.EntireColumn.Hidden = True 'Скрываем область
   If Worksheets("фильтр").Range("D3").Text = "ИСТИНА" Then 'Проверяем условие на необходимость скрытия этого столбца
       Columns("A").Select 'Выделяем столбец
       Selection.EntireColumn.Hidden = False 'Отображаем столбец
   End If
       If Worksheets("фильтр").Range("D5").Text = "ИСТИНА" Then
       Columns("B").Select
       Selection.EntireColumn.Hidden = False
   End If
   ActiveWindow.ScrollColumn = 1 'Прокручиваем скрол до первой колонки листа
   Range("A1").Select ' Выделяем первую ячейку листа
   Application.ScreenUpdating = True 'Включаем обновление экрана
End Sub

Не притендную на абсолютную истину и глубокие знание но пока нет лучше сделал как умею
Кстати если уж использовать VBA все равно пришлось то может заменить элементы управления н аctiveX элементы. К ним проще обратиться через VBA и можно избавиться от промежуточного действия со вспомогательными ячейками
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Wasilic

haldamir, помнится, Вы отказались от флажков и решили перейти на выпадающий список. И вот снова хотите вернуться к флажкам. Чем не понравился список?
Если Вам надо скрывать-отображать не малое количество столбцов, то я считаю, что от флажков необходимо отказаться.
Только ни в прошлый раз ни сейчас, Вы не пояснили, каким образом Вы будете ими пользоваться. То есть, будете эти столбцы скрывать-отображать по одному несколько раз в процессе работы,  или может - отметив  несколько необходимых столбцов, нажать кнопку, открыть и с ними работать. А после снять метки, и нажатием кнопки скрыть их.
Определитесь и опишите, а то вы так долго не сможете получить правильное решение.
А пока вот такой пример
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

kuklp

Васильич, так при групповых удалениях галок каша получится. Чуть дополнил, теперь пересчет на каждый чих. Однако мне непонятно, зачем автору такой огород городить? Гораздо удобней и технологичней сгруппировать колонки по неделям, потом по месяцам и если надо, по кварталам. Все группировки перед глазами, не надо прыгать с листа на лист. Можно одним нажатием скрыть-раскрыть все. И никаких макросов:-)
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Wasilic

Цитата: KuklP от 06.03.2012, 00:50
Однако мне непонятно, зачем автору такой огород городить? Гораздо удобней и технологичней сгруппировать колонки по неделям, потом по месяцам и если надо, по кварталам. Все группировки перед глазами, не надо прыгать с листа на лист. Можно одним нажатием скрыть-раскрыть все. И никаких макросов:-)
Привет Сергей!
Опять же, это только догадки и мои и твои. А что хочет автор темы?
Если помнишь его первые вопросы, то он вообще пытался ставить флажки непосредственно на колонке.
Возможно твое предложение на счет группировки более рационально.
Пусть и над этим подумает. Решать ему.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

haldamir

Спасибо Всем большое за помощь. Все варианты вполне неплохо справляются с поставленной задачей. Чтобы расставить все точки над ё и чтобы никто не мучился догадками объясню. Есть список сайтов с огромным количеством параметров. (т.е. в первом столбце url, а дальше пошло: тиц, PR, и т.п.) с данным документом работают довольно большое количество людей, многие из которых с excel-ем знакомы очень относительно... Когда они открывают огромный документ в котором огромное количество нужных и не нужных им параметров они "пугаются" и "впадают в ступор" :))))) Теперь, с вашей помощью, они будут просто выбирать те параметры которые им нужны и ненужные параметры будут просто скрываться.
Wasilic, ваше решение проблемы наиболее полно решает поставленную задачу. Огромная просьба, не могли бы вы либо файлик прикрепить, либо просто сообщение прислать с пояснениями, каким образом вы поставили добавили возможность добавления галочки в ячейку, и организовали скрытие столбцов. Очень не хочется Вас утруждать, но это ОЧЕНЬ бы мне помогло :) заранее спасибо. :)

Wasilic

Цитата: haldamir от 06.03.2012, 10:29
Огромная просьба, не могли бы вы либо файлик прикрепить, либо просто сообщение прислать с пояснениями,
А Вы смотрели макрос? Там, для Вас, каждая строчка описана.
Нажмите на ярлычке листа "фильтр" правую кнопку мыши (ПКМ),
выберите "Искодный текст" и читайте.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.