Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы занятия1.doc
Скачиваний:
18
Добавлен:
03.05.2015
Размер:
710.66 Кб
Скачать

Макросы занятие 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

Подобным образом решить самостоятельно предлагаемые задачи.

Задачи.

  1. удалить из произвольного текста цифры

  2. удалить из произвольного текста символы, кроме цифр и запятых

  3. обработать произвольный текст так, чтобы сначала расположились цифры, затем текст

  4. посчитать сумму цифр, входящих в произвольный текст

  5. обработать произвольный текст так, чтобы сначала расположились цифры, затем английский текст, затем русский

  6. в произвольном тексте перевести все строчные символы (англ. и рус) в заглавные.

Макросы занятие 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