VBA
Типы
Переменные
Объекты
Процедуры
Функции
Операторы
Условный оператор
Цикл For
Цикл For Each
Цикл Do
Пример1 : поиск корней ax2+bx+c=0
Чтение программ
Сортировка выбором
Чтение программ: сортировка выбором
Поиск корней: F(x)=0
Пример2 : поиск корней ax2+bx+c=0
719.31K
Category: programmingprogramming

VBA. Основные конструкции

1. VBA

Основные конструкции

2. Типы

Integer
Double
String
Boolean
Date
Variant
Type Point
x as Double
y as Double
End Type

3. Переменные

Dim
Dim
Dim
Dim
Dim
x
y as Integer
z as New Collection
a(1 to 10) as Double
matrix(1 to 3, 1 to 3) as Double
Dim chart as Chart
Set chart = New Chart
Dim p as Point
p.x = 1
p.y = 2

4. Объекты

Пример 1
Dim r As Range
Set r = Range("A1")
r.Value = 5
r.AddComment ("Test")
Set r = Range(“A1:A10”)
r.Cells(1,1) = 6
X = r.Cells(1,1)
Пример 2
Dim r As Range
Set r = Range("A1")
With r
.Value = 5
.AddComment ("Test")
End With

5. Процедуры

Sub <Identifier> ( [Parameters] )

End Sub
! Процедура не возвращает значений
Пример
Sub PrintLog (text as String)
Debug.Print Date & ": " & text
End Sub
PrintLog "Работа завершена"

6. Функции

Function <Identifier> ( [Parameters] ) as <Type>

<Identifier> = <Expression>
End Function
Пример
Function axpy (a as Double, x as Double, y as Double) as Double
axpy = a*x+y
End Function
PrintLog "5*2+3=" & axpy(5,2,3)

7. Операторы

Оператор
Описание
=
Присваивание
+ * /
Плюс, минус
Умножить, разделить
%
Остаток от целочисленного деления
^
Возведение в степень
<
<=
Меньше
Меньше или равно
>
>=
Больше
Больше или равно
=
<>
Равно
Не равно
Not
Не
And
И
Or
Или

8. Условный оператор

If <Condition> Then

[
Else | ElseIf <Condition> Then

]
End If
Пример
If a > b then
PrintLog a
ElseIf b > c then
PrintLog b
Else
PrintLog c
End If

9. Цикл For

For <identifier>=<from> To <to> [ Step <by> ]

Next [<identifier>]
Пример
For i=1 To 10 Step 2
Debug.Print i
Next

10. Цикл For Each

For Each <identifier> [ As <Type> ] In <expression>

Next
Пример
Dim a() As Variant
a = Array(1, 2, 3, 4, 5)
For Each x In a
Debug.Print x
Next

11. Цикл Do

Do [ While <condition> ]

[ Exit Do ]

Loop
Пример
i = 1
Do While i < 10
Debug.Print i
i = i + 2
Loop

12. Пример1 : поиск корней ax2+bx+c=0

13. Чтение программ

Function ToString(value)
If IsArray(value) Then
For Each x In value
ToString = ToString & CStr(x) & " "
Next
Else
ToString = CStr(value)
End If
End Function
value
2
нет
Each x in value
a,b,c
S = S + CStr(x) + “ “
S = CStr(value)
S
D=b2-4ac
Function SolveSquareEquation(a, b, c)
3
нет
D = b^2 - 4*a*c
D<0
If D < 0 Then
SolveSquareEquation = "No real roots"
нет
да
D=0
ElseIf Abs(D) < 0.000000001 Then ' Сравнение D = 0
SolveSquareEquation = -b / (2 * a)
Else
R={(-b±√D)/(2a)}
R=-b/(2a)
DS = sqr(D)
SolveSquareEquation = Array((-b+DS)/(2*a), (-bR
DS)/2*a)
End If
End Function
Sub test()
roots = SolveSquareEquation(2,3, -4)
Debug.Print ToString(roots)
End Sub
да
value это
массив?
1
да
R = "No real roots"
Вычислить корни
Вывести
корни

14. Сортировка выбором

Массив A(1..N)
Элементы
A(1)..A(i)
отсортированы
Для i=1 до N-1
iMin=i
Для j=i+1 до N
да
1. Найти минимальный
элемент
A(j) < A(iMin)
2. Поменять его местами с первым
нет
iMin=j
Обменять A(i) и A(iMin)
Массив A(1..N)
iMin – индекс
минимального
элемента в
A(i)..A(j)
temp = A(i)
A(i)=A(iMin)
A(iMin)=temp

15. Чтение программ: сортировка выбором

Function ToString(value)

End Function
2
Sub SelectionSort(A)
For I = LBound(A) To UBound(A) - 1
iMin = I
For J = I + 1 To UBound(A)
If A(J) < A(iMin) Then iMin = J
Next
' Обмен
temp = A(I)
A(I) = A(iMin)
A(iMin) = temp
Next
End Sub
3
Sub test()
A = Array (8, 7, 3, 6, 2, 5, 9, 0, 1)
SelectionSort A
Debug.Print ToString(A)
End Sub
Массив A(1..N)
Для i=1 до N-1
iMin=i
Для j=i до N
A(j) < A(iMin)
iMin=j
Обменять A(i) и A(iMin)
Массив A(1..N)
1

16. Поиск корней: F(x)=0

L,R
DO
x=(L+R)/2
да
x
F(x)=0?
да
L=x
нет
Sign(F(x)) =
Sign(F(L))
нет
R=x

17. Пример2 : поиск корней ax2+bx+c=0

18.

Sign(x)
X
да
X<0
−1,
English     Русский Rules