Файл: Е. А. Рябухина, О. А. Гущина, Д. А. Губанов, Д. В. Емельянов.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.12.2023
Просмотров: 115
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Элемент одномерного массива указывается в виде V(K), где V – имя массива, K – значение индекса; элемент двумерного – V(K,N), где первый индекс всегда означает номер строки, а второй – номер столбца.
Если же в программе необходимо изменить размер массива, то используют динамические массивы.
Описание динамического массива выполняется следующим образом:
Dim V() As Type
Redim V(n)
или
Redim V(1 to N)
Здесь N и n может быть константой или переменной.
Если массивы используются в качестве параметров подпрограмм, то они описываются в основной программе как динамические.
Если ранее указанная размерность динамического массива изменяется в процессе программы, то все существующие в нем значения обнуляются. Если возникает ситуация, при которой требуется увеличить размерность массива, сохранив его содержимое, то в операторе Redim используется служебное слово Preserve.
Dim A() As Single – объявляет динамический массив.
ReDimA(1 To 3, 1 To 5)
ReDim Preserve A(1 To 3, 1 To 6) – изменяет последний размер массива, сохраняя содержимое.
Внимание! При использовании ключевого слова Preserve можно изменять только последнее измерение многомерного массива!
При этом изменяется только верхняя граница последней размерности массива, то есть можно добавить в одномерный массив новый элемент или новый столбец в матрицу.
Если данные, хранящиеся в массиве, становятся ненужными для дальнейшей работы, то можно удалить массив с помощью оператора
Erase Имя_массива
с целью экономии оперативной памяти.
Для двумерного массива также допустимо использование функций Ubound и Lbound, но они имеют вид Ubound(V,2) и Lbound(V,2). Здесь V – имя массива, 2 – номер измерения.
Пример: даны матрицы A(3,3) и B(3,3). Получить матрицу С=А+В.
Dim A(1 to 3,1 to 3) As Integer, B(1 to 3,1 to 3) As Integer, C(1 to 3, 1 to 3) As Integer
Dim I As Byte, J As Byte
For I=1 to 3
For J=1 to 3
A(I,J)=CELLS(I,J)
B(I,J)=CELLS(I, J+2)
Next J
Next I
For I=1 to 3
For J=1 to 3
C (I,J)=A(I,J)+B(I,J)
CELLS(I+4,J)=C(I,J)
Next J
Next I
Range (“A5:C7”).Select
With Selection
.FONT.NAME=”Times New Roman”
.BORDERS.COLOR=RGB(200,0,0)
End With
Внимание! Предполагается, что при суммировании целочисленных матриц А и В результат не выходит за пределы типа Integer.
18. Строковые переменные и их обработка в VBA
Строковой (символьной текстовой) константой называется последовательность символов, количество которых не превышает 256, при этом последовательность заключается в кавычки(“ ”).
Пример: “ABC”, “$CV$EDRE” и т.д.
Строковой переменной называется переменная, значением которой является строковая константа. Строковые переменные описываются типом String или суффиксом $.
Пример:
A$=”ABC”
Если реальная длина строковой константы меньше 256, то память под нее все равно выделяется в размере как для 256-символьной, поэтому, если реальная длина текстовой константы значительно меньше 256, целесообразно использовать строки фиксированной длины. Объявление строковой переменной фиксированной длины имеет вид:
Dim V As String * n
где n – длина переменной
Пример:
DimA As String*5
Объявленная таким образом переменная V всегда будет содержать ровно 5 символов. Если ей присвоить более короткую строку, VBA добавит после символов этой строки нужное число пробелов. Если же переменной присвоить более длинную строку, VBA сохранит в переменной только 5 первых символов, отбросив остальные:
Строковые константы и переменные можно сравнивать между собой, при этом сравнение происходит посимвольно слева направо. В VBA одна строка равна другой только, когда обе строки содержат точно такие же символы в точно таком же порядке и обе строки имеют одну и ту же длину. Следует быть внимательным при сравнении строк переменной длины.
В VBA существуют два способа сравнения строк – двоичное и текстовое сравнение. Разница заключается в том, что при текстовом сравнении по существу сравниваются уникальные коды символов – коды ASCII. Так, цифры 0-9 имеют коды 48-57, латинские буквы A-Z – коды 65-90, буквы a-z – коды 97-122.
Таким образом, если символ С является цифрой, то для него выполняется условие
“0”<=C<=”9”
а для латинских прописных букв –
“A”<=C<=”Z”
При использовании данного способа сравнения, из двух констант одинаковой длины меньшей считается та, в которой первый из несовпадающих символов имеет меньший код ASCII.
Таким образом, “Abc”<”abc”.
При текстовом сравнении строк VBA не использует коды символов, и не "различает" верхнего и нижнего регистра. В текстовом сравнении строка "абв" равна строке "АБВ".
Для выбора метода сравнения строк используется директива Option Compare:
Option Compare [Text | Binary]
Данная директива должна находиться в области объявления модуля.
К символьным константам применяется операция, называемая конкатенацией, или сложением строк. При этом происходит склеивание строк в порядке их следования. Для конкатенации используется символ & (амперсанд), хотя допускается использование обычного знака +.
Символ (&) операции конкатенации обязательно необходимо отделять пробелом от имени переменной, т.к. в противном случае VBA может интерпретировать этот символ как символ определения типа Long.
К строковым данным применяются следующие встроенные функции:
-
Len(S) – вычисляет длину символьной константы, т.е. количество символов в ней, кавычки при этом не учитываются; результат относится к числовому типу
Пример: Len(“ABC”)=3
-
Left(S,N) – копирует N символов из S, начиная с левого крайнего, результат относится к строковому типу.
Пример: Left(“ABCD”,2)=”AB”
-
Right(S,N) – копирует N символов из S, начиная с правого крайнего, результат относится к строковому типу.
Пример: Right(“ABCD”,2)=”CD”
-
Mid(S,N1,N2) – копирует N2 символов из S, начиная с позиции символа в S, заданной аргументом N1, результат относится к строковому типу.
Пример: Mid(“ABCDEF”,2,3)=”BCD”
-
LCase (S) – заменяет в символьной константе S все символы верхнего регистра соответствующими символами нижнего регистра.
Пример: LCase(“ABC”)=”abc”
-
UCase(S) – заменяет в символьной константе S все символы нижнего регистра соответствующими символами верхнего регистра.
Пример: UCase(“abc”)=”ABC”
-
ASC(“C”) – определяет ASCII-код символа С, результат относится к числовому типу.
Пример: ASC(“Z”)=90
-
Chr(N) – результатом является символ, с кодом ASCII, равным N, результат относится к строковому типу. N принимает значения не более 255.
Пример: Chr(90)=”Z”
-
Spase(N) – возвращает строку пробелов длиной N символов.
Внимание! При применении функции Len к константам фиксированной длины результат всегда равен формальной, т.е. объявленной длине константы. Чтобы узнать фактическую длину, применяем конструкцию Len(Trim(S)).
-
InStr ([k, ] S1, S2 [, Compare]) – дает возможность определить, содержит ли одна строка другую строку. Результатом функции является число, обозначающее порядковый номер символа в S1, с которого начинается S2. Если InStr не находит S2 в String1, то возвращается 0. Если S1 (или S2) имеет значение Null, то функция также возвращает Null. Compare – необязательный аргумент, может быть любой из следующих предопределенных констант (если он опускается, то используется текущая установка Option Compare)
vbBinaryCompare – бинарное сравнение двух строк;
vbTextCompare – текстовое сравнение двух строк;
k – необязательный аргумент, является численным выражением и указывает положение символа в S1, с которого должна начинаться проверка/
Пример: InStr(“ABCD”,”BC”)=2
Пример программы, определяющей диапазон ячеек по номерам столбцов (для простоты будем считать, что используются только столбцы A-Z).
Sub primer()
n_nomer% = 4
k_nomer% = 8
If k_nomer% < n_nomer% Then MsgBox ("Неверныеданные"): GoTo 1
n_stroka% = 5
k_stroka% = 10
If k_stroka < n_stroka Then MsgBox ("Неверныеданные"): GoTo 1
x% = 64 + n_nomer
y% = 64 + k_nomer
L1$ = Chr(x)
L2$ = Chr(y)
m1 = LTrim(Str(n_stroka))
m2 = LTrim(Str(k_stroka))
diap$ = L1 + m1 + ":" + L2 + m2
ActiveSheet.Range(diap).Select
With Selection
.Font.Bold = True
.Font.Italic = True
.Font.Size = 14
.Font.Name = "Times New Roman"
.Borders.Color = RGB(100, 0, 100)
End With
1: End Sub
Обратная задача: по буквенным обозначениям столбцов определить их номера и задать определенные свойства соответствующему диапазону.
SUB primer()
Dim A As Object
DIAP$=”a1:b6”
D$=UCase(DIAP)
NSTOLB$=Left(D,1)
POSDV=InStr(D,”:”)
KONSTOLB$=Mid(D,POSDV+1,1)
NSTR$=Mid(d,2,POSDV-2)
KSTR$=Right(D,Len(D)-POSDV-1)
NROW1=ASC(NSTOLB)-64
NROW2=ASC(KONSTOLB)-64
NLINE1=VAL(NSTR)
NLINE2=VAL(KSTR)
For I=NLINE1 To NLINE2
For J=NROW1 To NROW2
SET A=CELLS(I,J)
A.INTERIOR.COLORINDEX=I+J
NextJ
NextI
19. Функции даты и времени
Date – возвращает системную дату.
Time – возвращает системное время.
Now – возвращает системные дату и время.
Year(D) – возвращает целое, являющееся частью выражения типа Date и содержащее год. Год возвращается как число между 100 и 9999.
Month(D) – возвращает целое, являющееся частью выражения типа Date и содержащее месяц. Месяц возвращается как число между 1 и 12.
Day(D) – возвращает целое, являющееся частью выражения типа Date и содержащее день. День возвращается как число между 1 и 31.
WeekDay(D) – возвращает целое, являющееся частью выражения типа Date и содержащее день недели. День недели возвращается как число между 1 и 7 (1 – воскресенье…).
Hour(D) – возвращает целое, содержащее часы как часть времени, содержащегося в выражении типа Date. Часы возвращаются как число между 0 и 23. Если аргумент не содержит значения времени, то возвращается 0.
Minute(D) – возвращает целое, содержащее минуты как часть времени, содержащегося в выражении типа Date. Минуты возвращаются как число между 0 и 59. Если аргумент не содержит значения времени, то возвращается 0.
Second(D) – возвращает целое, содержащее секунды как часть времени, содержащегося в выражении типа Date. Секунды возвращаются как число между 0 и 59. Если аргумент не содержит значения времени, то возвращается 0.
DateSerial(N,N,N) – возвращает значение последовательной даты для заданной даты. Слева направо аргументы представляют год (целое число от 100 до 9999), месяц (от 1 до 12) и день (от 1 до 31).
TimeSerial(N,N,N) – возвращает значение последовательного времени. Слева направо аргументы представляют часы (целое число от 0 до 23), минуты (от 0 до 59) и секунды (от 0 до 59).
DateValue(E) – возвращает значение типа Date, эквивалентное дате, заданной аргументом Е, который может быть строкой, числом или константой, представляющей время.