Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Вася_Пупкин от 14.09.2015, 13:04

Название: Помогите скрыть колонки по заданному значению
Отправлено: Вася_Пупкин от 14.09.2015, 13:04
Добрый день,
друзья, помогите с решением.

Есть выпадающий список и 6-ть. колонок с заглавием "Объект сравнения №..."
Ожидаемый результат: при выборе из выпадающего списка (ВС) количество объектов сравнения (например 3 шт.) остальные колонки (Объект сравнения №4, №5, №6) должны скрываться.

Пробовал применить следующий макрос:
Option Explicit
Sub test()
    Dim sht As Worksheet
    Dim a As Integer
        Set sht = ThisWorkbook.Worksheets("СП")
       If sht.Cells(3, 4) = 1 Then
        For a = 6 To 10
            sht.Columns(a).Hidden = True
        Next a
    Else
        For a = 6 To 10
            sht.Columns(a).Hidden = False
        Next a
    End If
    If sht.Cells(3, 4) = 2 Then
        For a = 7 To 10
            sht.Columns(a).Hidden = True
        Next a
    Else
        For a = 7 To 10
            sht.Columns(a).Hidden = False
        Next a
    End If
    If sht.Cells(3, 4) = 3 Then
        For a = 8 To 10
            sht.Columns(a).Hidden = True
        Next a
    Else
        For a = 8 To 10
            sht.Columns(a).Hidden = False
        Next a
    End If
        If sht.Cells(3, 4) = 4 Then
        For a = 9 To 10
            sht.Columns(a).Hidden = True
        Next a
    Else
        For a = 9 To 10
            sht.Columns(a).Hidden = False
        Next a
    End If
            If sht.Cells(3, 4) = 5 Then
        For a = 10 To 10
            sht.Columns(a).Hidden = True
        Next a
    Else
        For a = 10 To 10
            sht.Columns(a).Hidden = False
        Next a
    End If
                If sht.Cells(3, 4) = 6 Then
        For a = 11 To 11
            sht.Columns(a).Hidden = True
        Next a
    Else
        For a = 11 To 11
            sht.Columns(a).Hidden = False
        Next a
    End If
End Sub

Результат: программа отображает 5-ть колонок при значениях ВС от 1 до 5 и 6-ть колонок при значении 6.

Текст форматировали, а код забыли [МОДЕРАТОР]
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: vikttur от 14.09.2015, 14:11
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Range("D3"), Target) Is Nothing Then
        With Application: .ScreenUpdating = False: .EnableEvents = False: End With
       
        Columns("E:J").Hidden = True
        Columns(Cells(3, 4).Value + 4).Hidden = False
       
        With Application: .ScreenUpdating = True: .EnableEvents = True: End With
    End If
End Sub
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: Вася_Пупкин от 14.09.2015, 15:30
Проработал сабж.
Немного усложню вопрос.
При выборе значения 1-6 выпадающего списка листа "СП", на листе "СП" должно остаться соответствующее число колонок E-J, значения остальных колонок должны быть исключены из расчёта. На листах "А-1" и "Расчет Км СП "  нужно скрыть соответствующие группы полей (подсвечено заливкой).
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: vikttur от 14.09.2015, 18:44
ЦитироватьПроработал сабж
И что вынесли? Только вопрос? Пробовали продолжить сами?
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: Вася_Пупкин от 15.09.2015, 09:26
Использовал следующий код:
Option Explicit
Sub test()
    Dim sht As Worksheet
    Dim i As Integer
    Dim num As Byte
   
    Set sht = ThisWorkbook.Worksheets(СП")
    num = sht.Cells(3, 4)
    For i = 5 To num + 4
            sht.Columns(i).Hidden = False
    Next i
    For i = num + 5 To 10
            sht.Columns(i).Hidden = True
    Next i
End Sub


Загвоздка в следующем:
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: cheshiki1 от 15.09.2015, 09:36
Цитата: Вася_Пупкин от 15.09.2015, 09:26
  • скрывать в одном случае нужно колонки, в другом - строки;
проверяйте лист по названию и применяйте скрытие или по столбцу или по строке.
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: vikttur от 15.09.2015, 09:51
Зря отказываетесь от события Worksheet_Change. Или на это есть причины?
Зачем применять два цикла для скрытия/отображения, если можно одним махом, как я показал?

Цитироватьзначения остальных колонок должны быть исключены из расчёта
скрывать... нужно колонки... строки;
на листе А1 необходимо скрыть сгруппированные строки
Этот все не по теме.
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: Вася_Пупкин от 15.09.2015, 09:55
Цитата: cheshiki1 от 15.09.2015, 09:36
Цитата: Вася_Пупкин от 15.09.2015, 09:26
  • скрывать в одном случае нужно колонки, в другом - строки;
проверяйте лист по названию и применяйте скрытие или по столбцу или по строке.

Как быть с группой строк на листе А1?
Пытался применить код и к строкам. Пока безрезультатно. Пожалуйста помогите с синтаксисом цикла работы со строками внутри оператора with.
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: Вася_Пупкин от 15.09.2015, 10:11
Кнопка цитирования не для ответа [МОДЕРАТОР]
Здравствуйте vikttur,
Никаких предубеждений относительно события Worksheet_Change у меня нет. Единственное, почему я не применил ваш метод, в итоге мы получаем не тот результат, который мне нужен. Скрипт отображает только одну колонку соответствующего объекта сравнения, вместо двух, трех, четырех  нужных.
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: vikttur от 15.09.2015, 10:46
Цитироватьпри выборе из выпадающего списка (ВС) количество объектов сравнения (например 3 шт.) остальные колонки (Объект сравнения №4, №5, №6) должны скрываться.
А это кто писал?
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: Вася_Пупкин от 15.09.2015, 11:48
Уважаемый vikttur.

Возможно я не совсем конкретно выразился. Имелось ввиду при выборе значения 3, остаются объекты 1,2,3, объекты 4,5,6 скрываются, при выборе 5 , отображаются объекты 1,2,3,4,5, 6-й объект скрывается.
Если у вас есть вопросы относительно тех. задания, не стесняйтесь, задавайте. С удовольствием отвечу на все.
Название: Re: Помогите скрыть колонки по заданному значению
Отправлено: vikttur от 15.09.2015, 13:16
Замените две строки. Получится такое:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Range("D3"), Target) Is Nothing Then
        With Application: .ScreenUpdating = False: .EnableEvents = False: End With
       
        With Target
            Columns("E:J").Hidden = False
            If .Value < 6 Then Range(Cells(1, .Value + 5), Cells(1, 10)).EntireColumn.Hidden = True
        End With
       
        With Application: .ScreenUpdating = True: .EnableEvents = True: End With
    End If
End Sub