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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2014, 17:18   #1
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
Вопрос Упростить макрос.

Дорого времени суток.
Есть макрос, но работает долго. Можно ли его упростить или улучшить?
Код:
Dim i As Integer
    For i = 35 To 5 Step -1
        If Not Weekday(Cells(i, 1)) = 7 Or Weekday(Cells(i, 1)) = 1 Then Cells(i, 2).Value = "8": Cells(i, 3).Value = "30": Cells(i, 4).Value = "17": Cells(i, 5).Value = "00"
    Next i
Спасибо заранее.
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Старый 01.09.2014, 17:37   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

долго? доли секунды - это долго?

ускорить можно, - но какой смысл?

вот так, во много раз быстрее будет (сотые доли секунды)
Код:
Sub test()
    Dim i As Long, arr
    arr = Range("a5:e35").Value

    For i = LBound(arr) To UBound(arr)
        If Not Weekday(arr(i, 1)) = 7 Or Weekday(arr(i, 1)) = 1 Then
            arr(i, 2) = 8: arr(i, 3) = 30
            arr(i, 4) = 17: arr(i, 5) = 0
        End If
    Next i
    Range("a5:e35").Value = arr
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 01.09.2014, 18:53   #3
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Спасибо - EducatedFool.!

Файл большой и поэтому работает около 4-6 секунд в зависимости от компа, ваш 0,5 сек.

Немного подправил.
Код:
For i = LBound(arr) To UBound(arr)     
        arr(i, 2) = 8: arr(i, 3) = 30: arr(i, 4) = 17: arr(i, 5) = 0
        If Weekday(arr(i, 1)) = 1 Or Weekday(arr(i, 1)) = 7 Or arr(i, 1) = "" Then
            arr(i, 2) = "": arr(i, 3) = ""
            arr(i, 4) = "": arr(i, 5) = ""
        End If
    Next i
С Уважением, Костик

Последний раз редактировалось KOSTIK1; 02.09.2014 в 10:04.
KOSTIK1 вне форума Ответить с цитированием
Старый 05.09.2014, 00:06   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так не будет быстрее?
Код:
    For i = LBound(arr) To UBound(arr)
        t = Weekday(arr(i, 1))
        Select Case True
            Case t = 1
            Case t = 7
            Case arr(i, 1) = ""
            Case Else
                arr(i, 2) = 8: arr(i, 3) = 30: arr(i, 4) = 17: arr(i, 5) = 0
        End Select
    Next i
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.09.2014, 17:26   #5
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Спасибо и вам - Hugo121!
Тоже шустро справляется.
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно упростить этот макрос? valerij Microsoft Office Excel 84 14.09.2014 16:17
как упростить макрос Obey177 Microsoft Office Excel 4 20.08.2012 19:01
Возможно ли упростить макрос? KOSTIK1 Microsoft Office Excel 6 31.08.2011 14:01
Упростить макрос valerij Microsoft Office Excel 8 20.01.2011 12:10
помогите упростить простой макрос frantic150 Microsoft Office Excel 2 23.06.2009 04:55