Доброго времени. Подскажите пожалуйста по массивам, они мне ну просто не даются, что то с трудом нацарапаю и то не особо правильно. Есть таблица с огромным количеством строк от 40тыс., тот макрос что я написала конечно работает, но очень уж долго. Помогите пожалуйста как можно написать массив и потом по его результату скрыть строки. Была бы вам признательна если бы с комментариями. Очень мало знаний в массивах( Макрос который использую [vba]
Код
Sub sdf() x = Cells(Rows.Count, 15).End(xlUp).Row Dim i& For i = 8 To x If Range("o" & i).Value <> "" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
[/vba] Под него у меня и обработчики подсоеденины. Но очень уж долго этот цикл работает.
Доброго времени. Подскажите пожалуйста по массивам, они мне ну просто не даются, что то с трудом нацарапаю и то не особо правильно. Есть таблица с огромным количеством строк от 40тыс., тот макрос что я написала конечно работает, но очень уж долго. Помогите пожалуйста как можно написать массив и потом по его результату скрыть строки. Была бы вам признательна если бы с комментариями. Очень мало знаний в массивах( Макрос который использую [vba]
Код
Sub sdf() x = Cells(Rows.Count, 15).End(xlUp).Row Dim i& For i = 8 To x If Range("o" & i).Value <> "" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
[/vba] Под него у меня и обработчики подсоеденины. Но очень уж долго этот цикл работает.Olena
Sub sdf() x = Cells(Rows.Count, 15).End(xlUp).Row Dim i&, rng As Range For i = 8 To x If Range("o" & i).Value <> "" Then If rng Is Nothing Then Set rng = Rows(i) Else Set rng = Union(rng, Rows(i)) End If Next If Not rng Is Nothing Then rng.EntireRow.Hidden = True End Sub
[/vba] или с массивом [vba]
Код
Sub sdf() Dim x&, i&, rng As Range, arr x = Cells(Rows.Count, 15).End(xlUp).Row arr = Range(Cells(1, 1), Cells(x, 15)).Value For i = 8 To x If arr(i, 15) <> "" Then If rng Is Nothing Then Set rng = Rows(i) Else Set rng = Union(rng, Rows(i)) End If Next If Not rng Is Nothing Then rng.EntireRow.Hidden = True End Sub
[/vba]
Но быстрее всего строки скрываются фильтром. Запишите макрорекодером - будет макрос
Можно так попробовать [vba]
Код
Sub sdf() x = Cells(Rows.Count, 15).End(xlUp).Row Dim i&, rng As Range For i = 8 To x If Range("o" & i).Value <> "" Then If rng Is Nothing Then Set rng = Rows(i) Else Set rng = Union(rng, Rows(i)) End If Next If Not rng Is Nothing Then rng.EntireRow.Hidden = True End Sub
[/vba] или с массивом [vba]
Код
Sub sdf() Dim x&, i&, rng As Range, arr x = Cells(Rows.Count, 15).End(xlUp).Row arr = Range(Cells(1, 1), Cells(x, 15)).Value For i = 8 To x If arr(i, 15) <> "" Then If rng Is Nothing Then Set rng = Rows(i) Else Set rng = Union(rng, Rows(i)) End If Next If Not rng Is Nothing Then rng.EntireRow.Hidden = True End Sub
[/vba]
Но быстрее всего строки скрываются фильтром. Запишите макрорекодером - будет макросPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Is Nothing - это пустая переменная Range. То есть если в переменной rng пусто, то мы просто присваиваем ей значение строки Row(i), а если там уже что-то есть, то добавляем через Union ещё одну строку. Таким образом, объединяем все строки с выполненным условием, и потом одним махом их скрываем
Is Nothing - это пустая переменная Range. То есть если в переменной rng пусто, то мы просто присваиваем ей значение строки Row(i), а если там уже что-то есть, то добавляем через Union ещё одну строку. Таким образом, объединяем все строки с выполненным условием, и потом одним махом их скрываемPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816