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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2014, 11:42   #11
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Макрос в варианте 1 не планировалось использовать при фильтрации по цвету. Я его делал в Excel 2003.
Цитата:
...вариант 1 предпочтительнее тк там перерасчет полный идет на листе при изм любой ячейки
Здесь не понятно. Пересчет ВСЕХ ячеек в диапазоне "U8:U1000" будет произведен при изменении любой влияющей (влияющих) ячейки. Т. е. в диапазоне "N8:N1000", "O8:O1000", S8:S1000" или "U8:U1000". Зачем пересчитывать ЭТИ ячейки в случае, если изменились данные в каких-то других ячейках?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.04.2014, 13:02   #12
brik
Пользователь
 
Регистрация: 17.04.2014
Сообщений: 22
По умолчанию

Цитата:
Здесь не понятно. Пересчет ВСЕХ ячеек в диапазоне "U8:U1000" будет произведен при изменении любой влияющей (влияющих) ячейки. Т. е. в диапазоне "N8:N1000", "O8:O1000", S8:S1000" или "U8:U1000". Зачем пересчитывать ЭТИ ячейки в случае, если изменились данные в каких-то других ячейках?
сорри за мою безграмотность - неправильно понял


так вот макрос по варианту 2 изменил - сейчас пересчитывает нормально при изменении ячеек в диапазоне
1)при стирании заполненных ячеек - когда N стираешь + 2)когда строка пустая заносишь по ошибке сначала в O или S

- но одна бяка что долго
Цитата:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Range, i As Integer, a(), b(), c(): Set x = Selection
If Intersect(Target, [N8:N1000, O8:O1000, S8:S1000, U8:U1000]) Is Nothing Then Exit Sub
With Application
.ScreenUpdating = False: .EnableEvents = False
a = [N8:N1000].Value: b = [O8:O1000].Value: c = [S8:S1000].Value
For i = 1 To UBound(a, 1)
If a(i, 1) <> "" Then Cells(i + 7, "U") = a(i, 1) - b(i, 1) - c(i, 1)
Next
For i = 1 To UBound(a, 1)
If a(i, 1) = "" Then Cells(i + 7, "U") = ""
Next
For i = 1 To UBound(a, 1)
If a(i, 1) = "" Then Cells(i + 7, "S") = ""
Next
For i = 1 To UBound(a, 1)
If a(i, 1) = "" Then Cells(i + 7, "O") = ""
Next
.ScreenUpdating = True: .EnableEvents = True: x.Select
End With
End Sub
можно его както упростить чтоб быстрее работал?


Макрос по варианту 1 работает быстрее конечно жалко что снятие фильтрацию по цвету не воспринимает

Последний раз редактировалось brik; 23.04.2014 в 13:48.
brik вне форума Ответить с цитированием
Старый 23.04.2014, 13:36   #13
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите пример во вложении.
Вложения
Тип файла: rar Книга5.rar (13.2 Кб, 7 просмотров)
Чем шире угол зрения, тем он тупее.

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

Еще вариант:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As Range, y As Range
    Set x = Intersect(Target, [N8:N1000, O8:O1000, S8:S1000, U8:U1000])
    If x Is Nothing Then Exit Sub
    With Application
        .ScreenUpdating = False: .EnableEvents = False
        For Each y In Intersect(x.EntireRow, Columns("N"))
            If y = "" Then
                y.Offset(, 1) = "": y.Offset(, 5) = "": y.Offset(, 7) = ""
            Else
                y.Offset(, 7) = y - y.Offset(, 1) - y.Offset(, 5)
            End If
        Next
        .ScreenUpdating = True: .EnableEvents = True
    End With
End Sub
Перебираем не весь диапазон, а только строки с измененными значениями. Так существенно быстрее.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 23.04.2014 в 13:50.
SAS888 вне форума Ответить с цитированием
Старый 23.04.2014, 14:10   #15
brik
Пользователь
 
Регистрация: 17.04.2014
Сообщений: 22
По умолчанию

последний вариант то что надо все работает и без тормозов !
(в варианте книга5 условие если N пусто а O или S заполнено не сработало)

Еще раз тысяча благодарностей что уделили внимание теме !

Последний раз редактировалось brik; 23.04.2014 в 14:14.
brik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать нарисованную кривую в формулу Natizk Общие вопросы Delphi 12 21.04.2013 19:30
Заданную логическую формулу преобразовать в эквивалентную днф sergei15 Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2012 06:21
Макрос не вписывает формулу agregator Microsoft Office Excel 3 10.02.2012 16:44
[Си++ Билдер]Преобразовать математическую формулу в нормальный для компилятора вид mrG0bliN Помощь студентам 7 24.01.2012 19:28
Преобразовать формулу в макрос Viento Microsoft Office Excel 10 23.01.2009 22:35