Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22

Ускорить условие IF Then

13.09.2025, 17:14. Показов 1057. Ответов 18

Студворк — интернет-сервис помощи студентам
У меня есть такая конструкция:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
If [condition] Then
 Call foo1()
 Call foo2()
If else [condition] Then
 Call foo1()
 Call foo2()
.
.
итак 12 раз
..
End If
Получу ли я ускорение этого фрагмента кода, если сделаю так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
If [condition] Then
 Call foo1()
 Call foo2()
 GoTo sled
If else [condition] Then
 Call foo1()
 Call foo2()
  GoTo sled
.
.
итак 12 раз
..
End If
sled:
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.09.2025, 17:14
Ответы с готовыми решениями:

Visual Basic Используя условный оператор if…then, if…then…else или if…then…elseif, разработайте проект для решения следующих заданий:
Пройдет ли кирпич со сторонами а, b и с сквозь прямоугольное отверстие со сторонами p и q? Стороны...

Пустые ячейки и условие If Not IsEmpty(.Cells(i, 1)) Then
не могу понять в чем дело в программе стоит условие If Not IsEmpty(.Cells(i, 1)) Then в первом...

Что означают слова INPUT,THEN и.д
Что означают слова INPUT,THEN и.д

18
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 464
13.09.2025, 18:12
Что за If else?
Если там ElseIf, то никакого ускорения не должно быть.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
13.09.2025, 18:29  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Если там ElseIf, то никакого ускорения не должно быть.
Да. Ошибся. Именно так. Т.е. использование GoTo процесс ничуть не ускорит?
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 464
13.09.2025, 18:55
Не должно. Вот, если бы там были просто Ifы - тут бы ускорилось.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
14.09.2025, 06:11  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Не должно. Вот, если бы там были просто Ifы - тут бы ускорилось.
Если верно первое условие, то не ускорится, а если верно 12-е условие, программа затратит время на проверку предыдущих 11-ти. Или я не так понимаю?
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 464
14.09.2025, 08:30
Цитата Сообщение от Argus19 Посмотреть сообщение
если верно 12-е условие, программа затратит время на проверку предыдущих 11-ти.
В этом случае предыдущие условия придётся проверять в любом случае. А вот, если верно первое условие, то в случае обычных If без Else следующие 11 условий всё равно будут проверяться.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
14.09.2025, 08:35  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
В этом случае предыдущие условия придётся проверять в любом случае. А вот, если верно первое условие, то в случае обычных If без Else следующие 11 условий всё равно будут проверяться.
Т.е. ускорить процесс таким образом не удастся?
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 464
14.09.2025, 09:16
Не должно. По крайней мере речь про скомпилированный код.
Есть другой вариант. Если условия простые, типа condition0 - это x = 0, condition1 - это x = 1... то есть их можно загнать в массив, тогда можно собрать массив указателей на foo1(), foo2()... , связать массивы и применить вызов ф-ций по указателю. Это ускорит перебор условий.
0
 Аватар для Storm Screamer
4852 / 1419 / 116
Регистрация: 21.04.2013
Сообщений: 8,619
14.09.2025, 09:29
Цитата Сообщение от Argus19 Посмотреть сообщение
Получу ли я ускорение этого фрагмента кода, если сделаю так
Нет.

Лучше так:

Visual Basic
1
2
3
4
5
6
If condition1 Or condition2 Or condition3 Or condition4 Or _
   condition5 Or condition6 Or condition7 Or condition8 Or _
   condition9 Or condition10 Or condition11 Or condition12 Then
    foo1()
    foo2()
End If
Либо так, если условия сложные и их нельзя объединять:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim needToExecute As Boolean = False
 
Select Case True
    Case condition1, condition2, condition3, condition4,
         condition5, condition6, condition7, condition8,
         condition9, condition10, condition11, condition12
        needToExecute = True
End Select
 
If needToExecute Then
    foo1()
    foo2()
End If
1
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
15.09.2025, 10:03
Argus19, кидай условия сюда, возможно там можно хитро сделать чтобы ускорить.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
15.09.2025, 10:44  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
кидай условия сюда, возможно там можно хитро сделать чтобы ускорить.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
     Set XLIn = CreateObject("Excel.Application")
        Set xla = XLIn.Workbooks.Open(App.Path & "\Холодильники.xlsx")
.....
If Time >= #11:50:00 PM# And Time <= #11:59:59 PM# Then     '0
    xla.Save
     Call Averaging
ElseIf Time >= #12:50:00 PM# And Time <= #12:59:59 PM# Then '1
    xla.Save
     Call Averaging
ElseIf Time >= #1:50:00 AM# And Time <= #1:59:59 AM# Then   '2
    xla.Save
     Call Averaging
ElseIf Time >= #2:50:00 AM# And Time <= #2:59:59 AM# Then   '3
    xla.Save
     Call Averaging
ElseIf Time >= #3:50:00 AM# And Time <= #3:59:59 AM# Then   '4
    xla.Save
     Call Averaging
ElseIf Time >= #4:50:00 AM# And Time <= #4:59:59 AM# Then   '5
    xla.Save
     Call Averaging
ElseIf Time >= #5:50:00 AM# And Time <= #5:59:59 AM# Then   '6
    xla.Save
     Call Averaging
ElseIf Time >= #6:50:00 AM# And Time <= #6:59:59 AM# Then   '7
    xla.Save
     Call Averaging
ElseIf Time >= #7:50:00 AM# And Time <= #7:59:59 AM# Then   '8
    xla.Save
     Call Averaging
ElseIf Time >= #8:50:00 AM# And Time <= #8:59:59 AM# Then   '9
    xla.Save
     Call Averaging
ElseIf Time >= #9:50:00 AM# And Time <= #9:59:59 AM# Then   '10
    xla.Save
     Call Averaging
ElseIf Time >= #10:50:00 AM# And Time <= #10:59:59 AM# Then   '11
    xla.Save
     Call Averaging
ElseIf Time >= #11:50:00 AM# And Time <= #11:59:59 AM# Then '12
    xla.Save
     Call Averaging
ElseIf Time >= #12:50:00 AM# And Time <= #12:59:59 AM# Then '13
    xla.Save
     Call Averaging
ElseIf Time >= #1:50:00 PM# And Time <= #1:59:59 PM# Then   '14
    xla.Save
     Call Averaging
ElseIf Time >= #2:50:00 PM# And Time <= #2:59:59 PM# Then   '15
    xla.Save
     Call Averaging
ElseIf Time >= #3:50:00 PM# And Time <= #3:59:59 PM# Then   '16
    xla.Save
     Call Averaging
ElseIf Time >= #4:50:00 PM# And Time <= #4:59:59 PM# Then   '17
    xla.Save
     Call Averaging
ElseIf Time >= #5:50:00 PM# And Time <= #5:59:59 PM# Then   '18
    xla.Save
     Call Averaging
ElseIf Time >= #6:50:00 PM# And Time <= #6:59:59 PM# Then   '19
    xla.Save
     Call Averaging
ElseIf Time >= #7:50:00 PM# And Time <= #7:59:59 PM# Then   '20
    xla.Save
     Call Averaging
ElseIf Time >= #8:50:00 PM# And Time <= #8:59:59 PM# Then   '21
    xla.Save
     Call Averaging
ElseIf Time >= #9:50:00 PM# And Time <= #9:59:59 PM# Then   '22
    xla.Save
     Call Averaging
ElseIf Time >= #10:50:00 PM# And Time <= #10:59:59 PM# Then   '23
    xla.Save
     Call Averaging
End If
0
sleep
 Аватар для I can
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,768
15.09.2025, 10:53
Цитата Сообщение от Argus19 Посмотреть сообщение
If Time >= #11:50:00 PM# And Time <= #11:59:59 PM# Then
Так можно просто вытащить значение минут из времени.
Будет всего одно условие - если минуты больше или равно 50.


То есть, так

Visual Basic
1
If DatePart("n", Time) >= 50 Then xla.Save: Call Averaging
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
15.09.2025, 10:57
Лучший ответ Сообщение было отмечено Argus19 как решение

Решение

Visual Basic
1
If Minute(Time) >= 50 Then
2
sleep
 Аватар для I can
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,768
15.09.2025, 13:02
Цитата Сообщение от The trick Посмотреть сообщение
Minute(
Ну как ты это всё помнишь?

Добавлено через 2 часа 0 минут
Argus19, я у тебя в чёрном списке?
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
15.09.2025, 13:56  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
я у тебя в чёрном списке?
Почему?
0
15.09.2025, 14:12

Не по теме:

Показалось. Просто уже не раз замечал, что мои сообщения остаются без ответа.

0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
15.09.2025, 14:28  [ТС]

Не по теме:


Цитата Сообщение от I can Посмотреть сообщение
Показалось. Просто уже не раз замечал, что мои сообщения остаются без ответа.


Когда я открыл тему, увидел два ответа. Ответ The trick показался лучшим.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
19.09.2025, 07:39
Argus19, какой-то странный код. Куча условий, а действие только одно...
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
19.09.2025, 08:27  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
какой-то странный код. Куча условий, а действие только одно
Это я затупил. Решение от The trick оказалось оптимальным.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2025, 08:27
Помогаю со студенческими работами здесь

Оператор if...then
Как это записать покомактней? ' ... IF (a &lt; 0 AND b &lt; 0 AND c = 0) OR (a &lt; 0 AND b = 0 AND c &lt; 0)...

If-Then-Else или Select Case: что предпочтительнее использовать
В чем их разница ? Когда применять эффективна (точнее в каких задачах) If....Then...Else. И когда...

If /Then/Else
Помогите, пожалуйста. Создать функцию пользователя z(x) с использованием оператора условного...

If Err.Number Then GoTo
А как, в начале процедуры, поставить условие, если где - нибудь в процедуре произошла ошибка, тогда...

If-Then-Else
Помогите решить совсем несложную задачу,я вообще ничего не понимаю в Vba(( На экране появляется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru