Напоминание

Работа с содержимым ячеек таблицы


Автор: Курбатов Вячеслав Валерьевич
Должность: учитель информатики и ИКТ
Учебное заведение: МАОУ "СОШ № 3"
Населённый пункт: г. Гусева Калининградской области
Наименование материала: Руководство по программированию в Visual Basic for Application
Тема: Работа с содержимым ячеек таблицы
Раздел: среднее профессиональное





Назад




- 1 -

Руководство по программированию в Visual Basic for Application

МАОУ СОШ № 3 г. Гусева Калининградской области

Руководство

по программированию

в Visual Basic for Application

для учебных заведений

(фрагмент)

Целью составления

данного руководства является популяризация языка

программирования VBA.

VBA может быть интересен для учебных заведений, тем более, что для

программирования в нем не требуется дополнительного программного обеспечения,

но достаточно одного из самых распространенных пакетов программ MS Office, а

созданные с

помощью VBA

программные продукты могут носить полезное

практическое применение в обучении и бизнесе.

Новички в

VBA

откроют прекрасный мир объектно-ориентированного

программирования и возможно заинтересуются созданием макросов и скриптов на

других языках программирования.

Составитель: учитель информатики и ИКТ

Курбатов Вячеслав Валерьевич

2022 г.

- 2 -

Руководство по программированию в Visual Basic for Application

ПЕРЕМЕННЫЕ

Переменные в программировании имеют такой же смысл, как в математике. Перед тем,

как использовать переменную, ее рекомендуется описать (объявить).

Синтаксис оператора описания переменной:

Dim переменная [As тип]

В этой конструкции:Dim – ключевое слово, свидетельствующее о том, что объявляется

переменная (dimension - размер); переменная – имя объявляемой переменной; As – ключевое

слово, используемое при задании типа данных (as - как); тип – тип данных для объявляемой

переменной или (что то же самое) тип переменной.

Когда при выполнении программы компьютер встречает оператор Dim, он выделяет

переменной переменная часть своей оперативной памяти, которую в программировании принято

называть ячейкой. Размер выделенной ячейки, исчисляемый в байтах, определяется

типом

переменной тип.

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

Типы переменных:

Тип переменной – значение, которое может принимать ячейка.

Integer, Long– целые числа (1001)

Currency, Single, Double - числа с дробной частью (3,1415926)

Currency-Тип с плавающей запятой с 4 десятичными числами, используемыми

для

финансовых значений

Single - Тип с плавающей запятой, поддерживающий приблизительно 7 цифр точности

Double - Тип с плавающей запятой, поддерживающий приблизительно 15 цифр точности

String – строковая (текстовая) информация (“Здравствуй Мир!”)

Boolean – логическое значение (True / False)

Byte – двоичное значение (натуральные числа и нуль)

Date– время или дата

Если при объявлении переменной не указан ее тип, то автоматически принимается тип

Variant, который остается неопределенным

до первого программного действия над данной

переменной.

Если действие арифметическое, то переменная автоматически становится числовой, если

же действие символьное (текстовое), то переменная становится символьной и т.д.

Пример объявления переменных:

DimA01 As Integer

Dim A02 As String

Dim A03 As Boolean

Dim A04 As Byte

Пример объявления переменных:

Dim A01 As Integer, A02 As String, A03 As Boolean, A04 As Byte

Dim A01, B01, C01, D01 As Integer

- 3 -

Руководство по программированию в Visual Basic for Application

КОНСТАНТЫ

Константа, такая же переменная, как и простая переменная, но в отличие от нее, значение

объявленной константы невозможно в дальнейшем изменить.

Const константа [As тип] = значение

Пример объявления констант:

Const pi As Double = 3.1415926654

Const e As Double = 2.718281828

Const Message = “Завершение работы”

Const Millenium As Date = # 1 Jan 2000 #

Const Beta As Currency = 1/3

Пример объявления констант:

Const Min = 0, Max = 1000, Flag As Boolean = False

Две основные функции

преобразования типов данных:

VAL() и STR()

VAL() – преобразование строки в число

STR() – преобразование числа в строку

Пример:

Sub StrVal()

Dim strA As String

Dim curB As Currency

strA = “45.77”

curB = Val(strA)

‘ Результат: curB = 45.77

strA = Str(curB)

‘ Результат: strA = “ 45.77” (добавляет 1_

пробел спереди)

curB = Val(“4.7 = x”) ‘ Результат: curB = 4.7

curB = Val(“x = 4.7”) ‘ Результат: curB = 0

End Sub

Пример:

Dim MyValue

MyValue = Val(“2457”)

‘ Результат: MyValue = 2457

MyValue = Val(“ 2 45 7”)

‘ Результат: MyValue = 2457

MyValue = Val(“24 and 57”)

‘ Результат: MyValue = 24

АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ

Математическое выражение

Арифметическое выражение VB

5x + 12y

5 * x + 12 * y

𝑥

𝑦

x / y

y

x

y ^ x

x

x

19.55 ∙10

-6

19.55E-6 или 19.55D-6

- 4 -

Руководство по программированию в Visual Basic for Application

/ – Деление одного числа на другое.

\ – Целочисленное деление одного числа на другое (аналог оператора Dim).

Mod – Остаток от целочисленного деления.

Пример:

Sub Арифметика1()

Dim m As Integer, n As Integer, x As Double

m = 5 : n = 2

x =m / n

‘ Результат: x = 2.5

x =m \ n

‘ Результат: x = 2

x =m Mod n

‘ Результат: x = 1

End Sub

Пример:

x = - x

‘ Результат: изменение знака числа

Математическое выражение

Арифметическое выражение VB

-a

b

-a ^ b или-a ^ (b)

a

-b

a ^ (-b)

a

b+c

a ^ (b + c)

10

-4.7

10 ^ (- 4.7)

10

4.7

10 ^ 4.7

𝑎

a ^ (b ^ c)

(a

b

)

c

a ^ b ^ cили (a ^ b) ^ c

𝑎

𝑏

𝑐

𝑑

a * b / (c * d)или (a * b) / (c * d)

𝑎

10

a * 1E4, a * 1D4илиa * 1000

Пример:

Sub Арифметика2()

Dim m As Integer, n As Integer

Dim x As Single, y As Single

x = 3: m = 2: n = - 1

y = (- 3) ^ m

‘ Результат: y = 9

y = - (3 ^ m)

‘ Результат: y = -9

y = - 3 ^ m

‘ Результат: y = 9

y = 10 + (x + 7) ^ (m + n)

‘ Результат: y = 20

y = 10 + x + 7 ^ m + n

‘ Результат: y = 61

End Sub

ЛОГИЧЕСКИЕ ВЫРАЖЕНИЯ

Помимо арифметических выражений, в

VB

можно

использовать логические

выражения (утверждения), принимающие одно из двух значений типа Boolean – True (истина,

логическая единица) или False (ложь, логический нуль).

5 >= 3

‘ Результат True

5 < 3

‘ Результат False

- 5 -

Руководство по программированию в Visual Basic for Application

Пример:

Sub Логика1()

Dim x As Integer

Dim y As Integer

Dim blnA As Boolean

X = 5

Y = 2

blnA = x > y

‘ Результат blnA = True

blnA = x = y

‘ Результат blnA = False

End Sub

Более сложные логические выражения составляются с помощью логических операций.

Рассмотрим три из них – Not, And и Or.

Операция Not определяется следующим образом:

- если A равно True, то Not A равно False;

- если A равно False, то Not A равно True.

Определение операции And

A

B

A And B

True

True

True

True

False

False

False

True

False

False

False

False

Определение операции Or

A

B

A Or B

True

True

True

True

False

True

False

True

True

False

False

False

При наличии в выражении нескольких логических операций порядок их выполнения

определяется следующим правилом приоритетов:

1) в первую очередь выполняется операция Not;

2) далее выполняется операция And;

3) в последнюю очередь выполняется операция Or.

Для изменения последовательности

логических операций используются круглые

скобки (как в арифметических выражениях).

Пример:

Sub Логика1()

Dim x, y, z As Double

Dim blnA As Boolean

X = 1 : Y = 2.87 : Z = 3.12

blnA = (x > y) And (y < z)

‘ Результат blnA = False

blnA = x < y And y < z

‘ Результат blnA = True

blnA = x > y Or y > z

‘ Результат blnA = False

blnA = Not (x < y Or Not y < z)

‘ Результат blnA = False

blnA = Not x > y And x > y

‘ Результат blnA = False

blnA = Not (x > y And x > y)

‘ Результат blnA = True

EndSub

- 6 -

Руководство по программированию в Visual Basic for Application

Оператор перехода

GoTo метка

Метка – целое неотрицательное число без знака (0, 1, 2, 3, …) или последовательность

букв и цифр, начинающаяся с буквы (например, start53a)

Пример:

Sub Programma2()

Dim X As Integer

X = 12

2: If X > 9 And X < 12 Then GoTo LastLine

X = X – 2

GoTo2

LastLine:

End Sub

Конструкция принятия решений

If . . . Then . . .

Конструкция If . . . Then называется условным оператором.

Простейший условный оператор:

If условие Then оператор

Пример:

Sub Programma2()

Dim X As Integer

X = 12

‘ начальное значение X

If (X> 9 And X< 12) Then X = X + 1

X = X + 2

‘ конечное значение X

X = X * 2

End Sub

Переход по условию

If условие Then GoTo метка

Пример:

Sub Programma2()

Dim X As Integer

X = 12

2: If X > 9 And X < 12 Then GoTo LastLine

X = X – 2

Go To 2

LastLine:

End Sub

Если условие выполняется, то выполняются операторы 1, иначе выполняются

операторы 2

If условие Then

операторы 1

Else

операторы 2

End If

- 7 -

Руководство по программированию в Visual Basic for Application

Пример:

Sub Vybor()

Dim X As Integer

X = 12

If (X > 9 And X < 12) Then

X = X + 3

Else

X = X + 2

End If

End Sub

ЦИКЛЫ

For счетчик = начало To конец [Step шаг]

‘ […] – необязательный параметр

Операторы

Next [счетчик]

Цикл For . . . Next используется в том случае, когда количество выполнений заданного

блока операторов известно заранее.

Пример:

Sub Расчет1()

Dim I As Integer

Dim F As Integer

F = 1

For I = 1 To 6 Step 2

F = F * I

Next I

For I = 1 To F ^ 2

G = G + I

Next I

End Sub

Цикл While . . . Wend и Do While . . . Loop применяется, когда число выполнений

операторов цикла заранее неизвестно. Цикл выполняется до тех пор, пока условие истинно.

Do While условие

While условие

Do

операторы

операторы

операторы

Loop

Wend

Loop Until условие

По оператору Exit Do можно выйти из цикла по условию.

- 8 -

Руководство по программированию в Visual Basic for Application

ИСПОЛЬЗОВАНИЕ СТАНДАРТНЫХ ОКОН

ОПЕРАЦИОННОЙ СИСТЕМЫ WINDOWS

Ввод в переменную Peremennaya значения с клавиатуры:

Peremennaya = InputBox(«пояснительный текст»)

Вывод значения Peremennaya на экран:

MsgBox «Значение = », Peremennaya

Пример:

Sub Vvod_Vyvod()

Dim Peremennaya As Integer

Peremennaya = InputBox("Введите значение")

a = "Значение = " & Str(Peremennaya)

MsgBox a

End Sub

Первая программа:

Практическая работа по VBA № 1

Задача № 1

(Инструкция по выполнению задания в презентации “01 - Переменные”)

1.

Открываем MS Excel.

2.

Выбираем вкладку «Разработчик».

3.

Включаем режим «Конструктор».

4.

Выбираем ПКМ элемент ActiveX «Кнопка».

5.

Отредактируем надпись на кнопке CommandButton1. Нажимаем на кнопке ПКМ. Выбираем

«Объект CommandButton1», «Edit», вводим название кнопки «Ввод информации».

6.

В свойствах объекта в поле «Name» вводим внутреннее название объекта «Кнопка»: Name =

VvodInfo

7.

Двойным щелчком ЛКМ на этой кнопке, создаем точку входа в программу.

8.

В открывшемся окне редактора VBA вводим текст:

- 9 -

Руководство по программированию в Visual Basic for Application

Private Sub VvodInfo()

Dim Peremennaya As Integer

Peremennaya = InputBox("Введите значение“)

a = "Значение = " & Str(Peremennaya)

MsgBox a

End Sub

9.

В панели задач переходим опять в MS Excel.

10. Во вкладке «Разработчик» отключаем режим «Конструктор».

11. Нажимаем на кнопку «Ввод информации».

12. В появившемся окне вводим какое-нибудь число и нажимаем «OK».

13. Появляется окно «Значение = ».

Задача № 2

1.

Создаем кнопку с надписью «Расчет».

2.

В свойствах объекта в поле «Name» вводим внутреннее название объекта «Кнопка»: Name = Raschet

3.

В открывшемся окне редактора VBA вводим текст программы:

Private Sub Raschet_Click()

Dim k, s As Integer

s = 0: k = 1

Do While k < 11

s = s + k

k = k + 1

Worksheets("Лист1").Cells(k, 1) = s

Loop

MsgBox s

End Sub

4.

Выполняем программу.

РАБОТА С ЯЧЕЙКАМИ ТАБЛИЦЫ EXCEL

Занесение в ячейку таблицы значение переменной ИмяПеременной:

Worksheets("ИмяЛиста").Cells(НомерСтроки, НомерСтолбца) = ИмяПеременной

Занесение в переменную ИмяПеременной значение ячейки таблицы:

ИмяПеременной = Worksheets("ИмяЛиста"). Cells(НомерСтроки, НомерСтолбца)

Если рабочее пространство программы ограничивается действием только в одном листе, то нет

необходимости указания рабочего листа:

Cells(НомерСтроки, НомерСтолбца) = ИмяПеременной

Пример:

Private Sub CommandButton2_Click()

Dim k, s As Integer

s = 0: k = 1

Do While k < 11

s = s + k

k = k + 1

Worksheets("Лист1").Cells(k, 1) = s

Loop

MsgBox s

End Sub

Проверка работы программы:

(Инструкция по выполнению задания в презентации “01 - Переменные”)

______________________________________________________________________________________________________

- 10 -

Руководство по программированию в Visual Basic for Application

Домашнее задание № 1:

1.

Создать в Excel представленную

на рисунке таблицу со всеми

надписями, разграфкой

таблицы и кнопку для запуска макроса

выборки данных из таблицы.

2.

Написать программу выборки значения из таблицы на пересечении

горизонтали (значение F4) и вертикали (значение K4).

3.

При программировании

учитывать смещение адреса ячейки по

горизонтали на 2, а по вертикали на 12 –

( Worksheets("Лист1").Cells(vert+2, gor+12) ).

4.

Выбранные данные записать в ячейку I 10.

5.

При сохранении файла указать свою фамилию, выбрать формат

файла с

поддержкой макросов (.xlsm) и

отправить его

по

электронной почте по адресу преподавателя.

6.

За попытку

простого перемножения значения горизонтали и

вертикали – 2 балла.

______________________________________________________________________________________________________

Решениезадачи:

Private Sub Vyborka_Click()

Gorizontal = Cells(4, 6)

‘ Считать значение горизонтали из ячейки F4 - (4, 6).

Vertikal = Cells(4, 11)

‘ Считать значение вертикали из ячейки K4 - (4, 11).

Otvet = Cells(12 + Gorizontal, 2 + Vertikal)

‘ Значение на пересечении горизонтали и вертикали _

с учетом отступа сверху (12) и слева (2).

Cells(10, 9) = Otvet

‘ Полученное значение записать в ячейку I10 - 10,9.

End Sub

______________________________________________________________________________________________________

Домашнее задание № 2:

1.

Создать в

Excel

представленную на

рисунке

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

и кнопку для запуска макроса расчета.

2.

Написать программу выборки значения из таблицы

по

принципу: сложить отдельно все числа из

«желтых» ячеек и вывести его в ячейку (10, 6) и

сложить отдельно все числа из «синих» ячеек и

вывести его в ячейку (12, 6).

3.

При программировании не использовать ни одной

промежуточной

переменной,

а

пользоваться

оператором обращения к ячейке - Cells(Столбец, Строка).

4.

При сохранении файла указать свою фамилию, выбрать формат файла с поддержкой макросов

(.xlsm)

и отправить его по электронной почте по адресу преподавателя.

______________________________________________________________________________________________________

Решение задачи:

Private Sub Raschet_Click()‘ Чтение конкретных ячеек и запись результата в ячейки F10 (10, 6) и F12 (12, 6).

Cells(10, 6) = Cells(2, 2) + Cells(2, 4) + Cells(2, 6) + Cells(3, 3) + Cells(3, 5) + _ ‘ Длинную строку в

Cells(4, 2) + Cells(4, 4) + Cells(4, 6) + Cells(5, 3) + Cells(5, 5) + _

‘ программе можно

Cells(6, 2) + Cells(6, 4) + Cells(6, 6)

‘ разорвать с помощью

Cells(12, 6) = Cells(2, 3) + Cells(2, 5) + Cells(3, 2) + Cells(3, 4) + Cells(3, 6) + _ ‘ знака « _». Интерпретатор

Cells(4, 3) + Cells(4, 5) + Cells(5, 2) + Cells(5, 4) + Cells(5, 6) + _

‘ VBA воспримет строку с

Cells(6, 3) + Cells(6, 5)

‘ этим знаком, как цельную.

End Sub

______________________________________________________________________________________________________

Разбор домашнего задания № 1 представлен в презентации «02 - алгоритмы».

- 11 -

Руководство по программированию в Visual Basic for Application

НАПИСАНИЕ ПРОГРАММЫ ПО БЛОК-СХЕМЕ АЛГОРИТМА

Определите значение переменной m после выполнения фрагмента алгоритма.

Ниже представлен слайд из презентации, на котором представлена программа

реализующая данный алгоритм и совершающая трассировку всех значений.

Начальные значения вводятся в ячейки: m = (3, 2), n = (4, 2).

Трассировка производится в ячейки: m = (6, 7), n = (6, 8).

Руководство по программированию в

Дополним нашу программу очищением ячеек, содержащих значения трассировки

Создаем кнопку

«Стереть данные» и

привязываем к ней программу SteretDannye

Private Sub SteretDannye_Click()

Dim a As Integer

For a = 6 To 105

‘ стираем

Cells(a, 7) = " " ‘ "" – пустое

Cells(a, 8) = " " ‘ (пробела

Next a

End Sub

В данном примере представлен самый простой пример, лишний раз демонстрирующий

работу оператора цикла For

Range("G6:H106").Clear, где «G

прямоугольной области, которую

If условие истинно

Переход на «метку» возможен лишь тогда, когда условие истинно

А, что делать, если в алгоритме переход

вариант 2 («Нет»)).

Переход по положительному решению

Чтобы осуществить условный

переход по

отрицательному решению, необходимо

инвертировать условие перехода:

If m = n Then Goto метка

If m > n Then Goto метка

If m < n Then Goto метка

If m = n Then Goto метка

If m > n Then Goto метка

If m < n Then Goto метка

- 12 -

Руководство по программированию в Visual Basic for Application

Дополним нашу программу очищением ячеек, содержащих значения трассировки

Создаем кнопку

«Стереть данные» и

SteretDannye.

стираем 100 ячеек

пустое значение

пробела нет)

редставлен самый простой пример, лишний раз демонстрирующий

To …

Next, но на практике применяется другой метод:

G6» – верхний левый угол и

«H106» –

прямоугольной области, которую требуется очистить.

Условный переход

условие истинно Then GoTo метка

Переход на «метку» возможен лишь тогда, когда условие истинно (см. вариант 1 («Да»))

А, что делать, если в алгоритме переход должен осуществляться по отрицательному решению (см.

Переход по положительному решению

Переход по отрицательному решению

Чтобы осуществить условный

переход по

отрицательному решению, необходимо

метка

-инверсия -

If m <> n Then Goto

метка

-инверсия -

If m <= n Then Goto

метка

-инверсия -

If m >= n Then Goto

или сделать логическое отрицание:

метка

-инверсия -

If not (m = n)

метка

-инверсия -

If not (m > n)

метка

-инверсия -

If not (m < n)

Application

Дополним нашу программу очищением ячеек, содержащих значения трассировки:

редставлен самый простой пример, лишний раз демонстрирующий

а практике применяется другой метод:

– нижний правый угол

(см. вариант 1 («Да»)).

ся по отрицательному решению (см.

Переход по отрицательному решению

Чтобы осуществить условный

переход по

отрицательному решению, необходимо

Then Goto метка

Then Goto метка

Then Goto метка ,

not (m = n) Then Goto метка

not (m > n) Then Goto метка

not (m < n) Then Goto метка

- 13 -

Руководство по программированию в Visual Basic for Application

Практическая работа по VBA № 2

Написание программы по блок-схеме алгоритма

1) Создать в Excel структуру задачи и создать кнопку «Расчет» и ввести внутреннее имя

объекта кнопки «Raschet».

2) В редакторе VBA ввести текст программы:

Private Sub Raschet_Click()

Dim m, n, s As Integer

s = 0

' строка трассировки значений m и n

m = Worksheets("Лист1").Cells(3, 2)

' получение значения для переменной m

n = Worksheets("Лист1").Cells(4, 2)

' получение значения для переменной n

nachalo: If m = n Then GoTo konec

' выход из программы

If m > n Then

m = m - n

Else

n = n - m

End If

Worksheets("Лист1").Cells(s + 6, 7) = m

' вывод значения m в трассировку

Worksheets("Лист1").Cells(s + 6, 8) = n

' вывод значения n в трассировку

s = s + 1

' увеличение номера строки для вывода трассировки

GoTo nachalo

' переход в начало алгоритма

konec:

End Sub

3) Выполнить программу.

4) Добавьте кнопку «Стереть данные» и привязать к программе «SteretDannye»:

Private Sub SteretDannye_Click()

Dim a As Integer

For a = 6 To 105

Worksheets("Лист1").Cells(a, 7) = " "

' Пустое значение (между кавычками пробела нет)

Worksheets("Лист1").Cells(a, 8) = " "

Next a

End Sub

nachalo

konec

- 14 -

Руководство по программированию в Visual Basic for Application

Составление программ по блок-схемам алгоритма:

1)

Определите значение переменной a после выполнения фрагмента алгоритма.

2)

Определите значение переменной x после выполнения фрагмента алгоритма.

3)

Определите значения переменных x и y после выполнения фрагмента алгоритма.

В ответ запишите номер правильного варианта:

1) x=15, y=16

2) x=20, y=13

3) x=16, y=15

4) x=13, y=20

метка1

метка2

метка1

метка2

метка1

метка2

- 15 -

Руководство по программированию в Visual Basic for Application

ПИСЬМЕННЫЙ ОПРОС ПО ВЕТВЛЕНИЯМ

Фамилия и имя ________________________________ Класс _______

Дата ____________

1) Нарисовать условный переход на метку

«End» по положительному решению (m <= 5)

и написать оператор условия и перехода

2) Нарисовать условный переход на метку

«Home» по отрицательному решению (n > 3)

и написать оператор условия и перехода

3) Написать оператор обращения к ячейке F9 _____________________________________________

4) Написать оператор обращения к ячейке K64 ____________________________________________

5) Написать обратные по смыслу условия для < _________________ <> _________________

_____________________________________________________________________________________

Домашнее задание № 3:

1.

Создать в Excel представленную на рисунке таблицу

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

для запуска макроса выборки данных из таблицы.

2.

Написать программу выборки значения из таблицы

(A8 – A14), соответствующего

номеру дня недели

название из (B8 – B14).

3.

«День недели» вводится в

ячейку F4

(4,

6).

«Название этого дня» выводится в ячейку F6 – (6, 6).

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

Cells(строка, столбец).

4.

При программировании учитывать смещение адреса

таблицы по вертикали на 7 – ( Cells(строка+7, 1) ).

5.

При совпадении «Дня недели» и содержимого столбца таблицы A, выбрать данные ячейки

столбца B в той же строке – ( Cells(строка+7, 2) ) и записать полученное значение в ячейку F6

– (6, 6).

6.

При сохранении файла указать свою фамилию, выбрать формат файла с поддержкой макросов

(.xlsm) и отправить его по электронной почте по адресу преподавателя.

______________________________________________________________________________________________________

Решение задачи:

Private Sub Vyborka_Click()

Dim NomerDnya As Integer

' Целочисленная переменная NomerDnya.

Cells(6, 6) = ""

' Стереть "Название этого дня".

NomerDnya = Cells(4, 6)

' Считывание номера дня из ячейки (4, 6) - (F4).

For Nomer = 1 To 7

' Перебор всех дней недели.

If NomerDnya = Cells(7 + Nomer, 1) Then ' Сравнение значения очередной ячейки с NomerDnya.

Cells(6, 6) = Cells(7 + Nomer, 2) ' Если такой номер нашелся, то в ячейку (6, 6) - (F6).

End If

'записываем значение из 2-го столбца таблицы.

Next Nomer

End Sub

______________________________________________________________________________________________________

Разбор домашнего задания № 3 представлен в презентации «Работа со строковыми переменными».

- 16 -

Руководство по программированию в Visual Basic for Application

ФУНКЦИИ ДЛЯ РАБОТЫ СО СТРОКОВЫМИ ПЕРЕМЕННЫМИ

Trim(переменная) – удаление всех пробелов в начале и в конце строковой переменной.

Пример:

Slovo = Trim(“ Кино ”)

Итог: Slovo = “Кино”

Len(переменная) – получение длины строковой переменной.

Пример:

Dlina = Len(“Оптимизация”)

Итог: Dlina = 11

Mid(переменная, позиция, количество символов) – получение определенного количества символов переменной,

начиная с указанной позиции.

Пример:

Fragment = Mid(“Оптимизация”, 3, 5)

Итог: Fragment = “тимиз”

LCase(переменная) – Возвращает строку или символ, преобразованные в нижний регистр.

Пример:

Slovo = LCase(“ГеоМетРия”)

Итог: Slovo = “геометрия”

UCase(переменная) – Возвращает строку или символ, преобразованные в верхний регистр.

Пример:

Slovo = UCase(“ГеоМетРия”)

Итог: Slovo = “ГЕОМЕТРИЯ”

Left(переменная, количество символов) – Возвращает строку, содержащую указанное число знаков с левой стороны

строки.

Пример:

Slovo = Left(“Геометрия”, 3)

Итог: Slovo = “Гео”

Right(переменная, количество символов) – Возвращает строку, содержащую указанное число знаков с правой

стороны строки.

Пример:

Slovo = Right(“Геометрия”, 6)

Итог: Slovo = “метрия”

Replace (переменная, фрагмент, замена) – Заменяет в строковой переменной все строковые фрагменты или символ

на указанный строковый фрагмент или символ.

‘ переменная — строка, в которой требуется замена;

‘ фрагмент — подстрока, которую нужно заменить;

‘ замена — подстрока замены;

Пример: Slovo = Replace(“несовершеннолетний”, “е”, “э”)

Итог: Slovo = “нэсовэршэннолэтний”

StrReverse(переменная) – Возвращает развернутое значение строки, содержащейся в переменной

Пример:

Slovo = StrReverse(“Здравствуй Мир!”)

Итог: Slovo = “!риМйувтсвардЗ”

ПРАКТИЧЕСКАЯ РАБОТА

Программа, реализующая разворот текста:

Function RazvorotTexta(Txt)

‘ Макрос записывается в Modules

Dim Razvorot As String

Razvorot = “ ”

‘ Очистка накопительной переменной

Fori = Len(Txt) To 1 Step -1

‘ Обратный цикл от длины текста до 1

Razvorot = Razvorot & Mid(Txt, i, 1)

‘ Выборка символа

Nexti

‘ от последней буквы до первой

RazvorotTexta = Razvorot

‘ Передача накопленной переменной

End Function

‘ в переменную функции (ее название)

При

вызове Function

имя

последней (RazvorotTexta(Txt))

выступает в

роли переменной, содержащей вычисленное функцией

значение (исходя из ранее полученного значения Txt).

Для вызова Function нет необходимости создавать кнопку. В

ячейке Excel записывается имя функции RazvorotTexta(передаваемый

функции

параметр). Когда

функция

отработает, в

этой

ячейке

автоматически появится результат выполнения этой функции.

- 17 -

Руководство по программированию в Visual Basic for Application

Практическая работа по VBA № 3

Работа со строковыми функциями

Разделить фамилию, имя и отчество введенные одной строкой на отдельные слова и сложить

вновь в обратном порядке.

1) Создать в Excel структуру задачи и кнопку «Запуск».

2) Ввести внутреннее имя кнопки - «FIO».

3) Активировать кнопку «Запуск».

4) В редакторе VBE ввести текст программы:

Private Sub FIO_Click()

Dim FIO, f, i, o, space As String

Dim a, b As Integer

' a - номер проверяемой буквы в тексте, b - позиция пробела в тексте

Dim e As Boolean

a = 0

' счетчик длины слова

FIO = Worksheets("Лист1").Cells(2, 1)

' считывание фамилии, имени и отчества

FIO = Trim(FIO)

' удаление всех пробелов в начале и в конце строки

' выделение фамилии из строки ФИО

If Len(FIO) > 0 Then

' если длина ФИО больше 0 (ФИО введены)

e = False

' сброс флага конца поиска фамилии

Do While Not e

' нахождение пробела между фамилией и именем

a = a + 1

' увеличить номер проверяемой буквы в тексте

If (Mid(FIO, a, 1) = " ") Or (Len(FIO) = a) Then e = True

' Если найден пробел или конец строки ФИО

Loop

f = Trim(Mid(FIO, 1, a))

' выделение из строки ФИО фамилии с 1 позиции по позицию первого пробела - 1

Worksheets("Лист1").Cells(5, 2) = f

' вывод в ячейку 5,2 значения переменной f

End If

' выделение имени из строки ФИО

If Len(FIO) > a Then

' если длина ФИО больше позиции первого пробела (ФИО введены)

e = False

b = a + 1

Do While Not e

a = a + 1

If (Mid(FIO, a, 1) = " ") Or (Len(FIO) = a) Then e = True

Loop

i = Trim(Mid(FIO, b, a + 1 - b))

Worksheets("Лист1").Cells(6, 2) = i

End If

' выделение отчества из строки ФИО

If Len(FIO) > a Then

e = False

b = a + 1

Do While Not e

a = a + 1

If (Mid(FIO, a, 1) = " ") Or (Len(FIO) = a) Then e = True

Loop

o = Trim(Mid(FIO, b, a + 1 - b))

Worksheets("Лист1").Cells(7, 2) = o

End If

Worksheets("Лист1").Cells(10, 1) = i + " " + o + " " + f

' вывод в ячейку 10, 1 имени, отчества и фамилии

End Sub

- 18 -

Руководство по программированию в Visual Basic for Application

Домашнее задание № 4(1):

1.

Создать в Excel представленную на рисунке таблицу со всеми надписями и кнопок для запуска макросов

раскладки по ячейкам, введенного в ячейку С3 текста.

2.

Активировать кнопки ActiveX и написать программы раскладки текста из ячейки С3 по ячейкам по вертикали и

горизонтали.

3.

При написании программ учитывать смещение по строке С5 и по столбцу С6.

4.

Программы должны циклически выбирать из «вводимого значения» по одному символу и выводить каждый из

них в отдельные ячейки (использовать строчные функции Len() и Mid()).

5.

Программы раскладки должны вывести раскладываемый по ячейкам текст, как на «Лист1», так и на «Лист2» в

ячейки с одинаковыми номерами (пример: Worksheets(“Лист1”)).

6.

При сохранении файла указать свою фамилию, выбрать формат файла с поддержкой макросов (.xlsm) и

отправить его по электронной почте по адресу преподавателя.

Домашнее задание № 4(2):

1.

Создать в Excell представленную на рисунке таблицу со всеми надписями и кнопок для запуска макросов

раскладки по ячейкам, введенного в ячейку С3 текста.

2.

Активировать кнопку ActiveX и написать программу раскладки текста из ячейки С3 по ячейкам по диагонали.

3.

При написании программы учитывать смещение по строке С5 и по столбцу С6.

4.

Программа должна циклически выбирать из «вводимого значения» по одному символу и выводить каждый из

них в отдельные ячейки (использовать строчные функции Len() и Mid()).

5.

При сохранении файла указать свою фамилию, выбрать формат файла с поддержкой макросов (.xlsm) и

отправить его по электронной почте по адресу по адресу преподавателя.

- 19 -

Руководство по программированию в Visual Basic for Application

Решение задачи домашнего задания № 4(1):

Sub RaskladkaGor_Click()

‘ Раскладка по горизонтали

For x = 1 To Len(Worksheets("Лист1").Cells(3, 3)) ‘ Цикл по длине ФИО

simvol = Mid(Worksheets("Лист1").Cells(3, 3), x, 1) ‘ Выбор каждой буквы по очереди

‘ Вывод буквы в ячейки Excel по горизонтали на "Лист1" и "Лист2".

Worksheets("Лист1").Cells(Worksheets("Лист1").Cells(5, 3), Worksheets("Лист1").Cells(6, 3) + x - 1) = simvol

Worksheets("Лист2").Cells(Worksheets("Лист1").Cells(5, 3), Worksheets("Лист1").Cells(6, 3) + x - 1) = simvol

Next x

End Sub

Sub RaskladkaVer_Click()

‘ Раскладка по вертикали

For x = 1 To Len(Worksheets("Лист1").Cells(3, 3)) ‘ Цикл по длине ФИО

simvol = Mid(Worksheets("Лист1").Cells(3, 3), x, 1) ‘ Выбор каждой буквы по очереди

‘ Вывод буквы в ячейки Excel по вертикали на "Лист1" и "Лист2".

Worksheets("Лист1").Cells(Worksheets("Лист1").Cells(5, 3) + x - 1, Worksheets("Лист1").Cells(6, 3)) = simvol

Worksheets("Лист2").Cells(Worksheets("Лист1").Cells(5, 3) + x - 1, Worksheets("Лист1").Cells(6, 3)) = simvol

Nextx

End Sub

Оба макроса очень похожи. Можно попросить изучающих VBA попытаться объединить два макроса в один

Решение задачи домашнего задания № 4(2):

Private Sub Diagonal_Click()

‘ Раскладка по диагонали

For x = 1 To Len(Cells(3, 3)) ‘ Цикл по длине ФИО

simvol = Mid(Cells(3, 3), x, 1)

‘ Выбор каждой буквы по очереди

‘ Вывод буквы в ячейки Excel по диагонали на рабочий лист. _

Вертикаль и диагональ изменяются одновременно (x).

Cells(Cells(5, 3) + x - 1, Cells(6, 3) + x - 1) = simvol

Next x

End Sub

______________________________________________________________________________________________________

ФУНКЦИЯ ГЕНЕРАЦИИ ПСЕВДОСЛУЧАЙНЫХ ЧИСЕЛ

Randomize (число) – инициализация функции случайных чисел

Функция Rnd (Random) - генерация псевдослучайных чисел.

Возвращает значение в диапазоне от 0 до 1 типа Single, содержащее случайное число (причем 1 не входит

в этот диапазон, а 0 входит).

Чтобы получить значения случайных чисел в интервале от min до max используется формула:

Int ( min + Rnd() * (max — min + 1) ), где min и max - минимальное и максимальное число соответственно

Пример: генерация случайных чисел от 1 до 7

MyValue = Int ( 1 + Rnd() * 7 )

- 20 -

Руководство по программированию в Visual Basic for Application

Практическая работа по VBA № 4

Работа со строковыми функциями

«Имя Ниндзи»

1) Создать в Excel структуру задачи, изображенной на рисунке (см. на следующей странице).

2) Заполнить таблицу с ячейки A1 до D34.

3) Создать Макрос. В разделе Module1 набрать текст макроса, переименовав Sub в Function.

' Функция должна располагаться в Module1

Function VPR(txt As String, NhNach As Integer, NvNach As Integer, _

NhKoncAs Integer, NvPoiska As Integer)

' Переменная txt - принимает переданное функции VPR значение,

' NhNach - номер строки начала таблицы соответствия (искомого),

' NvNach - номер столбца начала таблицы соответствия (искомого),

' NhKonc - номер строки конца таблицы соответствия,

' NvPoiska - номер столбца из которого берется соответствие (найденное).

For x = 1 To Len(txt)

' Цикл от первой буквы "имени человека" до последней (длина строки).

simvol = UCase(Mid(txt, NhNach + x - 1, NvNach))

' Получить очередной 1 символ из переменной txt.

For xx = 1 To (NhKonc - NhNach + 1)

If simvol = Cells(NhNach + xx - 1, 1) Then

' Если очередной символ найден в таблице _

соответствия.

VPR = VPR &Cells(NhNach + xx - 1, NvPoiska)

' Если найдено соответствие, то извлечь из

' столбца соответствия (найденного) и прибавить к накапливаемой

' переменной, одноименной с именем функции.

Exit For

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

End If

Next xx

rs = Int(1 + (Rnd() * 10))

' Rnd() – возвращает случайное число в диапазоне от 1 до 10.

If rs = 3 Then

' Если это число 3 или 7,

VPR = VPR & " "

' то добавляем в строку пробел. (Между кавычками пробел)

Else If rs = 7 Then

VPR = VPR& " "

Else If rs = 5 Then

' Если это число 5, то

VPR = VPR & "-"

' добавляем в строку тире.

End If

Next x

End Function

4)

В ячейку F1 ввести имя человека

5)

В ячейку F3 ввести обращение к функции ( =VPR(F1; 1; 1; 34; 2)) )

(2 – слоги шифра Ниндзя)

6)

В ячейку F5 ввести обращение к функции ( =VPR(F1; 1; 1; 34; 3)) )

(3 – парные буквы)

7)

В ячейку F7 ввести обращение к функции ( =VPR(F1; 1; 1; 34; 4)) )

(4 – цифровой код)

- 21 -

Руководство по программированию в Visual Basic for Application

Рисунок

Пример оформления работы

со строковыми функциями на рабочем листе Excel



В раздел образования