Поиск в массиве в excel vba

Поиск в массиве в excel vba

Добрый день!
Есть массив данных на одном листе (3 столбца — RAWDATA) и массив данных на другом листе (1 столбец — LIST).
Берем значение в первой ячейке на листе LIST и ищем его на листе RAWDATA, если находим — то красим зеленым, нет — красным и т.д.
Написала код, но он отрабатывает только по первой ячейке, помогите, пожалуйста, разобраться.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Dim r As Range
Dim l As Range

Set r = ThisWorkbook.Sheets(«RawData»).UsedRange
Set l = ThisWorkbook.Sheets(«LIST»).UsedRange

For j = 1 To r.Rows.Count
For i = 1 To l.Rows.Count
If l.Cells(i, 1).Value = r.Cells(j, 1).Value Then
l.Cells(i, 1).Interior.Color = RGB(190, 245, 116)
Else: l(i, 1).Cells.Interior.Color = RGB(227, 38, 54)
End If
Next i
Next j

Красим где? Судя по цитате, надо на листе RAWDATA, а в макросе у Вас на листе LIST.

KuklP, извините, не увидела сообщения до цитаты. Красим на листе LIST.

Файл вроде прикрепила, но не вижу.

Словари-массивы нужны в общем случае. особенно если данных много.
Массив в котором ищем циклом (одним) заносим в словарь, массив который проверяем циклом (одним) проверяем по словарю.
Ну а покраску можно организовать разными способами, в зависимости от количества данных. Если не спешим — можно сразу и красить по одной ячейке, это просто. Но долго.

Файл не смотрел — с работы туда ходу нет.

Да, по примеру — поудаляйте всё лишнее и разместите тут на форуме, если файл больше 100к. И не забывайте, что ещё есть архиваторы.
Если в рабочем файле десятки тысяч строк — это не лишне упомянуть в описании задачи, будет влиять на алгоритм решения задачи.

Если файл не появится — придётся тему закрыть.

Поиск на листе Excel

Поиск какого-либо значения в ячейках Excel довольно часто встречающаяся задача при программировании какого-либо макроса. Решить ее можно разными способами. Однако, в разных ситуациях использование того или иного способа может быть не оправданным. В данной статье я рассмотрю 2 наиболее распространенных способа.

Поиск перебором значений

Довольно простой в реализации способ. Например, найти в колонке «A» ячейку, содержащую «123» можно примерно так:

Минусами этого так сказать «классического» способа являются: медленная работа и громоздкость. А плюсом является его гибкость, т.к. таким способом можно реализовать сколь угодно сложные варианты поиска с различными вычислениями и т.п.

Поиск функцией Find

Гораздо быстрее обычного перебора и при этом довольно гибкий. В простейшем случае, чтобы найти в колонке A ячейку, содержащую «123» достаточно такого кода:

Вкратце опишу что делают строчки данного кода:
1-я строка: Выбираем в книге лист «Данные»;
2-я строка: Осуществляем поиск значения «123» в колонке «A», результат поиска будет в fcell;
3-я строка: Если удалось найти значение, то fcell будет содержать Range-объект, в противном случае — будет пустой, т.е. Nothing.

Полностью синтаксис оператора поиска выглядит так:

Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

What — Строка с текстом, который ищем или любой другой тип данных Excel

After — Ячейка, после которой начать поиск. Обратите внимание, что это должна быть именно единичная ячейка, а не диапазон. Поиск начинается после этой ячейки, а не с нее. Поиск в этой ячейке произойдет только когда весь диапазон будет просмотрен и поиск начнется с начала диапазона и до этой ячейки включительно.

LookIn — Тип искомых данных. Может принимать одно из значений: xlFormulas (формулы), xlValues (значения), или xlNotes (примечания).

LookAt — Одно из значений: xlWhole (полное совпадение) или xlPart (частичное совпадение).

SearchOrder — Одно из значений: xlByRows (просматривать по строкам) или xlByColumns (просматривать по столбцам)

SearchDirection — Одно из значений: xlNext (поиск вперед) или xlPrevious (поиск назад)

MatchCase — Одно из значений: True (поиск чувствительный к регистру) или False (поиск без учета регистра)

MatchByte — Применяется при использовании мультибайтных кодировок: True (найденный мультибайтный символ должен соответствовать только мультибайтному символу) или False (найденный мультибайтный символ может соответствовать однобайтному символу)

SearchFormat — Используется вместе с FindFormat. Сначала задается значение FindFormat (например, для поиска ячеек с курсивным шрифтом так: Application.FindFormat.Font.Italic = True), а потом при использовании метода Find указываем параметр SearchFormat = True. Если при поиске не нужно учитывать формат ячеек, то нужно указать SearchFormat = False.

Чтобы продолжить поиск, можно использовать FindNext (искать «далее») или FindPrevious (искать «назад»).

Примеры поиска функцией Find

Пример 1: Найти в диапазоне «A1:A50» все ячейки с текстом «asd» и поменять их все на «qwe»

Обратите внимание : Когда поиск достигнет конца диапазона, функция продолжит искать с начала диапазона. Таким образом, если значение найденной ячейки не менять, то приведенный выше пример зациклится в бесконечном цикле. Поэтому, чтобы этого избежать (зацикливания), можно сделать следующим образом:

Пример 2: Правильный поиск значения с использованием FindNext, не приводящий к зацикливанию.

В ниже следующем примере используется другой вариант продолжения поиска — с помощью той же функции Find с параметром After. Когда найдена очередная ячейка, следующий поиск будет осуществляться уже после нее. Однако, как и с FindNext, когда будет достигнут конец диапазона, Find продолжит поиск с его начала, поэтому, чтобы не произошло зацикливания, необходимо проверять совпадение с первым результатом поиска.

Пример 3: Продолжение поиска с использованием Find с параметром After.

Следующий пример демонстрирует применение SearchFormat для поиска по формату ячейки. Для указания формата необходимо задать свойство FindFormat.

Пример 4: Найти все ячейки с шрифтом «курсив» и поменять их формат на обычный (не «курсив»)

Примечание: В данном примере намеренно не используется FindNext для поиска следующей ячейки, т.к. он не учитывает формат (статья об этом: https://support.microsoft.com/ru-ru/kb/282151)

Коротко опишу алгоритм поиска Примера 4. Первые две строки определяют последнюю строку (lLastRow) на листе и последний столбец (lLastCol). 3-я строка задает формат поиска, в данном случае, будем искать ячейки с шрифтом Italic. 4-я строка определяет область ячеек с которой будет работать программа (с ячейки A1 и до последней строки и последнего столбца). 5-я строка осуществляет поиск с использованием SearchFormat. 6-я строка — цикл пока результат поиска не будет пустым. 7-я строка — меняем шрифт на обычный (не курсив), 8-я строка продолжаем поиск после найденной ячейки.

Читать еще:  Номера страниц в экселе

Хочу обратить внимание на то, что в этом примере я не стал использовать «защиту от зацикливания», как в Примерах 2 и 3, т.к. шрифт меняется и после «прохождения» по всем ячейкам, больше не останется ни одной ячейки с курсивом.

Свойство FindFormat можно задавать разными способами, например, так:

Следующий пример — применение функции Find для поиска последней ячейки с заполненными данными. Использованные в Примере 4 SpecialCells находит последнюю ячейку даже если она не содержит ничего, но отформатирована или в ней раньше были данные, но были удалены.

Пример 5: Найти последнюю колонку и столбец, заполненные данными

В этом примере используется UsedRange, который так же как и SpecialCells возвращает все используемые ячейки, в т.ч. и те, что были использованы ранее, а сейчас пустые. Функция Find ищет ячейку с любым значением с конца диапазона.

При поиске можно так же использовать шаблоны, чтобы найти текст по маске, следующий пример это демонстрирует.

Пример 6: Выделить красным шрифтом ячейки, в которых текст начинается со слова из 4-х букв, первая и последняя буквы «т», при этом после этого слова может следовать любой текст.

Для поиска функцией Find по маске (шаблону) можно применять символы:
* — для обозначения любого количества любых символов;
? — для обозначения одного любого символа;

— для обозначения символов *, ? и

. (т.е. чтобы искать в тексте вопросительный знак, нужно написать

?, чтобы искать именно звездочку (*), нужно написать

* и наконец, чтобы найти в тексте тильду, необходимо написать

Поиск даты с помощью Find

Если необходимо найти текущую дату или какую-то другую дату на листе Excel или в диапазоне с помощью Find, необходимо учитывать несколько нюансов:

  • Тип данных Date в VBA представляется в виде #[месяц]/[день]/[год]#, соответственно, если необходимо найти фиксированную дату, например, 01 марта 2018 года, необходимо искать #3/1/2018#, а не «01.03.2018»
  • В зависимости от формата ячеек, дата может выглядеть по-разному, поэтому, чтобы искать дату независимо от формата, поиск нужно делать не в значениях, а в формулах, т.е. использовать LookIn:=xlFormulas

Приведу несколько примеров поиска даты.

Пример 7: Найти текущую дату на листе независимо от формата отображения даты.

Пример 8: Найти 1 марта 2018 г.

Искать часть даты — сложнее. Например, чтобы найти все ячейки, где месяц «март», недостаточно искать «03» или «3». Не работает с датами так же и поиск по шаблону. Единственный вариант, который я нашел — это выбрать формат в котором месяц прописью для ячеек с датами и искать слово «март» в xlValues.

Тем не менее, можно найти, например, 1 марта независимо от года.

Пример 9: Найти 1 марта любого года.

Поиск в массиве в excel vba

как мне найти в масиве байт последовательность байт, но быстрым способом, мой метод маленька тормозащий

For l = 0 To FileSize — Len(SearchText)
If exitsrch = True Then GoTo ExSrch

Searched = True
For l1 = 0 To 3 »Len(SearchText)
If Chr(FileArr(l + l1)) <> Mid(SearchText, l1 + 1, 1) Then Searched = False
Next l1

If Searched = True Then
Images(SRpic) = l
SRpic = SRpic + 1
End If

Номер ответа: 1
Автор ответа:
Воронков Василий

Номер ответа: 2
Автор ответа:
vig11

в первом For на переменную.

Dim i As Integer

i = FileSize — Len(SearchText)

If Searched = True Then

If Searched Then

For l1 = 0 To 3 »Len(SearchText)
If Chr(FileArr(l + l1)) <> Mid(SearchText, l1 + 1, 1) Then

For l1 = 0 To 3 »Len(SearchText)
If StrComp(Chr(FileArr(l + l1)) , Mid(SearchText, l1 + 1, 1), vbBinaryCompare)<>0 Then

Номер ответа: 3
Автор ответа:
Alex3

Откуда такая уверенность, что GOTO самая тормозящая вещь во всех ЯВУ? По моему это одна из самых быстрых команд!

Номер ответа: 4
Автор ответа:
S e M a

Номер ответа: 5
Автор ответа:
Воронков Василий

VB — структурно ориентированный ЯВУ. Goto, если кто не знает, элемент линейного программирования. Линейные команды всегда выполняются знач. медленнее. Если вас это удивляет, то вы блуждаете во тьме, и для выхода на свет могу порекомендовать книгу «QuickBasic 4.5 для носорогов» 1992 года производства.

ЗЫ. Для c длиной файла лучше использовать EOF

While not EOF(1) ‘ if opened as #1

Номер ответа: 6
Автор ответа:
С т р а ш ны й С о н

Совет для всех программистов на Visual Basic:

В вашей программе должно быть как можно меньше GoTo, так как эта комадна предназначена в первую очередь для бестолковых. Никакой профессиональный программист никогда не поставит в своей проге слово GoTo. (какое обилие отрицаний )

Номер ответа: 7
Автор ответа:
Alex3

После компиляции VB код превращает в машинный. А процессору совершенно по фигу каким там ЯВУ является VB. Goto компилится в одну машинную команду плюс адрес.

В качестве демонстрации:

Создаем две кнопочки, добавляем код, КОПИЛИРУЕМ.

Обладатели медленных машин могут убрать нолики, если надо.

Private Sub Command1_Click()
Dim i As Long, t As Double
t = Timer
mBegin:

Private Sub Command2_Click()
Dim i As Long, t As Double
t = Timer
For i = 0 To 1000000000

Next i
MsgBox Timer — t
End Sub

Пустой цикл с GoTo почти на 40% быстрее (на P4). А приводить примеры для языков, код которых нельзя откомпилить в машинный ИМХО не правильно.

З.Ы. А излишнее использование GoTo не рекомендуется, по крайней мере для программистов, а не для носорогов, потому что код становится прохо структурированных и плохо читаемый.

Номер ответа: 8
Автор ответа:
Воронков Василий

Интересно. Если верить вашему посту, то получается, что все равно какой компайлер используется — скорость все равно одна?

зы. пузырьковый for/next штука тоже не особо скоростная

Номер ответа: 9
Автор ответа:
Alex3

Во-первых, я не агитирую за использование GoTo, я лишь опроверг мнение, что он «знач. медленнее».

Во-вторых , как интересно такой профи как ты обработку ошибок делает, не нарушая принципа «Никакой профессиональный программист никогда не поставит в своей проге слово GoTo»?

Ну, а в третьих, из-за отсутствия в VB Continue (кстати, в VB.Net случайно не добавили?) использование GoTo бывает очень даже полезно (н только мое мнение).

Естественно, что в зависимости от компилятора скорость может отличаться. Откуда такой вывод сделан. К тому же мы говорим про VB, а в QuickBasic компилятора вообще нет.

Номер ответа: 10
Автор ответа:
Воронков Василий

Читать еще:  Макросы для эксель в примерах

О QuickBasic я написал чтоб товарищи ознакомились с линейным программированием. Такая книга и вправду была, и я её читал в 1992 году — так что никого не хотел задеть.

По поводу того все равно ли процессору каким ЯВУ явл. васька. Процессору далеко не все равно каким образом создается машинный код. И понятное дело, что компайлер VB не самый быстрый из известных.

По поводу Goto — это общепризнанный факт. Примитивные примеры вроде того ничего в действительности не проясняют, тк на быстродействие могут влиять посторонние вещи. А если у тебя собственное мнение по данному поводу, то лучше предложи автору первого поста свой вариант по оптимизации кода

Номер ответа: 11
Автор ответа:
С т р а ш ны й С о н

Насчёт обработки ошибок: если в Advanced Optimizations установить флажки, никакой GoTo уже не поможет. Я ошибки не обрабатываю, а ПРЕДОТВРАЩАЮ.

Номер ответа: 12
Автор ответа:
Alex3

Есть ошибки, которые нельзя предотвратить! «On Error Resume Next» Forever?

Номер ответа: 13
Автор ответа:
С т р а ш ны й С о н

Например какие?

Номер ответа: 14
Автор ответа:
Alex3

Удаление занятого файла, не дискеты в дисководе, не подключен сетевой диск, ошибки доступа, соединения, unknown errors и много чего другого.

Вообще глупо отрицать необходимость обработчика ошибок, а он в VB реализуется только с помощью goto.

Возвращаемый индекс элемента в массиве Excel VBA

У меня есть массив prLst, который представляет собой список целых чисел. Целые числа не сортируются, поскольку их позиция в массиве представляет собой конкретный столбец в электронной таблице. Я хочу знать, как найти конкретное целое число в массиве и вернуть его индекс.

Кажется, нет никакого ресурса, показывающего мне, как без превращения массива в диапазон на листе. Это кажется немного сложным. Возможно ли это с VBA?

Создан 11 авг. 11 2011-08-11 19:06:11 H3lue

Обновлено показать, используя Match (с .index), чтобы найти значение в размерности двумерного массива:

EDIT: он стоит здесь, иллюстрирующую, что @ARich отметил, что использование Index() для среза массива имеет ужасную производительность, если вы делаете это в цикле.

При тестировании (код ниже) подход Index() почти в 2000 раз медленнее, чем использование вложенного цикла.

и он работает! +1 Я действительно не знал, что можно использовать этот метод совпадения совпадений в массиве VBA! – Patrick Honorez 11 авг. 11 2011-08-11 20:26:51

Многие из функций листа Excel имеют аналогичную форму, доступную через Application.WorksheetFunction.[FunctionName] Обратите внимание, что если вы отпустите часть WorksheetFunction (как в моем примере), тогда возвращаемое значение функции может быть проверено с помощью IsError(). Если вы включаете часть WorksheetFunction, то (например), где Match() не находит совпадение, она выдает ошибку, которую вам нужно поймать с помощью обработчика ошибок. – Tim Williams 11 авг. 11 2011-08-11 20:55:06

Аккуратно! Совместим ли также с многомерными массивами? – aevanko 11 авг. 11 2011-08-11 23:57:04

Спасибо за обновление 🙂 – aevanko 12 авг. 11 2011-08-12 12:02:40

Я использовал эту функцию для другой программы, которую я пишу, и по какой-то причине я получаю ошибку несоответствия типа, хотя первое значение является целым числом, а второе значение представляет собой массив, содержащий целые числа. Есть ли причина, почему это произойдет? – H3lue 31 авг. 11 2011-08-31 23:26:00

@ H3lue Трудно сказать, в чем проблема, без фактического кода. Плюс вы даже не упоминаете, какую версию вы пытаетесь использовать . – Tim Williams 31 авг. 11 2011-08-31 23:29:30

@TimWilliams Простите, что это произошло после такого долгого времени . Я просто хотел указать будущим читателям, что в некоторых тестах, которые я сделал, для возврата ссылки «строка», такой как метод «Матч/Индекс» выше, значительно быстрее использовать регулярный цикл «Do While» (примерно на 530 процентов быстрее). Метод, описанный выше, по-прежнему действительно полезен в определенных ситуациях, но если время имеет существенное значение, я рекомендую использовать цикл. – ARich 02 ноя. 13 2013-11-02 07:01:17

Следует также упомянуть, что я тестировал только метод «Матч/Индекс» в 2D-массиве; Я не тестировал пример «Match» в массиве 1D, как показано выше. – ARich 02 ноя. 13 2013-11-02 07:05:07

Да, это не взлом производительности. Я не думаю, что это будет быстрее в массиве 1d. – Tim Williams 02 ноя. 13 2013-11-02 16:27:16

Есть ли способ использовать функцию Match с некоторым допуском ошибки? Я хотел бы использовать это для нахождения индекса элемента в массиве чисел с плавающей запятой. – Hans 26 июн. 15 2015-06-26 04:44:03

Это вы что искали?

Создан 11 авг. 11 2011-08-11 20:14:49 Jon49

Вот еще один способ:

Создан 11 авг. 11 2011-08-11 20:18:14 Paul McLain

петля, чтобы найти значение? – egidiocs 21 май. 14 2014-05-21 23:04:13

максимально быстрое исполнение для целых чисел (как испытано ниже прив)

фрагмент, позволяет проверить предположение, что передача по ссылке в качестве аргумента означает что-то. (Ответ нет), чтобы использовать его заменить MyList и MyValue ваших имен переменных:

доказать точку я сделал несколько тестов

здесь не результаты:

класс с именем PerformanceMonitor

Плохая производительность с использованием цикла . – Holene 09 ноя. 15 2015-11-09 08:59:47

Я думаю, что плохая производительность — это использование варианта в качестве аргументов. по причине prefetcher эффект. т.е. если все память может быть прочитана заранее. как и все переменные, одинаковы и читаются, чтобы они хорошо работали. если он скачет в ячейках памяти, использование ссылок может работать медленнее. каждый раз, когда он перескакивает через ссылку, он снижает производительность на o (1). для многих ссылок это подобно (o (1) + o (1) + o (1) + o (1)) * nloop. – Shimon Doodkin 09 ноя. 15 2015-11-09 20:43:47

вариант — это формат инкапсуляции. OLE-объекты, такие как bstr и безопасный массив, обычно являются ссылками вне процесса в системной памяти. и распределяется динамически. в разных положениях в памяти. и безопасный массив легко может быть массивом ссылок. и варианты также могут быть ссылкой на ссылку. поэтому он должен быть медленным по определению. Я предполагаю, что функции excel взламывают систему и оптимизированы для этого типа проблем, и, чтобы быть быстрее, как-то игнорировать несколько ссылок и проверок, когда это возможно – Shimon Doodkin 09 ноя. 15 2015-11-09 20:48:42

Читать еще:  В эксель найти

Я думаю, возможно, это может работать быстрее, если оно будет использовать несколько ссылок меньше. например, если аргументы будут простыми типа типа integer. и переменные не будут ссылаться как массив byref. но byval для них является локальной копией, а не ссылкой (изменить тип аргумента от варианта до целого, а byref — byval) также, возможно, не использовать функцию, а фрагмент в каждом месте – Shimon Doodkin 09 ноя. 15 2015-11-09 20:52:31

Я сделал pef-тест. на самом деле производительность очень хорошая. потому что использовать цикл и не использовать функцию excel. префиксное тестирование показывает также, что для функции есть ссылка на ссылочную стоимость доступа, а также для каждого варианта в цикле. также кажется, что сравнение с excel делает некоторое копирование данных и, возможно, конвертирование в Range. thta является дорогостоящим с точки зрения производительности – Shimon Doodkin 09 ноя. 15 2015-11-09 22:23:34

Проголосовать за меня за класс контроля производительности – nkatsar 01 июн. 17 2017-06-01 18:16:36

Поиск в массиве в excel vba

как мне найти в масиве байт последовательность байт, но быстрым способом, мой метод маленька тормозащий

For l = 0 To FileSize — Len(SearchText)
If exitsrch = True Then GoTo ExSrch

Searched = True
For l1 = 0 To 3 »Len(SearchText)
If Chr(FileArr(l + l1)) <> Mid(SearchText, l1 + 1, 1) Then Searched = False
Next l1

If Searched = True Then
Images(SRpic) = l
SRpic = SRpic + 1
End If

Номер ответа: 1
Автор ответа:
Воронков Василий

Номер ответа: 2
Автор ответа:
vig11

в первом For на переменную.

Dim i As Integer

i = FileSize — Len(SearchText)

If Searched = True Then

If Searched Then

For l1 = 0 To 3 »Len(SearchText)
If Chr(FileArr(l + l1)) <> Mid(SearchText, l1 + 1, 1) Then

For l1 = 0 To 3 »Len(SearchText)
If StrComp(Chr(FileArr(l + l1)) , Mid(SearchText, l1 + 1, 1), vbBinaryCompare)<>0 Then

Номер ответа: 3
Автор ответа:
Alex3

Откуда такая уверенность, что GOTO самая тормозящая вещь во всех ЯВУ? По моему это одна из самых быстрых команд!

Номер ответа: 4
Автор ответа:
S e M a

Номер ответа: 5
Автор ответа:
Воронков Василий

VB — структурно ориентированный ЯВУ. Goto, если кто не знает, элемент линейного программирования. Линейные команды всегда выполняются знач. медленнее. Если вас это удивляет, то вы блуждаете во тьме, и для выхода на свет могу порекомендовать книгу «QuickBasic 4.5 для носорогов» 1992 года производства.

ЗЫ. Для c длиной файла лучше использовать EOF

While not EOF(1) ‘ if opened as #1

Номер ответа: 6
Автор ответа:
С т р а ш ны й С о н

Совет для всех программистов на Visual Basic:

В вашей программе должно быть как можно меньше GoTo, так как эта комадна предназначена в первую очередь для бестолковых. Никакой профессиональный программист никогда не поставит в своей проге слово GoTo. (какое обилие отрицаний )

Номер ответа: 7
Автор ответа:
Alex3

После компиляции VB код превращает в машинный. А процессору совершенно по фигу каким там ЯВУ является VB. Goto компилится в одну машинную команду плюс адрес.

В качестве демонстрации:

Создаем две кнопочки, добавляем код, КОПИЛИРУЕМ.

Обладатели медленных машин могут убрать нолики, если надо.

Private Sub Command1_Click()
Dim i As Long, t As Double
t = Timer
mBegin:

Private Sub Command2_Click()
Dim i As Long, t As Double
t = Timer
For i = 0 To 1000000000

Next i
MsgBox Timer — t
End Sub

Пустой цикл с GoTo почти на 40% быстрее (на P4). А приводить примеры для языков, код которых нельзя откомпилить в машинный ИМХО не правильно.

З.Ы. А излишнее использование GoTo не рекомендуется, по крайней мере для программистов, а не для носорогов, потому что код становится прохо структурированных и плохо читаемый.

Номер ответа: 8
Автор ответа:
Воронков Василий

Интересно. Если верить вашему посту, то получается, что все равно какой компайлер используется — скорость все равно одна?

зы. пузырьковый for/next штука тоже не особо скоростная

Номер ответа: 9
Автор ответа:
Alex3

Во-первых, я не агитирую за использование GoTo, я лишь опроверг мнение, что он «знач. медленнее».

Во-вторых , как интересно такой профи как ты обработку ошибок делает, не нарушая принципа «Никакой профессиональный программист никогда не поставит в своей проге слово GoTo»?

Ну, а в третьих, из-за отсутствия в VB Continue (кстати, в VB.Net случайно не добавили?) использование GoTo бывает очень даже полезно (н только мое мнение).

Естественно, что в зависимости от компилятора скорость может отличаться. Откуда такой вывод сделан. К тому же мы говорим про VB, а в QuickBasic компилятора вообще нет.

Номер ответа: 10
Автор ответа:
Воронков Василий

О QuickBasic я написал чтоб товарищи ознакомились с линейным программированием. Такая книга и вправду была, и я её читал в 1992 году — так что никого не хотел задеть.

По поводу того все равно ли процессору каким ЯВУ явл. васька. Процессору далеко не все равно каким образом создается машинный код. И понятное дело, что компайлер VB не самый быстрый из известных.

По поводу Goto — это общепризнанный факт. Примитивные примеры вроде того ничего в действительности не проясняют, тк на быстродействие могут влиять посторонние вещи. А если у тебя собственное мнение по данному поводу, то лучше предложи автору первого поста свой вариант по оптимизации кода

Номер ответа: 11
Автор ответа:
С т р а ш ны й С о н

Насчёт обработки ошибок: если в Advanced Optimizations установить флажки, никакой GoTo уже не поможет. Я ошибки не обрабатываю, а ПРЕДОТВРАЩАЮ.

Номер ответа: 12
Автор ответа:
Alex3

Есть ошибки, которые нельзя предотвратить! «On Error Resume Next» Forever?

Номер ответа: 13
Автор ответа:
С т р а ш ны й С о н

Например какие?

Номер ответа: 14
Автор ответа:
Alex3

Удаление занятого файла, не дискеты в дисководе, не подключен сетевой диск, ошибки доступа, соединения, unknown errors и много чего другого.

Вообще глупо отрицать необходимость обработчика ошибок, а он в VB реализуется только с помощью goto.

Похожие статьи

Ссылка на основную публикацию
Похожие публикации
Adblock
detector