Вы находитесь на странице: 1из 26

VBA в приложении к Excel

Прежде чем перейти непосредственно к задачам, необходимо открыть Microsoft Excel и


разрешить выполнение всех действий с макросами.
Вид  Макрос  Изменить.
*если у Вас уже создан таковой, если нет – создаём и потом изменяем его
Открывается стандартное окно для записи программы в VB
Создание программ VB для Excel

Для начала, создадим кнопку « Решение». В окне редактирования макроса запускаем


Вставка, Форма (Insert, Form) или нажатием кнопки Вставить UserForm (Insert
UserForm). В результате на экран выводится незаполненная форма с панелью
инструментов Панель элементов (Toolbox)

Теперь тут уже создаём кнопку, вставляем в неё текст или же просто меняем её
название в Caption (Заглавие).
Виконати всі приклади нижче та індивідуальне завдання:

Індивідуальне завдання до (VBA вExcel)

Придумати та реалізувати свій макрос в Excel, котрий використовує:

 звернення до листів та комірок з даними;


 реалізацію певного обчислення
 візуалізація результату (границі, колір, виділення тощо)
 використання елементів форми

Задача №1
Добавить на лист личные данные, имя файла, дату и отобразить их на экране
Решение
Для этой программы нам понадобится столько переменных, сколько пожелаете. Нам
главное просто суметь ввести данные, а потом правильно вставить все данные в ответ
(MsgBox). (Т.о. весь текст должен бать в “”, а все переменные должны быть соединены
символом & . Не забываем о пробелах.) Собственно вот и вся программа:

Private Sub CommandButton_Click()

Dim name, surname, age, group, fac, uni As String

name = InputBox("Введите Ваше имя: ")


surname = InputBox("Введите Вашу фамилию: ")
age = InputBox("Введите Ваш возраст: ")
group = InputBox("Введите Вашу группу: ")
fac = InputBox("Вы учитесь на факультете … ")
uni = InputBox("Введите название Вашего университета: ")

MsgBox ("Привет, " & name & surname & " . Ты являешься почётным членом группы "
& group & ",факультета " & fac & " в " & uni & " . Тебе " & age & " лет. Делай что-то для
своей группы!! ")

End Sub
Смотрим:)

1.1.Кнопка для задачи 1.2.Одно из вводимых данных


1.3. Ответ на экране

Задача №2
Выделить зону (Ввести начальную и конечную координаты НЕ через Excel, а через
VBA)
Решение.
Опять-таки начнём с того, что создадим кнопку, которая будет решать всю нашу
задачу, и подумаем, что мы конкретно хотим от задачи.
Здесь нам поможет оператор String (на любой символ - От 0 до 65535 символов), через
который мы и вводим переменные, которые впоследствии будем использовать. Также
создаём InputBox через который вводим уже нужные нам данные.
Через Range(s). Select мы показываем, что заданную зону нам нужно выделить. И
завершаем программу:

Private Sub CommandButton1_Click()


Dim a As String
Dim b As String
Dim s As String
a = InputBox(" Введите первую координаты выд. зоны")
b = InputBox(" Введите вторую координату выд. зоны")
s = a & ":" & b

Range(s).Select

End Sub
Смотрим:

2.1. – 2.2. Вводим координаты выд. зоны

2.3. Ответ

Задача №3
Разукрасить выделенную зону (выполняется после задачи №2)
Решение.
Эта задача очень простая и выполняется буквально в 1 действие.
Нам нужно ввести номер цвета, которым будем раскрашиваться выделенная зона. Для
этого нам надо ввести переменную, которая будет отвечать номеру цвета ( Переменная
«с»).
Нам надо задать компьютеру эту раскраску через оператор With – то есть полному
выделению мы задам цвет «с». Вот как такая программа будет выглядеть:

Private Sub CommandButton2_Click()

Dim c As String
c = InputBox(" Введите код цвета")
With Selection.Interior
.ColorIndex = c
End With
End Sub
Смотрим

3.1. Вводим код цвета для раскраски выд. зоны

3.2. Видим ответ

Задача №4
Ввести номер начальной и конечной строки, номер столбца, с которым вы хотите
провести операцию. Решите: хотите Вы пронумеровать выделенный столбец, либо
разукрасить ( цвета идут соответственно своему номеру).
Решение.
Для начала нужно определиться сколько у нас будет переменных и за что каждая будет
отвечать. Нам нужны переменные X (за начальную строку), У (за конечную строку), S (за
букву столбца), kind (определяющая «тип» рас краски), k (за цвет раскраски), i (как
диапазон между Х и У) и наконец N (объединяющая в себе и диапазон и «тип»
раскраски). Также используем функцию InputBox, чтобы Вы могли ввести свои
собственные данные:

Private Sub CommandButton4_Click()

Dim x As Integer
Dim y As String
Dim n As String
Dim i As Integer
Dim k As Integer
Dim s As String
Dim kind As String
x = InputBox(" Введите начальную строку диапазона")
y = InputBox("Введите конечную строку диапазона ")
s = InputBox(" Введите букву столбца")
kind = InputBox(" Введите d-символы или c-цвет")
k=1
Далее нам нужно задать выбор ( символы или цвета) через оператор If:
If kind = "c" Then
For i = x To y
n=s&i
Range(n).Select
With Selection.Interior
.ColorIndex = k
End With
k=k+1
Next i
End If
If kind = "d" Then
For i = x To y
n=s&i
Range(n).Value = k
k=k+1
Next i
End If
End Sub

Задача решена. Смотрим

4.1. Выбираем конечную строку столбца

4.2. Выбираем действие для выделенного участка столбца.

4.2. Ответ
Задача №5
Ввести 2-х мерный массив, в котором главная диагональ менялась на 0.
Решение.
Как в начале каждой задачи надо решить, сколько будет переменных и какая за что
будет отвечать. Во-первых надо ввести массив ( mass(100,100)), далее m – номер столбцов
массива, потом n – номер строк массива, I – количество столбцов, j – количество строк , и
str – через что мы делаем изменение массива.

Private Sub CommandButton_Click()

Dim mass(100, 100) As Integer


Dim m As Integer
Dim j As Integer
Dim n As Integer
Dim i As Integer
Dim str As String

str = " "


Введя необходимые нам данные, мы задаём нули для главной диагонали матрицы. Все
оставшиеся числа матрицы мы оставляем нетронутым полем (vbCrLf – полем).
И в конце выводим ответ через MsgBox, которым и является str.
Задача в целом выглядит вот так:

Private Sub CommandButton11_Click()


Dim mass(100, 100) As Integer
Dim m As Integer
Dim j As Integer
Dim n As Integer
Dim i As Integer
Dim str As String

str = " "


n = CInt(InputBox("Введите количество столбцов n"))
m = CInt(InputBox("Введите количество строк m"))
For i = 1 To m
For j = 1 To n
mass(i, j) = CInt(InputBox("Введите элемент mass(" & i & " ," & j & ")"))
If i = j Then mass(i, j) = 0
str = str & mass(i, j) & " "
Next j
str = str & vbCrLf
Next i
MsgBox (str)
End Sub

Задача решена. Смотрим 

5.1. Вводим определённый элемент массива

5.2. Ответ
Задача №6
Есть определённое количество товара и машина, которая должна его перевезти
за один раз. (Количество, вес груза и грузоподъёмность машины задаём сами!)
Решение.
Для этой задачи нам понадобиться массив (mass (100)), а также такие переменные как n
(количество товара в кг.), gruz (грузоподъёмность машины), sum (сумма всего груза) и I
(вспомогательная переменная, которая поможет обозначить номера грузов). Чтобы не
было осложнений mass, gruz u summ лучше описать, как тип Double (грузоподъёмность
может быть и 90 кг, так же как и сумма груза).

Private Sub CommandButton5_Click()


Dim mass(100) As Double
Dim gruz As Double
Dim n As Integer
Dim summ As Double
Dim i As Integer

Далее вводим данные:

n = CInt(InputBox(" Введите число N"))


gruz = CInt(InputBox(" Введите грузоподъёмность машины"))
summ = 0
For i = 1 To n
mass(i) = CDbl(InputBox(" Введите вес " & i & "-го элемента"))
summ = summ + mass(i)
Next i

Далее задаём условие, которое выведет ответ нам на экран:

If summ < gruz Then MsgBox ("Эта машина сможет перенести предметы") Else MsgBox
("Эта машина не сможет перенести предметы")
End Sub
Задача решена. Смотрим
6.1. Вводим грузоподъёмность 6.2. Смотрим ответ

Задача №7
Даны 2 целых числа: Д (день) и М (месяц), определяющие правильную дату
невысокосного года. Вывести значение Д и М для даты, предшествующей указанной.
(Case)
Решение

Задаём себе вопрос: Что конкретно мы хотим от программы?


Во-первых, нам необходимо ввести четыре переменные

Private Sub CommandButton1_Click()


Dim d, m, D_pred, M_pred As Integer

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

d = CDbl(InputBox("Введите число D "))


m = CDbl(InputBox("Введите число M "))
D_pred = d – 1 (Предыдущий День равен введённый день -1)

* Функция CDbl преобразует выражение в тип данных двойной точности Double.


Далее вводим условие задания через функцию If:

If D_pred = 0 Then
M_pred = m - 1
If M_pred = 0 Then M_pred = 12
Что означает, что если число предыдущего дня будет равняться 0, то нам просто нужно
поставить предыдущий месяц, а вот если число искомого месяца будет равняться 0, то
вместо 0 ставим 12.
Далее надо рассмотреть Случай (Case) для каждого месяца отдельно (так как
количество дней в месяцах разное), а функцию мы Выбираем ( оператор Select).
Select Case M_pred
Case 1
D_pred = 31
Case 2
D_pred = 28
Case 3
D_pred = 31
Case 4
D_pred = 30
Case 5
D_pred = 31
Case 6
D_pred = 30
Case 7
D_pred = 31
Case 8
D_pred = 31
Case 9
D_pred = 30
Case 10
D_pred = 31
Case 11
D_pred = 30
Case 12
D_pred = 31
End Select

И также введём данные, которые мы ввели ранее (под. функцией Else) и закрываем
оператор If:
Else
M_pred = m
End If

Последним завершающим этапом будем вывод данных:

MsgBox ("Предыдущая дата  " & D_pred & "." & M_pred)

End Sub
Смотрим

7.1. Вводим число месяца.

7.2. Смотрим предыдущую дату (ответ)

Задача №8
Ввести дату цифрами, вывести её на экран словами.
Решение.
По сути, эта задача очень простая, но при написании потребуется много механической
работы.
Понадобится нам всего лишь 4 переменные: m (ввести номер месяца), n (ввести номер
дня), Month (вывести название месяца словами) и Day (вывести номер дня словами).
Month и Day будут выведены через функцию String:

Private Sub CommandButton_Click()


Dim m As Integer
Dim Month As String
Dim n As Integer
Dim Day As String

Далее вводим дату, которую мы захотим увидеть словами:

m = CInt(InputBox("Ввести номер месяца"))


n = CInt(InputBox("Ввести номер дня месяца"))

Далее с помощью оператора Case мы вводим данные для словесного отображения


месяца. Каждому числу должно соответствовать своё название месяца:

Select Case m
Case 1
Month = "Января"
Case 2
Month = "Февраля"
Case 3
Month = "Марта"
Case 4
Month = "Апреля"
Case 5
Month = "Мая"
Case 6
Month = "Июня"
Case 7
Month = "Июля"
Case 8
Month = "Августа"
Case 9
Month = "Сентября"
Case 10
Month = "Октября"
Case 11
Month = "Ноября"
Case 12
Month = "Декабря"
End Select

* Все месяцы указаны в родительном падеже.


Далее аналогичную операцию, которую мы проделали с месяцами надо провести и с
датой. Поэтому выбираем случай (Select Case) c нумерацией дней:

Select Case n
Case 1
Day = "Первое"
Case 2
Day = "Второе"
Case 3
Day = "Третье"
Case 4

… и так до 31. =)

End Select

И, наконец, просто выводим ответ через MsgBox:

MsgBox ("Этот день " & Day & " " & Month)
End Sub

Смотрим 
8.1. Вводим номер месяца

8.2. Выводим ответ на экран

Задача №9
Элементы равнобедренного прямоугольного треугольника пронумерованы
следующим образом: 1 – катет a; 2 – гипотенуза c=a⋅√ 2
3 – высота h, опущенная на гипотенузу (h=c/2); 4 – площадь S=c*h/2.
Дан номер одного из этих элементов и его значение. Вывести значения остальных
элементов данного треугольника. (В том же порядке)
Решение
Для решения этой задачи нам понадобится оператор Case и 6 переменных:
n (номер параметра, который будем вводить), a (катет), с (гипотенуза), H (высота
треугольника), s (площадь треугольника) и вспомогательная переменная x (через которую
мы будем считать). Начинаем вводить данные:

Private Sub CommandButton_Click()

Dim n As Integer
Dim x, a, c, H, s As Double

n = CDbl(InputBox("Введите номер параметра N "))


x = CDbl(InputBox("Введите значение " & n & "-го параметра "))

Далее нам надо выбрать, то над чем мы хотим проводить действие и задать условие – в
нашем случае задать формулы:

Select Case n
Case 1
a=x
Case 2
a = x / Sqr(2)
Case 3
a = 2 * x / Sqr(2)
Case 4
a = Sqr(2 * x)
End Select

c = a * Sqr(2)
H=c/2
s=c*H/2

Выводим на экран ответ, в той последовательности, которая дана в условии нашей


задачи.:

MsgBox ("Значение катета a = " & a)


MsgBox ("Значение гипотенузы c = " & c)
MsgBox ("Значение высоты h = " & H)
MsgBox ("Значение площади S = " & s)

End Sub

Задача решена.
Смотрим 

9.1. Вводим номер выбранного нами параметра


9.2. Вводим значение выбранного нами параметра

9.3. Одно из 4 окон ответа

Задача №10
Даны 3 числа. Найти среднее из них (т.е. число, расположенное между min и max).
Решение.
Для этой задачи нам понадобится 4 переменных, a,b,c – числа, которые мы вводим и
число x – как искомое число. Дальше нам надо ввести данные, что мы и делаем с
помощью InputBox:

Private Sub CommandButton_Click()

Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim x As Integer

a = CInt(InputBox("Введите число A "))


b = CInt(InputBox("Введите число B "))
c = CInt(InputBox("Введите число C "))

Далее нам потребуется задать условие, то есть показать, каное число нам надо вывести
в ответе. Делаем это через оператор IF.

If (a < b) And (a > c) Or (a > b) And (a < c) Then x = a


If (b < a) And (b > c) Or (b > a) And (b < c) Then x = b
If (c < a) And (c > b) Or (c > a) And (c < b) Then x = c

Дальше нам просто остаётся вывести ответ на экран через MsgBox:

MsgBox ("Число, расположенное между минимальным и максимальным = " & x)


End Sub

Задача решена. Смотрим

10.1. Введём число А

10.2. Выводим на экран ответ

Задача №11
Дано вещественное число А и целое число N (>0). Найти А в степени N.
Решение.
В данной задаче нам понадобится 4 переменных : a (Число А), n (Число N), и 2
вспомогательные переменные: f и i (f – переменная над которой будут производится
действия, I – количество чисел, которое нам понадобится). Вводим данные:
Private Sub CommandButton1_Click()

Dim f, a, n, i As Integer

a = CInt(InputBox("Введите число A "))


n = CInt(InputBox("Введите число N "))
f=1

Далее надо использовать оператор For (Для), чтобы ввести наше условие. Итак:

For i = 1 To n
f=f*a
Next i

Переходим к следующему числу i. То начинается повтор.


Остаётся вывести ответ:
MsgBox (a & " в степени " & n & " равно " & f)
End Sub
Задача решена. Смотрим

11.1. Вводим число N

11.2. Выводим ответ

Задача №12
Вывести факториал заданного числа.
Решение.
Для решения этой задачи нам понадобится 3 переменные: a (отвечающая за то число,
факториал которого мы хотим найти), b (вспомогательная переменная, над которой будут
производиться действия) и f (отвечающая за факториал – какие числа должны
перемножаться). Также мы должны задать нашим переменным b и f их первоначальные
данные, чтобы они не были равны 0, и ввести данные числа A:

Private Sub CommandButton_Click()

Dim a As Integer
Dim b As Double
Dim f As Integer

f=1
b=1

a = CInt(InputBox("Введите число A"))

Далее используем оператор For, чтобы задать условие нашей задачи:

For f = 1 To a
b=b*f
Next f (переходим к следующему условию)

Далее выводим ответ на экран:

MsgBox (" Факториал числа А =" & b)


End Sub

Задача решена. Смотрим

12.1. Вводим число А


12.2. Выводим ответ (Факториал)

Задача № 13
Дано целое число N (>1), являющееся числом Фибоначчи: N = Fk (число Фибоначчи:
F1=1, F2=1, Fk=(Fk-2+Fk-1), k=3,4,...). Найти целые числа Fk-1 и Fk+1 – предыдущее и
последующее числа Фибоначчи. Для примера: первые 23 числа ряда
Фибоначчи:0,1,1,2,3,5,8,13,21,34,55,89,144,233,…..
Решение.
Для решения этой задачи понадобится 4 переменных: F0 (первое число Фибоначчи), F1
(второе число Фибоначчи), f (формула числа Фибоначчи) и n (наше число, перед и после
которого мы хотим найти число Фибоначчи). Поскольку все наши 4 переменные цифры,
поставим Integer. И введём наше собственное число:

Private Sub CommandButton_Click()

Dim F0, F1, f, n As Integer

n = CDbl(InputBox("Введите число N "))

f=0
F0 = 0
F1 = 1

Далее вводим наш оператор. То есть нам надо, чтобы первое число Фибонначи было
меньше нашего числа, а последующее было больше нашего числа. Одновременно должно
выполняться два условия и повторялся цикл.

Do While f < n
f = F1 + F0
F0 = F1
F1 = f
Loop
Остаётся вывести ответ на экран:

MsgBox ("Предыдущее число Фибоначчи = " & F0 & ", а последующее = " & F0 + F1)
End Sub
Задача решена. Смотрим

13.1. Введём наше число, для которого надо найти пред. и послед. число Фибоначчи.

13.2. Выводим ответ.

Задача №14
Дан целочисленный массив размера N. Удалить из массива все одинаковые
элементы, оставив их первые вхождения. (Array).
Решение.
Для этой задачи нам не обходимо будет 3 переменных и один массив: i
(вспомогательная переменная, с помощью которой можно будет менять размерность
массива), n (для размерности массива), j (ещё одна вспомогательная переменная, при
помощи которой мы сможем заменять i, корда это будет необходимо) и а (отвечающая за
массив в целом).
Итак, введём переменные и введём наши данные:

Private Sub CommandButton_Click()

Dim i, j, n, k As Integer
Dim a(50) As Integer
n = CDbl(InputBox("Введите размерность массива N "))
For i = 1 To n
a(i) = CDbl(InputBox("Введите " & i & "-й элемент массива"))
Next i

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

For i = 1 To n - 1
For j = i + 1 To n
If a(i) = a(j) Then a(j) = 0 (Здесь программа начнёт заменять одинаковые элементы)
Next j
Next i
For i = 1 To n

После того, как все условия выполнены – надо вывести ответ на экран:

MsgBox ("Элемент А (" & i & ") равен " & a(i))
Next i (переходим к следующему числу, цикл повторяется)
End Sub

Задача решена. Смотрим

14.1. Вводим размерность массива


14.2. Вводим элемент массива

14.3. Выводим ответ на экран.

Вам также может понравиться