Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2013, 03:13   #1
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию как можно увеличить скорость выполнения

можно ли увеличить скорость выполнения макроса и автоматизировать ?
i (переменная) из другого листа формулы подсчета диапазона заполненных строк

Private Sub скрытие строк _Click()
Application.ScreenUpdating = False
For i = Sheets("kn").Range("C1") To Sheets("kn").Range("C136") - 1
If Cells(i, 5) = 0 Then
Rows(i).Hidden = True
Else
Rows(i).Hidden = False
End If
Next i
Application.ScreenUpdating = True
End Sub

Последний раз редактировалось VITA11111; 30.04.2013 в 03:24.
VITA11111 вне форума Ответить с цитированием
Старый 30.04.2013, 05:33   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Не использовать циклы. Например,так:
Код:
Sub qq()
    Dim x As Range, y As Range, z As Range: Application.ScreenUpdating = False
    Set x = Range(Cells(Sheets("kn").[C1], 5), Cells(Sheets("kn").[C136] - 1, 5))
    x.EntireRow.Hidden = False: Set z = x.Find(0, , xlValues, xlWhole)
    If z Is Nothing Then Exit Sub
    Set y = x.ColumnDifferences(z)
    x.EntireRow.Hidden = True: y.EntireRow.Hidden = False
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 30.04.2013 в 10:35.
SAS888 вне форума Ответить с цитированием
Старый 30.04.2013, 10:42   #3
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию

ЧЕГОТО НЕ РАБОТАЕТ НИЧЕГО НЕ ПРОИСХОДИТ
Код:
 Sub qq()
    Dim x As Range, y As Range, z As Range: Application.ScreenUpdating = False
    Set x = Range(Cells(Sheets("kn").[C1], 5), Cells(Sheets("kn").[C136] - 1, 5))
    Set z = x.Find(0, , xlValues, xlWhole)
    If z Is Nothing Then Exit Sub
    Set y = x.ColumnDifferences(z)
    x.EntireRow.Hidden = True: y.EntireRow.Hidden = False
End Sub

МОЖЕТ ПРОБЛЕМА БЕРЕТ ЗНАЧЕНИЯ ИЗ ДРУГОЙ ТАБЛИЦЫ НА ЛИСТЕ "kn"(СЧЕТ КОЛИЧЕСТВО ЯЧЕЕК В ДИАПАЗОНАХ СТРОК НА ЛИСТЕ "РАБОЧИЙ ПЛАН"), 
И ПРИ ДОБАВЛЕНИИ ИЛИ УДАЛЕНИИ СТРОК НА ЛИСТЕ "РАБОЧИЙ ПЛАН", СЧЕТ НА ЛИСТЕ "kn" МЕНЯЕТСЯ 
Т.Е ДИАПАЗОН ПРОВЕРКИ СТРОК С НУЛЕВЫМИ ЗНАЧЕНИЯМИ НА ЛИСТЕ "РАБОЧИЙ ПЛАН", МЕНЯЕТСЯ 
ИСХОДЯ ИЗ ЭТОГО СКРЫВАЮТСЯ СТРОКИ ПО УСЛОВИЮ НА ЛИСТЕ "РАБОЧИЙ ПЛАН "

РАБОТАЕТ ТОЛЬКО ДОЛГО
Private Sub ККК_Click()
     Application.ScreenUpdating = False
     For i = Sheets("kn").Range("C1") To Sheets("kn").Range("C136") - 1
     If Sheets("РАБОЧИЙ ПЛАН").Cells(i, 5) = 0 Then
     Sheets("РАБОЧИЙ ПЛАН").Rows(i).Hidden = True
     Else
     Sheets("РАБОЧИЙ ПЛАН").Rows(i).Hidden = False
     End If
     Next i
     Application.ScreenUpdating = True
End Sub


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось VITA11111; 30.04.2013 в 12:45.
VITA11111 вне форума Ответить с цитированием
Старый 30.04.2013, 13:21   #4
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
ЧЕГОТО НЕ РАБОТАЕТ НИЧЕГО НЕ ПРОИСХОДИТ
В правилах не зря написано - прикрепляйте файл пример, быстрее дело будет. А так можно долго думать, почему у Вас не работает рабочий код от SAS888
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 30.04.2013, 15:36   #5
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию

макрос работает ,только он не скрывает строки на листе "рабочий план", по условию если в строке объедененной ячейки (E14:G14) равна 0 то скрывает целую строку
в других ячеках находится текст .

Последний раз редактировалось VITA11111; 30.04.2013 в 15:42.
VITA11111 вне форума Ответить с цитированием
Старый 01.05.2013, 07:57   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1. Макрос будет скрывать (отображать) строки на активном листе. Первая и последняя строка контролируемого столбца определяется значением ячеек "C1" и "C136" листа "kn". Если при выполнении данного кода активным может быть другой лист, то при определении переменной x добавьте ссылку:
Код:
With Sheets("РАБОЧИЙ ПЛАН")
    Set x = .Range(.Cells(Sheets("kn").[C1], 5), .Cells(Sheets("kn").[C136] - 1, 5))
End With
2. Если у Вас в контролируемых ячейках столбца "E" находятся формулы (функции), то данный способ Вам не подойдет. В этом случае, попробуйте так:
Код:
Sub qq()
    Dim x As Range, y As Range, z As Range, fst As String
    Application.ScreenUpdating = False
    With Sheets("РАБОЧИЙ ПЛАН")
        Set x = .Range(.Cells(Sheets("kn").[C1], 5), .Cells(Sheets("kn").[C136] - 1, 5))
    End With
    x.EntireRow.Hidden = False
    Set z = x.Find(0, , xlValues, xlWhole)
    If Not z Is Nothing Then
        fst = z.Address
        Do
            If y Is Nothing Then Set y = z Else Set y = Union(y, z)
            Set z = x.FindNext(z)
        Loop While fst <> z.Address
    End If
    If Not y Is Nothing Then y.EntireRow.Hidden = True
End Sub
3. С объединенными ячейками тоже нужно разбираться.

Есть и другие варианты... Давайте пример файла... Достаточно несколько строк.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 01.05.2013 в 08:44.
SAS888 вне форума Ответить с цитированием
Старый 02.05.2013, 00:10   #7
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию

Книга большая с множеством связанных таблиц копировать отдельные листы в отдельный файл не получится теряются ссылки но постораюсь сделать пример
Нашел Функцию Filter в VBA
http://vba-help.ru/vbahelp/Function/text/Filter/
Код:
Filter(Sheets("РАБОЧИЙ ПЛАН").Range(Cells(Sheets("kn").[C1], 5), Cells(Sheets("kn").[C136] - 1, 5)), 0, False)
вроде простая, только незнаю как ее применить
записал макрос автофильтра работает моментально,но раскрывающий список лишнее

Последний раз редактировалось VITA11111; 02.05.2013 в 00:16.
VITA11111 вне форума Ответить с цитированием
Старый 02.05.2013, 07:44   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1. Вы допускаете распространенную ошибку. Приведенный Вами код в предыдущем посте будет корректно работать только при активном рабочем листе "РАБОЧИЙ ПЛАН". В этом случае ссылку на лист делать ни к чему. Если активным может быть другой лист, то ссылку на требуемый лист необходимо делать при каждом обращении к ячейкам этого листа (см. мой пример из поста №6 п.1). Иначе будет ошибка.
2. Функция Filter имеет 3 аргумента: массив для поиска, элемент поиска и указатель: включающие или исключающие элементы отбирать. Так вот эта функция работает только по частичному совпадению. Таким образом, указав элемент поиска "0", будут возвращены все элементы, его содержащие. Такие, как "0", "20", "103" и т. п. Считаю, что для решения Вашей задачи данная функция неприемлема.
3. Как я уже говорил, Вашу задачу можно решить множеством способов. Например, и с помощью автофильтра:
Код:
Sub qq()
    Dim x As Range, y As Range: Application.ScreenUpdating = False
    With Sheets("РАБОЧИЙ ПЛАН")
        Set x = .Range(.Cells(Sheets("kn").[C1], 5), .Cells(Sheets("kn").[C136] - 1, 5))
    End With
    x.EntireRow.Hidden = False
    If x.Find(0, , xlValues, xlWhole) Is Nothing Then Exit Sub
    x.AutoFilter Field:=1, Criteria1:="=0"
    Set y = x.SpecialCells(xlCellTypeVisible)
    x.AutoFilter: y.EntireRow.Hidden = True
End Sub
Ждем пример файла...
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 02.05.2013 в 07:49.
SAS888 вне форума Ответить с цитированием
Старый 02.05.2013, 12:35   #9
VITA11111
Пользователь
 
Регистрация: 03.07.2012
Сообщений: 50
По умолчанию

создал обрывок из таблицы
вобщем так:
на листе "рабочий план" при добавлении строк меняются диапазоны, которые считаются на листе "kn" ,
исходя из этих данных объекты скрытия и расскрытия строк распологаются на листе"рабочий план",
которые в свою очередь скрывают или раскрывают меняющийся диапазон частей таблицы
и при этом при раскрытии прячут все ненужные т.е нулевые значения
эти значения берутся из другой таблицы "лист3" ссылками
ячейки на листе "рабочий план" где идет проверка объеденены
Вложения
Тип файла: rar Книга1.xlsx.rar (133.0 Кб, 9 просмотров)

Последний раз редактировалось VITA11111; 02.05.2013 в 12:40.
VITA11111 вне форума Ответить с цитированием
Старый 02.05.2013, 12:55   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Как и ожидалось, проблема в объединенных ячейках.
Посмотрите вложение. запустите макрос "qq". Все так?
Вложения
Тип файла: rar Книга1_2.rar (104.7 Кб, 15 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно ускорить скорость макроса? staniiislav Microsoft Office Excel 7 21.12.2011 09:44
Как увеличить скорость работы? (C#) Serg121 Помощь студентам 4 06.12.2011 17:19
Как можно уменьшить время выполнения запроса. ajevgen PHP 4 07.09.2011 15:55
как увеличить скорость скачивания!!! alex(21) Свободное общение 16 10.09.2010 19:49
как увеличить скорость заполнения данных в mdb из excel Tanuska___:) БД в Delphi 4 22.04.2010 10:50