Страницы: 1
RSS
Скрыть столбцы по условию макросом
 
Всем привет!
У Николая, в приёмах:https://www.planetaexcel.ru/techniques/9/121/
взял на вооружение вот такой код:
Код
Sub Неделя_Скрыть()
Dim cell As Range

For Each cell In ActiveSheet.UsedRange.Rows(1).Cells            'проходим по всем ячейкам первой строки
        If cell.Value = "2" Then cell.EntireColumn.Hidden = True    'если в ячейке x - скрываем столбец
    Next
        Application.ScreenUpdating = True
End Sub
Как изменить условие, если в ячейка не равна "х", а содержит "х", то есть суть в том, что в названиях содержится разный текст, но у него есть общие буквы к примеру хруст и храп и все столбцы содержащие "х" нужно скрыть
Изменено: adamm - 17.09.2020 09:20:11
 
adamm, например так
Код
If cell.Value Like "*2*"
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, спасибо!
А возможно скрыть столбцы которые содержат названия месяцев или придется их все перечислять, месяцы?
 
adamm, ну один раз в массив  и {} и все
Не бойтесь совершенства. Вам его не достичь.
 
Mershik,ок спасибо!
Добавил условие IF, для возможности свернуть и развернуть одной кнопкой, стал то ругаться?
Код
Private Sub ToggleButton2_Click()
If Me.ToggleButton1.Value = True Then
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells                            
        If cell.Value Like "*x*" Then cell.EntireColumn.Hidden = True      

Else
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells                            
        If cell.Value Like "*x*" Then cell.EntireColumn.Hidden = False     
    Next
   
End Sub
Изменено: adamm - 17.09.2020 11:14:07
 
Цитата
Mershik написал:
adamm , ну один раз в массив  и {} и все
А можете продемонстрировать в коде?
 
skais675, ну например так (может не корректно написал)
Код
Sub Неделя_Скрыть()
Dim cell As Range
Dim arr
V = "январь" & "," & "февраль" & "," & "март" & "," & "апрель" & "," & "май" & "," & "июнь" & "," & "июль" & "," & "август" & "," & "сентябрь" & "," & "октябрь" & "," & "ноябрь" & "," & "декабрь"
arr = Split(V, ",")
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells            'проходим по всем ячейкам первой строки
For i = LBound(arr) To UBound(arr)
        If cell.Value Like "*" & arr(i) & "*" Then cell.EntireColumn.Hidden = True: Exit For
Next i
Next cell
        Application.ScreenUpdating = True
End Sub

Не бойтесь совершенства. Вам его не достичь.
 
Mershik, а то я подумал что Вы одной строкой без цикла можете проверить с массивом.
Изменено: skais675 - 17.09.2020 10:30:07
 
Можно с диапазоном )
 
Юрий М,  а можете продемонстрировать в коде?
 
Проверить, присутствует ли в диапазоне слово?
 
Исходя из задачи нужно одну переменную проверить с диапазоном по like. Типа переменная="Отчет за январь ", есть ли любой из 12 месяцев в переменной?
Изменено: skais675 - 17.09.2020 10:54:37
 
Может ф не так понимаю задачу, но ведь ничего сложного:
Код
    If Application.WorksheetFunction.CountIf(Range("A2:A13"), "*январь*") > 0 Then MsgBox "Найдно"

или
Код
    Set Rng = Columns(1).Find(what:="январь", LookIn:=xlFormulas, LookAt:=xlPart)
    If Not Rng Is Nothing Then MsgBox "Найдно"
 
Добавил условие IF, для возможности свернуть и развернуть одной кнопкой, стал ругаться?
Код
Private Sub ToggleButton2_Click()
If Me.ToggleButton1.Value = True Then
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells                            
        If cell.Value Like "*x*" Then cell.EntireColumn.Hidden = True      
 
Else
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells                            
        If cell.Value Like "*x*" Then cell.EntireColumn.Hidden = False    
    Next
    
End Sub
 
Сознаюсь, что не так понял задачу. Требуется проверить наличие ЛЮБОГО слова из диапазона, а у меня проверяется вхождение КОНКРЕТНОГО слова...  Каюсь )
 
Цитата
Mershik написал:
skais675 , ну например так (может не корректно написал)
проверил все работает
Изменено: adamm - 17.09.2020 15:22:28
 
adamm,
Код
Private Sub ToggleButton1_Click()

If Me.ToggleButton1.Value = True Then
    For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
    Debug.Print ActiveSheet.UsedRange.Rows(1).Cells.Address
        If cell.Value Like "*ÍÅÄÅËß*" Then cell.EntireColumn.Hidden = True
    Next
Else
    For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
        If cell.Value Like "*ÍÅÄÅËß*" Then cell.EntireColumn.Hidden = False
    Next
End If
End Sub
Не бойтесь совершенства. Вам его не достичь.
 
Из этого всего можно оставить 3 строки:
Код
Private Sub ToggleButton1_Click()

'If Me.ToggleButton1.Value = True Then
    For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
    'Debug.Print ActiveSheet.UsedRange.Rows(1).Cells.Address
        If cell.Value Like "*НЕДЕЛЯ*" Then cell.EntireColumn.Hidden = Me.ToggleButton1.Value 'True
    Next
'Else
'    For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
'        If cell.Value Like "*НЕДЕЛЯ*" Then cell.EntireColumn.Hidden = False
'    Next
'End If
End Sub
 
Mershik, уточните пожалуйста, эта часть кода разве не отвечает за номер строки?
Код
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
 
adamm, да за номер строки по порядку в выбранном диапазоне..вроде так
Не бойтесь совершенства. Вам его не достичь.
 
В ActiveSheet.UsedRange.
А этот диапазон может начинаться с любой строки листа.
 
Всем спасибо!!!
Страницы: 1
Наверх