Главная страница

Lec 1-2 Ускоренники. Лекция 1 Основы систем программирования. Основы vba. Вопросы лекции Тема Основы алгоритмизации и программирования. Тема Классификация языков программирования


Скачать 5.75 Mb.
НазваниеЛекция 1 Основы систем программирования. Основы vba. Вопросы лекции Тема Основы алгоритмизации и программирования. Тема Классификация языков программирования
Дата21.11.2022
Размер5.75 Mb.
Формат файлаpptx
Имя файлаLec 1-2 Ускоренники.pptx
ТипЛекция
#804614
страница10 из 10
1   2   3   4   5   6   7   8   9   10

Массивы

Имя - правила именования массивов аналогичны правилам именования переменных.

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

Тип – тип элементов массива такой же как у переменных. Если тип не указан явно, массив получит тип по умолчанию - Variant.

Массивы

Нумерация элементов подчиняется правилам:

    • По умолчанию нумерация элементов массива начинается с 0. Первый по счету элемент получит индекс 0, второй - 1 и т.д.
    • В объявлении отдельного массива можно явно указать индекс его первого и последнего элемента, разделив их ключевым словом To.
    • Если вы хотите, чтобы индексы всех массивов начинались с 1, добавьте в раздел объявлений модуля (General) команду Option Base 1.

Объявление массивов

Dim MyArrayA(30) As Single

Объявленный массив MyArrayА содержит 31 элемент (с индексами от 0 до 30) типа Single. Нумерация явно не задана, элементы получат индексы по обычным правилам.

Dim MyArrayB(1 To 25)

Массив MyArrayB содержит 25 элементов. Границы нумерации заданы явно - первый элемент получит индекс 1, второй - 2 и т.д. Тип не указан - в массиве можно хранить любые данные.

  • Объявить одномерный массив на 3 элемента
  • Внести в первый элемент число 5 в программе, во второй - запросив значение с помощью окна ввода
  • Третий элемент произведение первого и второго.
  • Dim A(2) As Integer

    A(0) = 5

    A(1) = InputBox("Введите второй элемент")

    A(2) = A(0) * A(1)


Индекс

0

1

2

Значение

5

2

10

Сгенерировать массив из 5 целых значений

Dim mas(4) As Integer

For i% = 0 To 4

mas(i) = Int((10 * Rnd) + 1)

Next i  

В примере используется неявное объявление типа переменной.

i% — неявное объявление переменной i типа Integer. Такая конструкция по сути заменяет следующую:

Dim i As Integer

Многомерные массивы

Многомерный массив – это таблица данных в двух или более измерениях. Для обращения к элементу такого массива нужно индексы по количеству измерений. Такая комбинация называется координатами ячейки массива.

Представить многомерные массивы можно так:

  • одномерный – строка записей
  • двухмерный – лист
  • трехмерный – книга
  • четырехмерный – книжная полка
  • пятимерный – книжный шкаф
  • шестимерный – библиотека
  • семимерный – несколько библиотек

Многомерные массивы

Чаще всего применяются двумерные массивы (матрицы)

Элементы матрицы снабжаются двумя индексами, заключенными в круглые скобки и разделенными запятой.

Первый индекс – номер строки, второй – номер столбца, на пересечении которых расположен элемент в таблице (матрице).

Например: B(2,3)=6


В

0

1

2

3

0

1

2

6

3

Объявление многомерных массивов

Dim MyArrayA(10, 1) As Single

Массив MyArrayА содержит 11 строк и 2 столбца типа Single

Dim MyArrayB(1 To 25, 1 To 5)

Массив MyArrayB содержит 25 строк и 5 столбцов.

Пример объявления многомерных массивов

Объявить двумерный массив 5х2 и ввести в него фамилии и номера телефонов сотрудников.

Dim MyArray(1 To 5, 1 To 2)

For i = 1 To 5

MyArray(i, 1) = InputBox("Введите фамилию №" & i)

MyArray(i, 2) = InputBox("Введите Телефон №" & i)

Next i


1

Иванов

898989898

2

Петров

343434343

3

Сидоров

565656565

4

Александров

121111212

5

Маринин

545454544

Пример обращения к многомерным массивам

Заполнить массив 10х10 случайными целыми числами от 1 до 10

Dim MyArray(1 To 10, 1 To 10)

For i = 1 To 10

For j = 1 To 10

MyArray(i, j) = Int(Rnd(1) * 10)

Next j

Next i

ReDim [Preserve] varname(subscripts) [As Type] [, varname(subscripts) [As Type]]

varname – имя существующего массива;

subscripts – размерность существующего массива;

Type - любой тип VBA, отдельный оператор As Type для каждого массива;

Preserve – его использование приводит к тому, что данные уже имеющиеся в массиве, сохраняются после изменения его размерности.

Dim Array() As Single

‘объявляет динамический массив

ReDim Array(2, 9) ‘ делает массив двумерным

ReDim Array(3, 7)

‘ заменяет размер двумерного массива

ReDim Preserve Array(1 To 3, 1 To 5)

‘ изменяет последний размер массива, сохраняя содержимое

Пример переопределения размерности

Программа просит пользователя ввести количество сотрудников, которое сохраняет в переменной Size, а потом создает массив, одна из размерностей которого равняется Size.

Dim MyArray()

Size = InputBox("Введите количество сотрудников")

ReDim MyArray(1 To Size, 1 To 2)

ReDim Preserve MyArray(1 To Size, 1 To 4)

.

Array (Список аргументов) – быстро заполняет массив.

MyArray = Array(1, 2, 6, 9, 19)

IsArray (Имя переменной) – возвращает True, если переменная является массивом

Dim MyArray(10)

Dim MyArr

If IsArray(MyArray) Then _

MsgBox (“MyArray - массив") _

Else MsgBox (“MyArray - не массив")

If IsArray(MyArr) Then _

MsgBox (“MyArr - массив") _

Else MsgBox (“MyArr - не массив")

.

LBound (Имя Массива, Размерность) – возвращает нижнюю границу для указанной размерности массива.

UBound (Имя Массива, Размерность) – возвращает верхнюю границу для указанной размерности массива.

.

Пример. Создадим динамический двумерный массив, размерности которого заданы с помощью генератора случайных чисел

Dim MyArray()

ReDim MyArray(Int(Rnd * 5 + 5), Int(Rnd * 5 + 5))

MsgBox ("Двумерный массив MyArray:" + Chr(13) + _

"Первая размерность:" + _

Str(LBound(MyArray, 1)) + " -" + _

Str(UBound(MyArray, 1)) + Chr(13) + _

"Вторая размерность:" + _

Str(LBound(MyArray, 2)) + " -" + _

Str(UBound(MyArray, 2)))

Далее - используем двойной цикл для заполнения массива случайными числами

For i = LBound(MyArray, 1) To _

UBound(MyArray, 1)

For j = LBound(MyArray, 2) To _

UBound(MyArray, 2)

MyArray(i, j) = Int(Rnd * 100)

Next j

Next i

Erase Имя_массива - очистить массив.

Элементы обычных массивов, содержащих числовые данные, обнуляются. Если мы применим команду Erase к массиву строк - каждый его элемент будет хранить строку нулевой длины ("").

Split(Имя Строки, Разделитель) – превращает символьную строку в массив. Данные присваиваются заранее объявленному строковому (As String) одномерному динамическому массиву. Размерность устанавливается автоматически в зависимости от количества подстрок.

Dim MyArray()

Dim MyStr As String

MyStr = "if/vloockup/sum/count/isnumber/mid" 

MyArray = Split (MyStr, "/")

MsgBox MyArray (0)  ' возвращает IF  

MsgBox MyArray (1)  ' возвращает VLOOKUP  

MsgBox MyArray (2)  ' возвращает SUM  

MsgBox MyArray (3)  ' возвращает COUNT  

MsgBox MyArray (4)  ' возвращает ISNUMBER 

MsgBox MyArray (5)  ' возвращает MID  

Join(Имя Массива, [Разделитель]) - слияние всех элементов массива в одну строку со вставкой между ними необязательного разделителя.

Разделитель – символ, используемый для разграничения подстрок в возвращаемой строке. Если параметр опущен, применяется символ пробела (" "). Если аргумент строка нулевой длины (""), производится конкатенация всех элементов без разделителей

Dim MyArray(1 To 3)  

MyArray = Array("Новая", "функция", "VBA")

MsgBox Join(MyArray, "_") 

'возвращает "Новая_функция_VBA"

Оператор For Each для работы с массивами

For Each element In group

    [ statements ]

    [ Exit For ]

    [ statements ]

Next [ element ]

element – переменная, используемая для циклического прохода элементов массива, должна быть объявлена с соответствующим типом данных.

group – группа элементов массив, по каждому элементу которой последовательно проходит цикл For Each

statements – операторы.

Exit For – оператор выхода из цикла до его окончания.

Пример с оператором For Each

Пример: Присвоить массиву список наименований животных и в цикле For Each записать их в переменную a. Вывести переменную а в диалоговое окно MsgBox.

Dim element As Variant

Dim a As String, group As Variant

group = Array("бегемот", "слон", "кенгуру", "тигр", "мышь")

a = "Массив содержит значения:" & Chr(13)

Процедуры и функции

Процедура (функция) - это программная единица VBA, включающая операторы описания ее локальных данных и исполняемые операторы.

Процедура – это блок кода, который будет выполняться всякий раз при вызове этой процедуры.

Процедуры и функции

Процедуры помогают:

  • сократить код программы,
  • улучшить модификацию кода,
  • повысить читаемость,
  • улучшить понимание кода программистом.
  • Главное отличие процедуры от функции заключается в том, что функция возвращает в точку вызова некое значение, которое, как правило, является результатом обработки переданной функции информации. А процедура лишь выполняет какие-либо действия, но ничего в точку вызова не возвращает.

Передача информации в процедуры

Главное назначение процедур VBA изменении состояния системы документов, изменение состояния самого программного проекта. Процедуры VBA оперируют, в основном, с объектами MS Office.

Есть два способа получения и передачи информации, изменяя тем самым состояние системы документов.

Первый и основной способ состоит в использовании параметров процедуры.

Второй способ состоит в использовании глобальных переменных и объектов, как для получения, так и для передачи информации.

Процедуры

[область действия] Sub имя [(список аргументов)]

Операторы

End Sub

область действия: Public — процедура будет доступна для всех модулей в данном проекте VBA, Private — доступна только для текущего модуля

имя — обязательный элемент, имя процедуры

список аргументов — список переменных - параметры, которые передаются в процедуру при ее вызове (формальные параметры), разделяются запятой. Каждый аргумент имеет и тип данных.

операторы— любая группа операторов.

Список аргументов

[Optional] [ByVal | ByRef] [ParamArray] имя параметра[( )] [As type] [= defaultvalue]

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

Optional [ByVal | ByRef] имя параметра As тип данных = значение по умолчанию

Аргументы в VBA могут быть переданы двумя способами:

  • ByVal – по значению - процедуре передаётся только значение (копия аргумента), изменения аргумента внутри процедуры будут потеряны
  • ByRef – по ссылке - передаётся а в памяти, изменения, сделанные с аргументом внутри процедуры, будут сохранены при выходе из процедуры.

Вызов подпрограмм

Call имя подпрограммы [параметры]

имя подпрограммы — обязательный элемент, содержит имя вызываемой процедуры.

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

Оператор считается устаревшим.

Вызов подпрограммы осуществляется просто по имени процедуры/функции

Функции

блок кода, который будет возвращать значение.

[обл.действия] Function имя [(список арг-ов)] [As тип]

Операторы

[имя = выражение]

End Function

тип — необязательный элемент. Тип данных значения, возвращаемого подпрограммой Function.

выражение — возвращаемое значение подпрограммой Function.

Использование Function аналогично использованию стандартных функций. Обращение к ней можно записать в выражении

Пример Процедуры

Пример. Опросить пятерых пользователей, обработав и записав их имя и возраст.

Блок в расчете на одного пользователя:

Пример Процедуры

Процедура обработки одного пользователя, которая получает номер пользователя как аргумент.

Пример Процедуры

Код с применением процедуры:

UserInput (i) вызов процедуры для пользователя с номером i

Пример Функции

Пример функции возводит переданное ей число во вторую степень.

Прерывание процедур и функций VBA

Завершение выполнения процедуры

Exit Sub

Завершение выполнения функции

Exit Function

Полное завершение выполнения программы

End

Необходимо перед оператором End выводить пользователю сообщение о том, что будет происходить и почему. В противном случае пользователи могут не понять, почему программа, которую они используют, внезапно прекратила работу.

Литература

  • Лебедев, В. М. Программирование на VBA в MS Excel : учебное пособие для вузов. — 2-е изд., испр. и доп. — Москва : Издательство Юрайт, 2020. — 306 с. —URL: https://urait.ru/bcode/447096
  • Иванова Г.С. Технология программирования: : учебник / Г.С. Иванова. 3-е изд., стер. М. : КНОРУС, с. (Бакалавриат)., 2016.
  • Технология программирования / Ю.Ю. Громов, О.Г. Иванова, М.П. Беляев, Ю.В. Минин ; Тамбовский государственный технический университет. – Тамбов : Тамбовский государственный технический университет (ТГТУ), 2013. – 173 с. : ил. – Режим доступа: по подписке. – URL: http://biblioclub.ru/.
  • Лаврищева, Е. М.  Программная инженерия. Парадигмы, технологии и CASE-средства : учебник для вузов / Е. М. Лаврищева. — 2-е изд., испр. — Москва : Издательство Юрайт, 2021. — 280 с. // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/470942
1   2   3   4   5   6   7   8   9   10


написать администратору сайта