Циклы в Visual Basic Если известно, какое число. Циклы visual basic
Циклические структуры (Visual Basic)
Рекомендуем использовать Visual Studio 2017
Эта документация перемещена в архив и не поддерживается.
Циклические структуры в Visual Basic позволяют выполнить одну или несколько строк кода несколько раз. Операторы в циклической структуре можно повторять следующим образом: пока условие не станет равно True, пока условие не станет равно False, указанное число раз или один раз для каждого элемента в коллекции.
На следующей иллюстрации показана структура цикла, выполняющего набор инструкций до тех пор, пока условие не станет истиной.
Выполнение набора инструкций до тех пор, пока условие не станет истиной
Конструкция While...End While выполняет набор инструкций, пока значение условия, указанного в операторе While, равно True. Дополнительные сведения см. в разделе Оператор While... End While (Visual Basic).
Конструкция Do...Loop позволяет проверить условие в начале или в конце структуры цикла. Можно также указать, следует ли повторять цикл, пока значение условия равно True или же до тех пор, пока оно не станет равно True. Дополнительные сведения см. в разделе Оператор Do...Loop (Visual Basic).
Конструкция For...Next выполняет определенное число итераций. Для отслеживания числа повторений в ней используется управляющая переменная цикла, называющаяся счетчиком. Необходимо указать начальное и конечное значения для этого счетчика и при необходимости указать шаг, на который счетчик будет увеличен за одно повторение. Дополнительные сведения см. в разделе Оператор For... Next (Visual Basic).
Конструкция For Each...Next выполняет набор инструкций один раз применительно к каждому элементу коллекции. При этом указывается управляющая переменная цикла, но нет необходимости определения ее начального или конечного значения. Дополнительные сведения см. в разделе Оператор For Each... Next (Visual Basic).
Задачи
Основные понятия
Другие ресурсы
msdn.microsoft.com
14. Циклы VB.
В этом разделе Вы узнаете о циклах языка и научитесь с ними работать.
Цикл For Each... Next
Способ проверить, не существует ли уже объект коллекции – последовательный перебор всех членов набора и проверка условия.
For Each <член_коллекции> In <коллекция> <некоторые действия> Next <член коллекции>-
В такой конструкции последовательно выбирается каждый <член_коллекции>, принадлежащий к <коллекции>, с ним производятся <некоторые действия>, а затем действия повторяются для следующего <члена_коллекции> до тех пор, пока не будут задействованы все элементы набора.
Для нашего случая это будет выглядеть так:
For Each NewSheet In colSheets <некоторые действия> Next NewSheetПреимущество такого подхода – нет нужды знать, сколько именно форм-заметок нами открыто, обработаны будут все.
Теперь следует определить, какое условие нам следует проверять для определения существования члена набора.
-
Как уже говорилось, заголовок формы-странички – уникальное значение. При выборе записи на frmDiary текущее значение поля “ Dates” определяет заголовок вновь создаваемой формы.
-
Значит, следует проверить, не совпадает ли текущее значение поля “ Dates” с заголовком одной из созданных форм-страничек, и если да – вывести эту форму-страничку на передний план:
Вот как это делается:
For Each NewSheet In colSheets If NewSheet.Caption = datPrimaryRS.Recordset("Dates") Then NewSheet.ZOrder Exit Sub End If Next NewSheetСтрока Exit Sub – для выхода из процедуры, если существующая форма-страничка выведена на передний план. Если опустить эту строку, то будет создаваться новый экземпляр уже существующей странички, что приведет к ошибке.
Остается еще одно ошибочная ситуация, а именно, если мы создаем первую страничку, и в наборе еще ничего нет. Приемлемый здесь способ – игнорирование ошибок.
Добавьте код для игнорирования ошибок сами.
Теперь обработчик события нажатия на кнопку приобретет вид:
Private Sub cmdSheet_Click() On Error Resume Next For Each NewSheet In colSheets If NewSheet.Caption = datPrimaryRS.Recordset("Dates") Then NewSheet.ZOrder Exit Sub End If Next NewSheet Set NewSheet = New frmSheet NewSheet.Caption = datPrimaryRS.Recordset("Dates") NewSheet.txtSheet.Text = datPrimaryRS.Recordset("Note") colSheets.Add NewSheet, NewSheet.Caption End Sub-
Если при переборе набора страничек искомая найдена – она выводится на первый план и происходит выход из процедуры.
-
Если же выход из процедуры не произошел – значит, искомой формы нет! В этом коде имитируется проверка условий подобного рода:
If <форма найдена> Then <выход>
.
.
.
If <из процедуры не вышли, значит, форма не найдена> Then <продолжаем>
Форма frmDiary готова.
Перейдем к форме-страничке. Наша задача сделать так, чтобы при закрытии странички происходило обновление записи в БД, и сохранялись изменения, внесенные нами в текст. Это следует делать в обработчике события выгрузки формы Form_Unload.
-
Здесь мы будем выполнять задачу, обратную той, что делали при создании формы-странички, а именно – по идентификатору (заголовку) странички будем искать соответствующую ей запись БД.
-
Делается это последовательным перебором всех записей БД и сравниванием их с образцом (заголовком странички). Но записи БД не входят в коллекцию, и цикл For Each здесь не подойдет. К счастью, в VB есть несколько других видов циклов, в том числе и подходящих для нашей задачи.
Язык VB различает циклы For ... Next (частный случай – цикл For Each) и циклы Do... Loop.
Цикл For... Next
For index = 0 to counter <действия в цикле> Next index-
Здесь index – переменная, которой присваивается начальное значение (в нашем случае 0), после выполнения неких действий значение переменной index увеличивается (автоматически происходит увеличение на 1) и цикл повторяется до тех пор, пока index не станет равен counter. Как видно, в общем случае количество циклов должно быть известно до начала выполнения.
ЦиклDo... Loop
Если же число проходов цикла заранее не известно, предпочтительнее цикл Do... Loop (Делай... Цикл).
Общая структура его такова:
Do <некие действия> Loop-
Такой цикл будет повторяться до тех пор, пока не будет произведен принудительный выход (с помощью строки Exit Do).
Разновидности цикла Do... Loop:
Do Until <условие> <действия> Loop-
Цикл будет происходить, пока не выполнится <условие>, причем проверка происходит в самом начале, и, если <условие> заранее выполняется, не будет ни одного прохода.
-
Цикл будет происходить, пока не выполнится <условие>, но, так как проверка в конце цикла, то цикл будет выполнен минимум один раз.
-
Цикл будет происходить, пока <условие>не перестанет выполняться, причем проверка происходит в самом начале, и, если <условие> заранее не выполняется, не будет ни одного прохода.
-
Цикл будет происходить, пока не перестанет выполняться <условие>, но, т.к. проверка в конце цикла, то цикл будет выполнен минимум один раз.
Так вот, для нашей программы следует «пролистать» всю БД от начала до конца. Если помните, у набора записей есть свойство EOF, обозначающее достижение конца набора записей и есть методы для перемещения по набору…
-
Нам подойдет цикл Do Until... Loop (мы будем проверять, не достигли ли мы конца набора записей БД, но проверку надо производить вначале, чтобы исключить проверку пустой БД).
Итак, создайте обработчик события Form_Unload (не забудьте, мы работаем с кодом frmSheet).
Чтобы перемещаться до конца набора записей БД, сперва обязательно следует сделать так:
<набор_записей>.MoveLast
<набор_записей>.MoveFirst
То есть, переместиться на последнюю запись, при этом становится известным общее количество записей, а потом вернуться на первую запись для совершения тех или иных действий. Иначе VB не сможет правильно определить достижение конца набора.
Добавьте код в обработчик события Form_Unload:
frmDiary.datPrimaryRS.Recordset.MoveLast
frmDiary.datPrimaryRS.Recordset.MoveFirst
А теперь создадим заготовку цикла:
Do Until frmDiary.datPrimaryRS.Recordset.EOF frmDiary.datPrimaryRS.Recordset.MoveNext LoopМетод MoveNext перемещает указатель на следующую позицию набора записей. Без этого цикл станет бесконечным (так как будет постоянно проверяться одна и та же запись) и программа зависнет!
В циклах Do... Loop обязательно следует предусматривать условие завершения цикла, иначе цикл может стать бесконечным и программа «зависнет».
Обратите внимание: мы явно указываем, на какой форме находится элемент управления данными. Если программа большая, это избавит вас от проблем.
If frmDiary.datPrimaryRS.Recordset(“Dates”) = Me.Caption Then
End If
frmDiary.datPrimaryRS.Recordset(“Note”) = Me.txtSheet.Text
Exit Do
Код примет вид:
Private Sub Form_Unload(Cancel As Integer) frmDiary.datPrimaryRS.Recordset.MoveLast frmDiary.datPrimaryRS.Recordset.MoveFirst Do Until frmDiary.datPrimaryRS.Recordset.EOF If frmDiary.datPrimaryRS.Recordset("Dates") = Me.Caption Then frmDiary.datPrimaryRS.Recordset("Note") = Me.txtSheet.Text Exit Do End If frmDiary.datPrimaryRS.Recordset.MoveNext Loop End SubПри удалении члена коллекции применяется метод коллекции Remove, параметр метода - тот же, что и при добавлении члена методом Add, т.е. – идентификатор члена коллекции.
Код примет вид:
Private Sub Form_Unload(Cancel As Integer) frmDiary.datPrimaryRS.Recordset.MoveLast frmDiary.datPrimaryRS.Recordset.MoveFirst Do Until frmDiary.datPrimaryRS.Recordset.EOF If frmDiary.datPrimaryRS.Recordset("Dates") = Me.Caption Then frmDiary.datPrimaryRS.Recordset("Note") = Me.txtSheet.Text Exit Do End If frmDiary.datPrimaryRS.Recordset.MoveNext Loop For Each NewSheet In colSheets If NewSheet.Caption = Me.Caption Then colSheets.Remove Me.Caption Exit For End If Next NewSheet End Sub-
Вызовите дочернюю форму-дневник (команда меню нашей программы ВидДневник...).
-
Откройте несколько (2-3) странички путем нажатия на кнопку « Страничка».
-
Закройте эти странички в произвольном порядке, наблюдая при этом за поведением указателя («стрелочка влево» на сетке формы дневника).
Как вы можете убедиться, после закрытия странички указатель перемещается в позицию, соответствующую этой страничке.
-
Но если в БД десятки и сотни записей, такой поведение может оказаться неудобным.
-
Гораздо лучше, если указатель будет оставаться на выбранной записи и не будет перемещаться при закрытии странички.
-
Это сделать нетрудно, как известно, у набора записей есть свойство AbsolutePosition, обозначающее текущее положение указателя в наборе. Нам надо сначала сохранить значение свойства, а затем восстановить его.
Объявите переменную в самом начале процедуры:
Dim varPosition
varPosition = frmDiary.datPrimaryRS.Recordset.AbsolutePosition
frmDiary.datPrimaryRS.Recordset.AbsolutePosition = varPosition
Код примет вид:
Private Sub Form_Unload(Cancel As Integer) Dim varPosition varPosition = frmDiary.datPrimaryRS.Recordset.AbsolutePosition frmDiary.datPrimaryRS.Recordset.MoveLast frmDiary.datPrimaryRS.Recordset.MoveFirst Do Until frmDiary.datPrimaryRS.Recordset.EOF If frmDiary.datPrimaryRS.Recordset("Dates") = Me.Caption Then frmDiary.datPrimaryRS.Recordset("Note") = Me.txtSheet.Text frmDiary.datPrimaryRS.Recordset.AbsolutePosition = varPosition Exit Do End If frmDiary.datPrimaryRS.Recordset.MoveNext Loop For Each NewSheet In colSheets If NewSheet.Caption = Me.Caption Then colSheets.Remove Me.Caption Exit For End If Next NewSheet End SubПроверьте программу в работе.
Наверное, вы уже обратили внимание, что в коде многократно встречается последовательность frmDiary.datPrimaryRS.Recordset. Безусловно, вы можете использовать конструкцию With.
Код примет вид:
Private Sub Form_Unload(Cancel As Integer) Dim varPosition With frmDiary.datPrimaryRS.Recordset varPosition = .AbsolutePosition .MoveLast .MoveFirst Do Until .EOF If frmDiary.datPrimaryRS.Recordset ("Dates") = _ Me.Caption Then frmDiary.datPrimaryRS.Recordset ("Note") = _ Me.txtSheet.Text .AbsolutePosition = varPosition Exit Do End If .MoveNext Loop End With For Each NewSheet In colSheets If NewSheet.Caption = Me.Caption Then colSheets.Remove Me.Caption Exit For End If Next NewSheet End SubКак видите, код стал гораздо короче и понятнее. При больших БД такой прием даст вам значительное увеличение скорости работы.
На этом можно было бы и закончить, но мы упустили ситуацию, когда мы закрываем страничку, а в наборе почему-то записей нет. Здесь поможет уже известное нам игнорирование ошибок.
Внесите строку для игнорирования ошибок.
Еще одна ситуация, когда мы закрываем страничку, но изменений в ней не было произведено – и обновлять БД не надо.
Для обхода этой ситуации сделаем следующее:
Dim boolChange As Boolean
Как помните, переменные логического типа могут принимать только значения True или False. Сделаем так, что после создания формы-странички эта переменная будет иметь значение False, но после внесения изменений в текст ее значение изменится на True.
В обработчике события загрузки формы-странички присвойте переменной значение False:
Private Sub Form_Load() boolChange = False End SubУ контрола TextBox есть событие Change, которое происходит при любом редактировании текста.
В обработчике этого события присвойте переменной значение True:
Private Sub txtSheet_Change() boolChange = True End SubВ следующем разделе мы проверим, что получилось.
Вопросы
-
Что такое цикл? Для чего он применяется?
-
Какие виды циклов Вам известны?
-
Какое обязательное условие следует выполнять при написании цикла Do... Loop? Почему?
-
Что такое перебор коллекции, как он выполняется?
Задания
-
Законспектируйте раздел.
kitkitch.narod.ru
Visual Basic - Понятие цикла. Виды циклов.
При разработке программы вы сталкиваетесь с ситуациями, когда возникает необходимость многократного, последовательного выполнения одного и того же фрагмента программы. Часто заранее известно, сколько раз требуется выполнить данный фрагмент, но иногда фрагмент требует выполнения только при наличии определенного условия, или до момента выполнения этого условия (когда условное выражение примет значение True). Visual Basic содержит конструкции, которые позволяют легко определять и выполнять такие повторяющиеся фрагменты программы. Это – циклы.
Конструкция For…Next.
For counterVariable = start To end [Step step]
…[фрагмент для выполнения в цикле]
Next [counterVariable]
Здесь:
CounterVariable – переменная числового типа, её значение увеличивается при каждом прохождении цикла
start – число, с которого следует начинать отсчет
end – число, до которого следует считать. Когда переменная CounterVariable достигает этого значения, выражение, заключенное в цикле, выполняется последний раз, и выполнение продолжается, начиная с оператора, следующего за Next
Step – значение, на которое увеличивается переменная CounterVariable после каждого выполнения цикла, step является необязательным параметром, если он не указан, то значение счетчика увеличивается на единицу
Если неизвестно сколько раз должен выполняться цикл, используется конструкция Do..Loop
Do
[Операторы]
if expression Then Exit Do
Loop
В этом фрагменте цикл будет выполняться до тех пор, пока выражение expression не примет значение True.
Но обычно условное выражение встраивается непосредственно в структуру Do…Loop:
Do Whileexpression
[Операторы]
Loop
Цикл выполняется, пока выражение expression имеет значение True. (англ. while – пока).
Do Until expression
[Операторы]
Loop
Цикл выполняется, пока выражение expression не примет значение True. (англ. until – до тех пор пока).
Задания:
1.‘Обратный отсчет’: Даны два целых числа A и B (A<B).
a)Вывести в порядке убывания все целые числа, расположенные между A и B (включая сами числа A и B)
b)Найти сумму всех целых чисел от A до B включительно.
2.‘Последовательности’: Дано целое число N(>0).
a)найти сумму 1+1/2+1/3+...+1/N
b)найти сумму N+(N+1)+(N+2)+...+(2·N)
c)найти факториал числа N: N!=1*2*3*…*(N-1)*N
d)*используя один цикл, найти сумму 1+1/(1!)+1/(2!)+1/(3!)+...+1/(N!). Полученное число является приближенным значением константы e = exp(1).
3.Дано целое число N(>1). Найти наименьшее целое число K, при котором выполняется неравенство 3K>N.
4.…
8.7 Visual Basic - Строковый тип данных. Функции преобразования строк.
Текстовый тип данных называется string. Строка может содержать от 0 до приблизительно 2 миллионов символов.
Существуют следующие операции со строками:
Слияние строк & – "Это" & "тест" = “Этотест”
Функция Len (строка) – возвращает количество символов в строке
Функция Left (строка, число) – возвращает указанное число первых символов строки
Функция Right (строка, число) – возвращает указанное число последних символов строки
Функция Mid (строка, n, m) – возвращает m символов, начиная с n-ого
Функция Instr (строка1, строка2) – ищет одно строковое значение (строка2) в другом (строка1) и возвращает местоположение первого символа из найденного строкового значения
Функция Trim (строка) – удаляет все пробелы с конца и с начала передаваемой строки
Функция Ltrim(строка) – удаляет все пробелы с начала передаваемой строки
Функция Rtrim(строка) – удаляет все пробелы с конца передаваемой строки
Чтобы преобразовать число в текст используется функция
CStr (выражение)
Чтобы преобразовать строку в число используются функции
CDbl (выражение) возвращает число типа Double
Cint (выражение) Integer
CLng (выражение) Long
Cshort (выражение) Short
Задания:
1.Модифицировать программу вычисления корней квадратного уравнения (из 8.2 и 8.5) так, чтобы текст в едином окне вывода менялся:
i) Нет корней
ii) Один корень: x=
iii) Два корня: x1= , x2=
2.Дана строка “Имя Фамилия”, вывести отдельно (в 2 поля) “Имя” и “Фамилия”
3.Дана строка, вывести символы этой строки в обратном порядке
4.Найти количество слов в строке (слова разделены пробелами)
5.*Найти длину самого длинного слова
6.…
infopedia.su
Циклы в Visual Basic Если известно, какое число
Циклы в Visual Basic
Если известно, какое число повторений данной группы операторов необходимо выполнить, можно воспользоваться циклической конструкцией For…Next. For Cчетчик=Начальное значение To Конечное значение [Step шаг] Операторы блока S Next [счетчик]
Вычисление степени числа два Использовать при вычислении можно только действие умножение. Для вычислений организуем цикл For…Next. Будем умножать на 2 накопленное произведение (n-1) раз: For i = 1 To n - 1 Two = 2 * Two Next i Two – это накопленное произведение, которое после завершения цикла и будет являться искомым значением, i – переменная цикла.
Условные циклы Часто бывает так, что необходимо повторить операторы, выражающие совокупность действий, какое-то число раз, но сколько будет повторений заранее не известно. В жизни такого рода ситуации встречаются довольно часто. Например, вам необходимо дойти до двери комнаты, в которой вы находитесь, повторяя действие “сделай один шаг”. Сколько повторений вам придется сделать, заранее вы не знаете. Вы делаете повторения, пока не упретесь в дверь. В таких случаях количество повторений зависит от некоторого условия. Условие выхода из цикла можно поставить в начале цикла, перед повторяющимися действиями. Такой цикл называется циклом с предусловием. Условие выхода из цикла можно поставить в конце цикла, после повторяющихся операторов. Такой цикл называется циклом с послеусловием
Оператор цикла WHILE...WEND используется для организации циклов с предусловием и имеет следующий формат: While Wend Операторы, перечисленные в цикле, выполняются до гех пор, пока выполняется заданное условие продолжения цикла. При этом условие проверяется перед выполнением цикла, следовательно, цикл может не выполнятьcя ни разу, если условие нарушается в самом начале.
Оператор цикла DO...LOOP используется для орга-шзации циклов с неопределенным числом повторений с предусловием и с постусловием). Этот оператор для организации цикла с предусловием может использоваться в двух модификациях: а) Do While Loop б) Do Until Loop Операторы, перечисленные в цикле, выполняются до тех пор, пока выполняется заданное условие продолжения цикла, если задано предложение While, или до тех ор, пока нарушается условие прекращения цикла
Для организации цикла с постусловием оператор Do Loop также может быть использован в двух модификациях: в) Do • Loop While г) Do Loop Until Условие выполнения или прекращения цикла здесь проверяется в конце. Поэтому этот цикл обязательно выполняется хотя бы один раз.
Вычисление факториала натурального числа Известно, что факториал натурального числа можно вычислить последовательным перемножением всех натуральных чисел, начиная с единицы до данного натурального числа: N!=1 * 2 * 3 *…* (N - 1) * N Сделайте небольшой проект с использованием цикла For…Next, в котором после задания пользователем значения натурального N будет рассчитываться значение N! Результат вычислений должен распечатываться на форме.
№7,8, 12 Домашнее задание: выучить форму записи циклических операторов, подготовится к практической работе.
present5.com
PavelDev: Циклы в VB.NET. Продолжение
Вчера я уже рассказал вам о том, какие есть в Visual Basic циклы. Но мы рассмотрели тогда только два вида циклов (For … Next и Do … Loop). Сегодня мы закончим изучение всех циклов, которые есть в Visual Basic.NET. Сегодня нам предстоит изучить еще два цикла – Do … Loop Until и Do While … Loop.Скажу еще несколько слов о примерных темах будущих статей. Уже довольно скоро (наверно – со среды) я планирую начать описывать объектно-ориентированное программирование. Сначала будет вводная статья (в которой опишу основы ООП), а потом уже буду показывать конкретные примеры на VB.NET. Так что не пропустите, почаще посещайте блог. А пока – приступим к продолжению изучения циклов.Для визуально демонстрации и большего понимания циклов, которые мы рассмотрим, приведу вот такую картинку:Сейчас изучим два цикла, как я уже говорил. Если набрать в Visual Studio слово Do, то она вам сама подскажет, какие циклы существуют:Этот цикл обычно называют с постусловием. Делу тут во в чем – в основе данного цилка (как это и понятно из его названия) лежит безусловный цикл Do … Loop. Как мы помним – он будет выполняться бесконечное число раз, если не использовать условие выхода Exit. Каждый раз делать так не очень удобно. Поэтому и придумали два цикла, которые мы рассмотрим ниже. В цикле Do … Loop Until – условие находится после всех операторов (после слова Until) – именно поэтому он и назван – цикл с постусловием («пост» - после всего кода цикла). Условно, этот цикл можно показать так: Действие Loop Until УсловиеИз этого описания все должно быть понятно. Действие будет выполняться до тех пор, пока Условие не станет истинным (то есть – не примет значение True). Кстати, минимально – этот цикл выполниться один раз, даже если условие будет верным. Имейте это ввиду при программировании с использование Do … Loop Until.Теперь давайте рассмотрим пример работы данного цикла. Тут будет все очень просто – в цикле увеличиваем переменную на пять. Условие выхода – когда эта переменная станет больше 100. На форме расположите TextBox и кнопку для начала цикла. В обработчик кнопки вставьте следующий код: number = number + 5 Loop Until (number > 100) MsgBox(number.ToString)Вот так – все очень просто. На ум не пришло ничего более интересного, простите уж =) В следующий раз постараюсь реабилитироваться.Этот цикл похож на предыдущий, только называется он цикл с предусловием. То есть – условие стоит в начале. Если условие верно – цикл будет выполняться. Тоже не забывайте об этом. Представим данный цикл условно: Do While Условие ДействиеУчтите, что в цикле Do … Loop Until – цикл завершался, когда условие становилось верным. А здесь – цикл выполняется, пока условие верно. То есть, для завершения – необходимо, чтобы условие стало ложным.И опять рассмотрим пример данного цикла. Предположим, нам необходимо выполнять какое-либо действие тысячу раз. Мы не знаем, сколько раз оно уже было выполнено, знаем только то, что после каждой итерации переменная number увеличивается. Нам надо подсчитать, сколько шагов будет выполнено данным циклом. Поэтому, чтобы проверить, выполнился ли наш цикл тысячу раз, мы сначала должны эту переменную проверить и, либо продолжить выполнение цикла – либо завершить его (форма абсолютно такая же, в TextBox введем состояние number, а в обработчике кнопки напишите): Dim number, shag As Integer number = Convert.ToInt32(TextBox1.Text) Do While number < 1000 number = number + 1 shag = shag + 1 MsgBox(shag.ToString)И с этим циклом разобрались. Пока я больше не планирую ничего писать про другие конструкции Visual Basic.NET. Но, возможно – в будущем продолжу.А теперь немного веселья. Данная статья является у меня в блоге сотой, так что поздравьте меня с этим событием:И:Надеюсь, эти сто статей были интересными. Мне понравились не все, но были и такие, которые я бы почитал еще несколько раз. Чтобы порадовать меня – подписывайтесь на RSS и чаще посещайте блог ))
paveldev.blogspot.com
Оператор For... Next (Visual Basic)
- 07/20/2015
- Время чтения: 14 мин
- Соавторы
В этой статье
Повторяет группу операторов заданное число раз.Repeats a group of statements a specified number of times.
СинтаксисSyntax
For counter [ As datatype ] = start To end [ Step step ] [ statements ] [ Continue For ] [ statements ] [ Exit For ] [ statements ] Next [ counter ]ЧастиParts
counter | Требуется в For инструкции.Required in the For statement. Числовой переменной.Numeric variable. Управляющая переменная цикла for.The control variable for the loop. Дополнительные сведения см. в разделе аргумент счетчика далее в этом разделе.For more information, see Counter Argument later in this topic. |
datatype | Необязательный.Optional. Тип данных counter.Data type of counter. Дополнительные сведения см. в разделе аргумент счетчика далее в этом разделе.For more information, see Counter Argument later in this topic. |
start | Обязательно.Required. Числовое выражение.Numeric expression. Начальное значение counter.The initial value of counter. |
end | Обязательно.Required. Числовое выражение.Numeric expression. Конечное значение counter.The final value of counter. |
step | Необязательный.Optional. Числовое выражение.Numeric expression. Величина, на которую counter увеличивается при каждом прохождении цикла.The amount by which counter is incremented each time through the loop. |
statements | Необязательный.Optional. Один или несколько операторов между For и Next , выполняемых указанное число раз.One or more statements between For and Next that run the specified number of times. |
Continue For | Необязательный.Optional. Передает управление следующей итерации цикла.Transfers control to the next loop iteration. |
Exit For | Необязательный.Optional. Передает управление из For цикла.Transfers control out of the For loop. |
Next | Обязательно.Required. Завершает определение For цикла.Terminates the definition of the For loop. |
Примечание
To В этом операторе используется ключевое слово для указания диапазона для счетчика.The To keyword is used in this statement to specify the range for the counter. Можно также использовать это ключевое слово в выберите... Оператор выбора и в объявлении массива.You can also use this keyword in the Select...Case Statement and in array declarations. Дополнительные сведения об объявлениях массивов см. в разделе оператор Dim.For more information about array declarations, see Dim Statement.
Простые примерыSimple Examples
Вы используете For... Next структуры, если вы хотите повторить набор инструкций заданное количество раз.You use a For...Next structure when you want to repeat a set of statements a set number of times.
В следующем примере index переменной начинается со значения 1 и увеличивается при каждой итерации цикла, заканчивается после изменения значения index достигает 5.In the following example, the index variable starts with a value of 1 and is incremented with each iteration of the loop, ending after the value of index reaches 5.
For index As Integer = 1 To 5 Debug.Write(index.ToString & " ") Next Debug.WriteLine("") ' Output: 1 2 3 4 5В следующем примере number переменной начинается с позиции 2 и уменьшается на 0,25 на каждой итерации цикла, заканчивается после изменения значения number становится равным нулю.In the following example, the number variable starts at 2 and is reduced by 0.25 on each iteration of the loop, ending after the value of number reaches 0. Step Аргумент -.25 уменьшает значение 0,25 на каждой итерации цикла.The Step argument of -.25 reduces the value by 0.25 on each iteration of the loop.
For number As Double = 2 To 0 Step -0.25 Debug.Write(number.ToString & " ") Next Debug.WriteLine("") ' Output: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0Совет
Объект во время... Завершить оператор While или сделать... Оператор цикла работает хорошо, если не известен заранее сколько раз, чтобы выполнить инструкции в цикле.A While...End While Statement or Do...Loop Statement works well when you don't know in advance how many times to run the statements in the loop. Тем не менее, если предполагается, что для запуска цикла определенное количество раз, For... Next цикла является лучшим выбором.However, when you expect to run the loop a specific number of times, a For...Next loop is a better choice. Определите количество итераций, при вводе цикла.You determine the number of iterations when you first enter the loop.
Вложенные циклыNesting Loops
Можно вложить For циклы, поместив цикл один в другой.You can nest For loops by putting one loop within another. В следующем примере демонстрируется вложенных For... Next структуры с различными значениями.The following example demonstrates nested For...Next structures that have different step values. Внешний цикл создает строку для каждой итерации цикла.The outer loop creates a string for every iteration of the loop. Внутренний цикл уменьшает переменную счетчика цикла для каждой итерации цикла.The inner loop decrements a loop counter variable for every iteration of the loop.
For indexA = 1 To 3 ' Create a new StringBuilder, which is used ' to efficiently build strings. Dim sb As New System.Text.StringBuilder() ' Append to the StringBuilder every third number ' from 20 to 1 descending. For indexB = 20 To 1 Step -3 sb.Append(indexB.ToString) sb.Append(" ") Next indexB ' Display the line. Debug.WriteLine(sb.ToString) Next indexA ' Output: ' 20 17 14 11 8 5 2 ' 20 17 14 11 8 5 2 ' 20 17 14 11 8 5 2При наличии вложенных циклов, каждый цикл должен иметь уникальный counter переменной.When nesting loops, each loop must have a unique counter variable.
Также можно вложить структур управления различных типов друг в друге.You can also nest different kinds control structures within each other. Дополнительные сведения см. в разделе вложенные структуры управления.For more information, see Nested Control Structures.
Для выхода и для продолженияExit For and Continue For
Exit For Инструкция немедленно завершает работу For...NextThe Exit For statement immediately exits the For…Next цикл передает управление оператору, следующему Next инструкции.loop and transfers control to the statement that follows the Next statement.
Continue For Оператор передачу управления сразу же к следующей итерации цикла.The Continue For statement transfers control immediately to the next iteration of the loop. Дополнительные сведения см. в разделе оператор Continue.For more information, see Continue Statement.
Следующий пример иллюстрирует использование Continue For и Exit For инструкции.The following example illustrates the use of the Continue For and Exit For statements.
For index As Integer = 1 To 100000 ' If index is between 5 and 7, continue ' with the next iteration. If index >= 5 AndAlso index <= 8 Then Continue For End If ' Display the index. Debug.Write(index.ToString & " ") ' If index is 10, exit the loop. If index = 10 Then Exit For End If Next Debug.WriteLine("") ' Output: 1 2 3 4 9 10Можно поместить любое число Exit For инструкций в For...NextYou can put any number of Exit For statements in a For…Next Цикл.loop. При использовании внутри вложенной For...NextWhen used within nested For…Next циклы, Exit For выходит из самого внутреннего цикла и передает управление верхнего уровня вложенности.loops, Exit For exits the innermost loop and transfers control to the next higher level of nesting.
Exit For часто используется после оценки некоторого условия (например, в If... Then... Else структуры).Exit For is often used after you evaluate some condition (for example, in an If...Then...Else structure). Вы можете использовать Exit For для следующих условий:You might want to use Exit For for the following conditions:
Продолжение для выполнения итерации ненужные или невозможно.Continuing to iterate is unnecessary or impossible. Ошибочное значение или запрос на завершение может создать это условие.An erroneous value or a termination request might create this condition.
Объект Try... Catch... Finally инструкция перехватывает исключение.A Try...Catch...Finally statement catches an exception. Можно использовать Exit For в конце Finally блока.You might use Exit For at the end of the Finally block.
У вас есть бесконечный цикл, являющийся цикл, который может запустить большое или возможно, бесконечное число раз.You have an endless loop, which is a loop that could run a large or even infinite number of times. При обнаружении таких условий, можно использовать Exit For для выхода из цикла.If you detect such a condition, you can use Exit For to escape the loop. Дополнительные сведения см. в разделе сделать... Цикл инструкции.For more information, see Do...Loop Statement.
Техническая реализацияTechnical Implementation
Когда For... Next начинает цикл, Visual Basic вычисляет start, end, и step.When a For...Next loop starts, Visual Basic evaluates start, end, and step. Visual Basic вычисляет эти значения только в это время, а затем назначает start для counter.Visual Basic evaluates these values only at this time and then assigns start to counter. Перед оператором блок выполняется, Visual Basic сравнивает counter для end.Before the statement block runs, Visual Basic compares counter to end. Если counter уже больше, чем end значение (или меньше, если step является отрицательным), For завершения цикла и управление передается оператору, следующему Next инструкции.If counter is already larger than the end value (or smaller if step is negative), the For loop ends and control passes to the statement that follows the Next statement. В противном случае выполняется блок операторов.Otherwise, the statement block runs.
При каждом запуске Visual Basic встречает Next инструкция, он увеличивает counter по step и возвращает For инструкции.Each time Visual Basic encounters the Next statement, it increments counter by step and returns to the For statement. После этого сравниваются counter для end, и еще раз она выполняется блок или выходит из цикла, в зависимости от результата.Again it compares counter to end, and again it either runs the block or exits the loop, depending on the result. Этот процесс продолжается до counter передает end или Exit For инструкции.This process continues until counter passes end or an Exit For statement is encountered.
Цикл не останавливается до counter достиг end.The loop doesn't stop until counter has passed end. Если counter равен end, выполнение цикла продолжается.If counter is equal to end, the loop continues. Сравнение, которое определяет, будет ли выполняться блок является counter <= end Если step является положительным и counter >= end Если step является отрицательным значением.The comparison that determines whether to run the block is counter <= end if step is positive and counter >= end if step is negative.
Если изменить значение counter внутри цикла, может быть более сложным для чтения и отладки кода.If you change the value of counter while inside a loop, your code might be more difficult to read and debug. Изменение значения start, end, или step не влияет на значения итерации, которые были определены при первом входе цикла.Changing the value of start, end, or step doesn't affect the iteration values that were determined when the loop was first entered.
Если вложить циклы, компилятор сообщает об ошибке при обнаружении Next инструкции внешнего уровня вложенности перед Next инструкции внутреннего уровня.If you nest loops, the compiler signals an error if it encounters the Next statement of an outer nesting level before the Next statement of an inner level. Однако компилятор может обнаружить это перекрывающихся ошибки только в том случае, если указать counter в каждом Next инструкции.However, the compiler can detect this overlapping error only if you specify counter in every Next statement.
Аргумент шагStep Argument
Значение step может быть положительными или отрицательными.The value of step can be either positive or negative. Этот параметр определяет цикла обработки согласно следующей таблице:This parameter determines loop processing according to the following table:
Положительным или равняться нулюPositive or zero | counter <= end |
Отрицательное числоNegative | counter >= end |
Значение по умолчанию step -1.The default value of step is 1.
Аргумент счетчикаCounter Argument
Следующая таблица показывает, является ли counter определяет новую локальную переменную, которая предназначена для всего For…Next цикла.The following table indicates whether counter defines a new local variable that’s scoped to the entire For…Next loop. Это решение зависит от того datatype присутствует и ли counter уже определен.This determination depends on whether datatype is present and whether counter is already defined.
НетNo | ДаYes | Нет, поскольку counter уже определен.No, because counter is already defined. Если область counter не локальными в пределах процедуры возникает предупреждение во время компиляции.If the scope of counter isn't local to the procedure, a compile-time warning occurs. |
НетNo | НетNo | Да.Yes. Тип данных выводится из start, end, и step выражения.The data type is inferred from the start, end, and step expressions. Сведения о вывод типа, в разделе Option Infer-оператор и вывод локального типа.For information about type inference, see Option Infer Statement and Local Type Inference. |
ДаYes | ДаYes | Да, но только если существующий counter определена переменная вне процедуры.Yes, but only if the existing counter variable is defined outside the procedure. Остается этой переменной.That variable remains separate. Если область существующего counter переменная является локальной для процедуры, то возникает ошибка времени компиляции.If the scope of the existing counter variable is local to the procedure, a compile-time error occurs. |
ДаYes | НетNo | Да.Yes. |
Тип данных counter определяет тип итерации, который должен быть одним из следующих типов:The data type of counter determines the type of the iteration, which must be one of the following types:
Объект Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single, или Double.A Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single, or Double.
Перечисление, которое объявляется с помощью оператор Enum.An enumeration that you declare by using an Enum Statement.
Объект Object.An Object.
Тип T , имеет следующие операторы, где B — это тип, который может использоваться в Boolean выражение.A type T that has the following operators, where B is a type that can be used in a Boolean expression.
Public Shared Operator >= (op1 As T, op2 As T) As B
Public Shared Operator <= (op1 As T, op2 As T) As B
Public Shared Operator - (op1 As T, op2 As T) As T
Public Shared Operator + (op1 As T, op2 As T) As T
Дополнительно можно указать counter переменных в Next инструкции.You can optionally specify the counter variable in the Next statement. Этот синтаксис повышает удобочитаемость программы, особенно в том случае, если имеются вложенные For циклы.This syntax improves the readability of your program, especially if you have nested For loops. Необходимо указать переменную, которая отображается в соответствующем For инструкции.You must specify the variable that appears in the corresponding For statement.
start, end, И step вычисленные выражений могут иметь любой тип данных, который расширяется до типа counter.The start, end, and step expressions can evaluate to any data type that widens to the type of counter. При использовании определяемых пользователем типов для counter, возможно, потребуется определить CType оператор преобразования типов start, end, или step типу counter.If you use a user-defined type for counter, you might have to define the CType conversion operator to convert the types of start, end, or step to the type of counter.
ПримерExample
Следующий пример удаляет все элементы из универсального списка.The following example removes all elements from a generic list. Вместо For Each... Следующий оператор, показано в примере For... Next , выполняющий перебор в порядке убывания.Instead of a For Each...Next Statement, the example shows a For...Next statement that iterates in descending order. В примере используется этот способ, поскольку removeAt метод вызывает элементов после удаляемым иметь меньшее значение индекса.The example uses this technique because the removeAt method causes elements after the removed element to have a lower index value.
Dim lst As New List(Of Integer) From {10, 20, 30, 40} For index As Integer = lst.Count - 1 To 0 Step -1 lst.RemoveAt(index) Next Debug.WriteLine(lst.Count.ToString) ' Output: 0ПримерExample
Следующий пример перебор элементов перечисления, который объявлен с помощью оператор Enum.The following example iterates through an enumeration that's declared by using an Enum Statement.
Public Enum Mammals Buffalo Gazelle Mongoose Rhinoceros Whale End Enum Public Sub ListSomeMammals() For mammal As Mammals = Mammals.Gazelle To Mammals.Rhinoceros Debug.Write(mammal.ToString & " ") Next Debug.WriteLine("") ' Output: Gazelle Mongoose Rhinoceros End SubПримерExample
В следующем примере параметры инструкции используйте класс, имеющий перегрузки операторов для +, -, >=, и <= операторы.In the following example, the statement parameters use a class that has operator overloads for the +, -, >=, and <= operators.
Private Class Distance Public Property Number() As Double Public Sub New(ByVal number As Double) Me.Number = number End Sub ' Define operator overloads to support For...Next statements. Public Shared Operator +(ByVal op1 As Distance, ByVal op2 As Distance) As Distance Return New Distance(op1.Number + op2.Number) End Operator Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance Return New Distance(op1.Number - op2.Number) End Operator Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean Return (op1.Number >= op2.Number) End Operator Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean Return (op1.Number <= op2.Number) End Operator End Class Public Sub ListDistances() Dim distFrom As New Distance(10) Dim distTo As New Distance(25) Dim distStep As New Distance(4) For dist As Distance = distFrom To distTo Step distStep Debug.Write(dist.Number.ToString & " ") Next Debug.WriteLine("") ' Output: 10 14 18 22 End SubСм. такжеSee Also
List<T>Циклические структурыLoop StructuresОператор While...End WhileWhile...End While StatementОператор Do...LoopDo...Loop StatementВложенные структуры управленияNested Control StructuresОператор ExitExit StatementКоллекцииCollections
docs.microsoft.com
Программирование в Visual Basic (цикл статей)
Название "Visual Basic" говорит само за себя. Уже по слову "Visual" можно догадаться, что здесь реализован визуальный стиль программирования. Вы даже не программируете, а проектируете приложение. Ваша первая задача при этом — создать рабочую среду. Слово "Basic" - Beginners Atlpurpose Symbolic Instruction Code (многоцелевой код символических команд для начинающих).
Данный материал не является полноценным учебником VisualBasic, а содержит только необходимый минимум для выработки алгоритмического мышления и начальных навыков программирования. В качестве системы программирования используется VBA. Для освоения материала, не нужно ничего искать/скачивать - всё у вас уже есть, достаточно запустить MS-WORD/Excel и нажать комбинацию клавиш [ALT+F11]. Правда создать готовый-исполняемый файл *.ехе у вас не получится, но для приобретения навыков VBA вполне хватает.
Введение
Небольшое описание интерфейса среды разработки. Начало работы с Visual Basic.
Свойства, методы и события
Введение в объектную модель Visual Basic. Свойтва, методы и события объектов. Переменные. Описание видов и типов переменных.
Создаем наше первое приложение - традиционное "Hello, World!"
Операторы переходов
Переходы в коде позволяют управлять последовательностью выполнения программы. Данные конструкции ещё называют "конструкциями принятия решений". Применение операторов принятия решения позволяет выполнять определенные действия в зависимости от условий, возникающих в программе.
Оператор If (If...Then...Else)
Оператор Select Case - многочисленное условие
Виды информационных сообщений "MsgBox"
Visual Basic позволяет гибко контролировать внешний вид и реакцию на действия пользователей в информационных сообщениях. Различные иконки сообщений, набор кнопок, реакция на нажатие пользователем тех или иных кнопок - все это позволяет полноценно поддерживать диалог приложения и пользователя, повышая юзабилити и возможности программы.
Логические операторы
Без логики никуда! Всё программирование - это логика. В VBA (как и в других языках) так-же есть свои логические операторы. Логические операторы AND, OR, NOT, XOR, EQV, IMP - синтаксис и описание.
Простая математика
Описание синтаксиса простых математических выражений. Попробуем самомстоятельно написать простейший математический калькулятор средствами Visual Basic.
Работа с циклами
Цикл - это повторяющееся действие какой-либо операции. Ни один язык программирования не обходится без циклов. VB не исключение - в нем присутствует четыре типа циклов:
For...NextFor Each...NextDo While...LoopDo Until...Loop
В данном материале рассмотрим каждый из них подробно.
Массивы
Массив представляет собой пронумерованный список переменных любого типа. Вместо того, чтобы объявлять переменные, лучше применить массив. Но зачем нам пользоваться какими-то массивами, когда можно использовать просто переменную? ..ан нет! Массивы имеют приемущество перед обычной переменной! Они могут быть многомерными, т.е. в каждой строке многомерного массива можно хранить данные, относящиеся к одному объекту: например ФИО, его пол, номер телефона и т.д.
Программные модули, процедуры и функции
Программные модули имеют одну очень полезную особенность - они позволяют писать код, который можно использовать в различных приложениях (а не только в том приложении, в котором вы ведете сейчас разработку). Таким образом можно создавать внешние библиотеки функций для нескольких приложений, при изменении которых в одном месте, будет меняться их работа во всех приложениях, где они подключены.
Процедуры - это самые важные функциональные блоки. Они позволяют разбивать программный код на небольшие логические блоки, которые, во-первых легче отлаживать, а во-вторых можно использовать при создании других процедур.
Стандартные функции. В VBA имеются сотни встроенных функций. Описать все в рамках одной статьи не представляется возможным, поэтому перечислим основные функции для работы с датой и временем, с числовыми значениями, со строками.
Обработка ошибок
Неотемлемой частью любой программы являются процедуры, которые обрабатывают ошибки. Допустим, Вы написали программу... Непросветлённый юзер обязательно тыкнет куда не надо, поэтому Вы должны предусмотреть "защиту от дурака". Советую делать это на начальном этапе проектирования интерфейса, потому как потом может быть уже поздно.
Работа со стандартными элементами управления
До сих пор, мы тренировались "на кошках", точнее на "MsgBox, Буттонах и Тект-боксах". На них удобно приводить примеры. Пришло время освоить и остальные объекты.
Стандартными элементами управления (объектами) называются все прибомбасы, находящиеся в ToolBox. Вот перечень часто используемых: Label, CheckBox, OptionButton, ComboBox, ListBox, Frame, ScrollBar, SpinButton. Рассмотрим каждый из них подробно.
Работа с файловой системой
Как ни старайся, но при работе с программой пользователю обязательно взбредёт в голову поработать с каким-нибудь файлом. В VBA предусмотрен набор стандартных функций для выполнения различных операций с файлами, каталогами, дисками и прочими элементами файловой системы.
Типы файлов и работа с окружением
В Visual Basic существует понятие типа файла, который определяется организационной структурой хранения информации и способом доступа к ней. Принято выделять следующие типы файлов.
- Файлы последовательного доступа - это текстовые файлы. Такие файлы представляют собой последовательность символов. Структурной единицей содержимого в подобных файлах является строка.
- Файлы произвольного доступа - это структурированные файлы, которые содержат информацию в виде записей. Примером могут служить файлы базы данных.
- Двоичные (бинарные) файлы - это файлы с побайтным доступом. В принципе, это те же файлы с последовательным доступом, но информация в них не организована в строки. Особенность данных файлов - работа с байтами или блоками байтов. К таким файлам можно отнести исполняемые *.EXE, файлы прошивок и т.д.
Подобное деление файлов на типы, достаточно условно и определяется особенностями организации файлов и доступа к данным в них. Например, файл с последовательным доступом можно открыть и в режиме двоичного доступа.
Система файловых объектов (FSO)
В систему "FSO" (File System Objects) входит набор классов для объектов. По умолчанию эти объекты отключены и их нет в ToolBox'e, среди буттонов и текст-боксов. Чтобы использовать FSO, необходимо подключить библиотеку "Microsoft Scripting Runtime" в окне References, которое валяется в меню "Tools". В этой библиотеке находятся все классы системы объектов FSO. После того, как вы подключите данную библиотеку, просмотреть свойства классов можно с помощью окна "Object Browser". В этом окне все классы FSO находятся в библиотеке Scripting, которую можно найти по имени в верхнем раскрывающемся списке.
Работа с объектами файловой системы описана также в нескольких статьях из раздела Windows Script Host: Работа с объектами файловой системы, Чтение и редактирование файлов, Работа с коллекциями файлов и папок. Можно, для полноты картины, ознакомиться и с ними.
VBA + Windows API
Ну куда же нам без виндовых API-функций? Чтоб мы не рылись в дебрях системы и случаем не нагадили там, Большой Билли придумал для нас Win-API. Это готовые процедуры и функции для решения множества задач. Как правило, большинство API-функций находятся в библиотеках, и, всё что нам нужно, это подключить эти библиотеки в свой проект. Львиная доля API находится в системных файлах типа User32, Kernel32, которые уже висят в ОЗУ, поэтому их нужно просто объявить: т.е. оповестить ОС, чтобы она была в курсе, что мы собираемся попользоваться её файликами!
Работа с окружением. Библиотека "INPOUT32.DLL"
Под термином "окружение" здесь подразумеваются порты ввода/вывода компьютера, а именно: LPT, COM, USB и др. В среде программирования VBA мы имеем доступ к каждому из них на программном уровне, только необходимо знать адрес порта. С точки зрения вывода данных, всё равно куда пересылать информацию, необходимо только правильно указать её получателя. ...Но это было давно (и правда). С семейством NT такой фокус не пройдёт! Разработчики NT с целью обеспечения безопасности, запретили прямой доступ к портам из пользовательского режима. Чтобы всё-таки обратиться к порту, необходимо все операции проводить через I/O драйвер, с которым трудно найти общий язык. Для управления портами из программ, для Windows NT/XP используется драйвер "inpout32.dll", которого нет в базовом составе операционной системы. Данный драйвер содержит функции обращения к любому порту ввода/вывода процессора. Его необходимо скачать с сети (от чего я вас избавил, прицепив его в скрепке) и подключить к нашему проекту.
VBA. Работа в Excel
Программировать в EXCEL очень интересно, и надо сказать, очень восстребовано. Хорошие профессионалы (в вашем лице) нужны любой организации, т.к. преобладающее большинство бухгалтеров, это размалёванные барышни, в лучшем случае знающие EXCEL поверхностно и принятые на работу по объявлениям. Они, как и прежде, выполняют рутинную работу в ручную и не имеют ни малейшего представления о существовании VBA, который позволит сэкономить время и автоматизировать весь процесс. Ну это их проблемы, а наши с вами - освоить хотя бы азы программирования в Microsoft EXCEL.
Маленькая программа в большом EXCEL'e
Макросы - довольно опасная штука, чтоб позволять юзеру запускать их на своей машине. Примеры выше - прекрастно это демонстрируют. Недобросовестные личности могут так похозяйничать на вашем компьютере, что мало не покажется. Но мы с вами идём обратным путём, и придерживаемся мнения - чем больше знаешь, тем крепче спишь!
Давайте создадим "доброкачественное" приложение, чтоб показать возможности программирования в среде EXCEL. Пусть это будет программа, типа "Прайс-лист", которой обычно пользуются в магазинах и торговых предприятиях. Имеем тип товара, его наименование и стоимость. Выбрав из нескольких/выпадающих списков наименование товаров, получаем общую их стоимость.
whatis.ru