Страницы: 1
RSS
Установить соответсвие значения ячйки именному диапазону
 
Уважаемые спецы, прошу вашей помощи! делаю первые шаги в VBA. Пытаюсь написать макрос, который бы скрывал строки таблицы, если значения в определенных ячейках этой таблицы соответсвовали бы именному диапазону. Предполагается,  что и таблица и именной диапазон могут обновляться. Если наглядно, то создал именной диапазон - "мебель"(на листе 1). Хочу чтоб в таблице (диапазоне)(на листе 2), если в колонке 2 всречается значение из диапазона "мебель", чтоб эта строка была  скыта. Собрал следующий код
Код
Sub рабочийвариант()
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count    'определяем размеры таблицы
    Application.ScreenUpdating = False
    For r = LastRow To 1 Step -1           'проходим от последней строки до первой
        x = WorksheetFunction.Match(Cells(r, 2), Range("мебель"), 0)
        Cells(r, 3) = IIf(IsEmpty(x), "не ок", "скрыть")
        If Cells(r, 3) = "скрыть" Then Cells(r, 3).EntireRow.Hidden = True 'если в строке пусто - скрываем ее
    Next r
End Sub
буду очень благодаен за любые комменты
 

делаю последние шаги в VBA

Код
Sub рабочийвариант()
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count    'определяем размеры таблицы
    Application.ScreenUpdating = False
    For r = 1 to LastRow      
        rows(r).hidden = WorksheetFunction.Countif(Range("мебель"), Cells(r, 2)) > 0
    Next r
End Sub
Изменено: Ігор Гончаренко - 08.12.2018 22:53:06
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ещё один )
Код
Sub рабочийвариант()
Dim i As Long, LastRow As Long
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Application.ScreenUpdating = False
    For i = 1 To LastRow
        If Application.WorksheetFunction.CountIf(Range("мебель"), Cells(i, 2)) > 0 Then Rows(i).Hidden = True
    Next
    Application.ScreenUpdating = True
End Sub
 
Ігор Гончаренко - Спасибо! Работает!
Юрий М - может чего не так делаю - не работает, но все равно Спасибо!
 
У меня код точно такой, как и у Игоря ) Проверил ещё раз - работает.
 
Юрий М, у меня таки ваш вариант не работает (в принципе это уже не важно). в приложении файл, где макрос рв3 (ваш вариант) не работает. Возможно я что-то не то делаю...
 
Duke2, во втором файле столбец А пустой, а в первом он был заполнен. Именно по нему я определял номер последней заполненной строки. Исправьте
LastRow = Cells(Rows.Count, 2).End(xlUp).Row
и всё заработает.
 
Цитата
Duke2 написал:
в принципе это уже не важно
Важно: всегда важно понимать причину )
 
Юрий М. Точно (я поленился сразу ваш код внимательно посмотреть) - теперь все работает! Спасибо!  
 
Для общего развития: можно ещё использовать Find вместо WorksheetFunction.CountIf
 
у нас, на курсах трактористов, был аналогичный случай, но причину лучше было не знать
Изменено: Ігор Гончаренко - 08.12.2018 23:53:18
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
:D  
Страницы: 1
Наверх