- •Макросы занятие 1. Макрорекодер и редакторVba.
- •Макросы занятие 2. Переменные, простые функции
- •Типы переменных
- •Макросы занятие 3. Условия, ветвление решения.
- •Макросы занятие 4. Циклы.
- •Макросы занятие 5. Функции для обработки текстов.
- •Макросы занятие 6. Объекты и их свойства.
- •Макросы занятие 7. Монопольные окна диалога.
- •Макросы занятие 8. Автоматизация для пользователя.
- •Макросы занятие 9 (на 8-12 часов). Разработка интерфейса пользователя.
- •Макросы занятие 10. Работа с массивами.
- •Макросы занятие 11. Работа с файлами.
- •Макросы занятие 12. Обязательные условия для выполнения индивидуальных заданий.
Макросы занятие 5. Функции для обработки текстов.
Функции для обработки текста.
оператор Mid(текст, старт позиция, [длина]) вырезает с назначенной позиции определенное число символов.
С помощью данного оператора решается множество задач. Разберемся в его использовании. Дополнительно изучим работу следующих операторов:
Оператор Str(число) – преобразует число в текст;
Оператор Val(текст) – преобразует текст в число;
Оператор Len(текст) – возвращает количество символов в тексте;
Оператор Trim(текст) – удаляет пробелы в тексте с обеих сторон.
Оператор Chr(код) – возвращает символ по коду.
Оператор Asc(символ) – возвращает код символа.
При помощи простейшей функции можно определить код любого символа, которые предлагается расположить в ячейках таблицы Excell.
PublicFunctionкод_символа (символ$)
код_символа=asc(символ)
EndFunction
Так, используя данную функцию выясняем, что коды цифр лежат в диапазоне от 48 до 57. Запятая 46, точка 44. Функция удаления цифр будет выглядеть так:
PublicFunctionудалить_цифры (текст$)
Dim I%, dl%, simb$
dl=len(текст)
for I=1 to dl
simb=mid(текст, I, 1)
if asc(simb)<48 or asc(simb)>57 then удалить_цифры= удалить_цифры+simb
next i
End Function
Подобным образом решить самостоятельно предлагаемые задачи.
Задачи.
удалить из произвольного текста цифры
удалить из произвольного текста символы, кроме цифр и запятых
обработать произвольный текст так, чтобы сначала расположились цифры, затем текст
посчитать сумму цифр, входящих в произвольный текст
обработать произвольный текст так, чтобы сначала расположились цифры, затем английский текст, затем русский
в произвольном тексте перевести все строчные символы (англ. и рус) в заглавные.
Макросы занятие 6. Объекты и их свойства.
Работа с ячейками эл.таблицы при произвольном количестве данных.
В макросе прописанном макрорекодером по вставке формул на лист рейсы, есть недостаток – жестко закрепленный диапазон области вставки (от 2 до 50).
Проанализируем объекты, входящие в этот макрос. Прежде всего ActiveCell– активная ячейка. Если набрать его в новой строке и поставить точку, появится всплывающий список свойств и методов (действий), присущий данному объекту.
Среди прочих бросается в глаза свойство Address. Если присвоить переменной значениеActiveCell.Address, напримерtx=ActiveCell.Address, поставить точку останова на команде следующей за данной инструкцией то, наведя курсор наtxпосле запуска макроса увидим “$A$1” (выделена ячейка А1). Поскольку мы уже освоили операторMid, вырезать текстовое значение номера строки не представляет труда.
Но есть другая проблема – определить, где заканчивается список значений в таблице. Здесь ход рассуждений тоже вполне естественен. Использование служебных клавиш Shift,Ctrl,Altприводит к исполнению каких либо функций. Даже не обращаясь к справочной системе можем попробовать их действие. Основная клавишаCtrl. Нажатие <Ctrl>+<End> приводит курсор в конечную область данных вниз+вправо. Нажатие <Ctrl>+<> в последнюю непустую ячейку данной колонки. У первой клав. комбинации есть недостаток – перемещение может произойти в область прежде редактируемых, но ныне пустых ячеек. Вывод – будем определять диапазон значений по самой заполненной колонке (в каждой ячейке – значение), используя <Ctrl>+<> для перемещения на последнюю ячейку и определение ее адреса. После записи действий получим «волшебную» комбинацию:
Range(“A1”).Select
Selection.End(xlDown).Select
Окончательный вариант будет таким:
Sub formuls()
Sheets("Рейсы").Select
Range(“A1”).Select
Selection.End(xlDown).Select
tx= ActiveCell.Address
tx=Mid(tx,4)
Range("G2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
Selection.Copy
Range("G3:G"+tx).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("C2").Select
ActiveCell.FormulaR1C1 = "=MONTH(RC[1])"
Selection.AutoFill Destination:=Range("C2:C"+tx), Type:=xlFillDefault
Range("C2:C"+tx).Select
Range("A1").Select
End Sub
При использовании свойства Value(содержимое) объектаRangeможно сократить текст макроса до нескольких строк. Дело в том, что макрорекодер не оптимизирует текст программы, а просто фиксирует программными кодами все ваши действия.
Результатом осмысленного использования упомянутых свойств известного объекта будет лаконичный программный код.
Sub formuls()
Sheets("Рейсы").Select
Range(“A1”).Select
Selection.End(xlDown).Select
tx= ActiveCell.Address
tx=Mid(tx,4)
Range("G2:G"+tx).Value="=RC[-2]*RC[-1]"
Range("C2:C"+tx).Value = "=MONTH(RC[1])"
Range("A1").Select
End Sub
Для закрепления использования данного открытия освоим еще одну задачу. Попутно разберемся с еще одним свойством активной ячейки. Зачем нам в текстовом виде номер последней заполненной строки, если можно поискать соответствующее свойство активной ячейки. Это свойства RowиColumn. Они соответственно возвращают номер строки и колонки в виде целых чисел. Это удобнее в большинстве случаев. Кроме того, для обращения к конкретной ячейке удобнее воспользоваться объектомCells(ном_строки, ном_колонки).
Пример. Пусть имеется произвольный набор цифр в колонке А. Требуется определить произведение цифр в нечетных строках и сумму цифр в четных строках.
Попробуйте разобраться в представленной ниже программе самостоятельно и дать собственные комментарии.
Subчет_нечет()
Range(“A1”).Select
Selection.End(xlDown).Select
proiz=1
nomst= ActiveCell.Row
for i=1 to nomst step 2
proiz=proiz*Cells(i,1)
ssum=ssum+ Cells(i+1,1)
Next I
Cells(1,2)= proiz
Cells(1,3)= ssum
End Sub