Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

96

Часть I. Введение в Excel

Совет

Когда дело доходит до подсчета времени, ситуация усложняется. Если вре­ мя вводится без даты, в качестве даты берется 0 января 1900 года (соответствует значению 0). Это не проблема, если только в результате под­ счетов не получится отрицательное значение времени. В подобном случае Excel выведет сообщение об ошибке (в виде #########). Что делать в такой ситуации? Перейти к формату дат 1904 года. Перейдите в диалоговое окно Параметры Excel (Excel Options), выберите раздел Дополнительно (Advanced) и установите флажок Использовать систему дат 1904 (Use 1904 Date System). Не забывайте, что переход к этой системе может привести к неадекватному толкованию дат, ранее введенных в текущий рабочий лист или в связанные рабочие книги.

ОСовет

Иногда значения времени используются для представления длительности времени. Например, может возникнуть необходимость подсчитать количе­ ство рабочих часов в неделе. При складывании значений времени обнару­ живается, что нельзя получить значение, которое больше 24 часов. Для каж­ дого 24-часового периода Excel добавляет к дате еще один день. Решить данную проблему можно путем изменения числового формата — выделите квадратными скобками ту часть значения, в которой указано количество ча­ сов. Например, ниже представлен числовой формат, в котором может ото­ бражаться более 24-х часов.

[ч ч ]:м м

Использование дат до 1900 года

Как вы понимаете, мир начал свое существование не с 1 января 1900 года. И тем, кто использует Excel для работы с исторической информацией, часто приходится иметь дело с датами, намного более ранними, чем 1 января 1900 года. К сожалению, для управления та­ кими датами подходит только один способ — их необходимо вводить в ячейку, как текст. Например, Excel не будет против, если в ячейку вы введете дату 4 июля 1776 года.

Впрочем, над датами, введенными, как текст, нельзя выполнять никаких операций. На­ пример, изменить формат даты вы не сможете, как не сможете определить день недели, на ко­ торый эта дата приходится, а также подсчитать дату, отстоящую от текущей на семь дней.

Но все не так уж и печально, поскольку в VBA поддерживается расширенный набор дат. Я воспользовался рядом функций рабочего листа VBA, которые могут работать с датами до 1900 года. Результаты применения этих функций показаны на рис. 3.9. Перед вами превосходный пример расширения возможностей Excel с помощью VBA.

Перекрестная ссылка

Дополнительные сведения по работе с дополнительными функциями дат можно найти в главе 10.

Создание мегаформул

Зачастую для получения необходимого результата в электронных таблицах исполь­ зуются промежуточные формулы, т.е. формула может зависеть от других формул, кото­ рые, в свою очередь, зависят от еще каких-либо формул. Добившись, чтобы все они ра­

98

Часть I. Введение в Excel

Таблица 3.5. Промежуточные формулы, введенные в столбцах B:G

Столбец Промежуточная формула

В=СЖПРОБЕЛЫ (А2)

с=НАЙТИ ( 1 " , В2 , 1)

D

=НАЙТИ(" " , В2, С2+1)

Е=ЕСЛИ(ЕОШИБКА(D2) , С2, D2)

F=ЛЕВСИМВ(В2,С2)

G=ПРАВСИМВ(В2, LEN(В2) -Е2)

Н=F2&G2

Выполняемые функции

Удаляет лишние пробелы Находит первый пробел

Находит второй пробел. Возвращает значение #ЗНАЧ! в случае отсутствия второго пробела Использует первый найденный пробел, если неуайден второй Выделяет имя Выделяет фамилию Объединяет два имени

Можно избавиться от всех промежуточных формул, создав мегаформулу. Для этого выполните следующее: создав промежуточные формулы, перейдите к конечной резуль­ тирующей формуле и замените в ней каждую ссылку на ту или иную ячейку копией фор­ мулы, которая в этой ячейке находится (копия вводится без знака равенства). К счастью, для копирования и вставки можно использовать буфер обмена. Повторяйте эти действия до тех пор, пока в ячейке Н2 не исчезнут все ссылки, кроме ссылок на ячейку А2. В ко­ нечном итоге у вас в одной ячейке получится следующая мегаформула.

=ЛЕВСИМВ(СЖПРОБЕЛЫ(А2) , НАЙТИ (" " , СЖ ПРОБЕЛЫ(А2), 1 ) ) &ПРАВСИМВ(СЖПРОБЕЛЫ(А2) ,Д Л СТР(

СЖ ПРОБЕЛЫ(А2)) - ЕСЛИ(ЕОШ ИБКА(НАЙТИ(" " , СЖПРОБЕЛЫ(А 2 ) , НАЙ ТИ(" " , СЖПРОБЕЛЫ(А2) , 1 ) + 1 ) ) , Н АЙ ТИ("

" , СЖПРОБЕЛЫ(А 2 ) , 1 ) , Н АЙ ТИ(" " , СЖПРОБЕЛЫ(А 2 ) , НАЙТИ (" " , СЖПРОБЕЛЫ(А2) , 1)+ 1) ) )

Убедившись, что мегаформула работает, можете удалить столбцы с промежуточными формулами, поскольку последние вам больше не понадобятся.

Мегаформула выполняет те же самые задачи, что и все промежуточные формулы, од­ нако понять, как она работает, может только ее автор. Если вы собираетесь использовать мегаформулы, то перед их созданием проверьте, правильно ли работают промежуточные формулы. Или еще лучше — сохраните отдельно копию этих формул (на тот случай, ес­ ли в расчетах обнаружится ошибка или в их алгоритм потребуется внести изменения).

Еще один способ решения этой проблемы заключается в создании пользовательской VBAфункции рабочего листа. Затем мегаформула заменяется следующей простой формулой:

=NOMIDDLE(А 1 )

Фактически я создал функцию, которая сравнима с промежуточными формулами и мегаформулой. Ниже приводится ее листинг.

F u n c t i o n NOM ID DLE(n) A s S t r i n g

D im F i r s t N a m e A s S t r i n g , L a s tN a m e A s S t r i n g n = A p p l i c a t i o n . W o r k s h e e t F u n c t i o n . T r i m ( n )

F i r s t N a m e = L e f t ( n ,

I n S t r ( l , n , " " ) )

L a s tN a m e

=

R i g h t ( n ,

L e n ( n ) - I n S t r R e v ( n , " " ) )

NOMIDDLE

=

F i r s t N a m e & L a s tN a m e

En d F u n c t i o n

Компакт-диск

Рабочая книга, которая содержит промежуточные формулы, мегаформулу и VBA-функцию n o m id d le , находится на прилагаемом компакт-диске. Соот­ ветствующий файл называется m e g a f o r m u l a . x ls m .

Глава3. Особенности формул

99

Сложность мегаформул наталкивает на мысль, что при их использовании вычисления могут существенно замедляться. На самом деле это не так. Создадим рабочий лист, в ко­ тором мегаформула использовалась 175000 раз. Затем создадим другой рабочий лист, в котором применено шесть промежуточных формул. Вы увидите, что мегаформула ра­ ботает существенно быстрее и создает файл намного меньшего размера (табл. 3.6).

Таблица 3.6. Сравненное быстродействия в случае применения мегаформул и промежуточных формул

Метод

Продолжительность вы­

Размер файла,

 

числения, с

Мбайт

Промежуточные формулы

5,8

12,6

Мегаформула

3,9

2,95

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

Функция VBA выполняется намного медленнее — автор прервал ее выполнение по­ сле 5 минут тестирования. Как правило, VBA-функции выполняются медленнее встроен­ ныхфункций Excel.