616 Часть VI. Разработка пользовательских функций
F u n c t i o n STATICRAND() As D o u b le
' Возвращает произвольное число,
' которое не изменяется при п ер есч ет е
STATICRAND = Rnd
End F u n c t io n
В функции STATICRAND используется функция VBA Rnd, которая, как и функция
СЛЧИС, возвращает случайное число в диапазоне от нуля до единицы. В то же время при
использовании STATICRAND случайные числа не изменяются при пересчете листа.
Примечание
При нажатии клавиши <F9> новые значения функции s t a t i c r a n d не гене
рируются; это можно сделать с помощью комбинации клавиш <Ctrl+Alt+F9> ,
(клавиатурное сокращение глобального пересчета в Excel).
Следующая версия функции возвращает случайное целое число из заданного диапа
зона значений. На самом деле эта функция является всего лишь оболочкой встроенной
функции Excel СЛУЧМЕЖДУ (R an d B etw een )1.
F u n c t i o n STATICRANDBETWEEN(lo As Long, h i As Long) As Long
' Возвращает случайное целое число,
1 не изменяемое при п ер есч ет е
STATICRANDBETWEEN = W o r k s h e e t F u n c t i o n . R a n d B e tw e e n ( l o , h i )
End F u n c tio n
К примеру, если вам нужно получить случайное целое число в диапазоне от 1 до
1000, можете воспользоваться следующей формулой:
=STATICRANDBETWEEN( 1 ; 1 0 0 0 )
Управление пересчетом функции
Возникает вопрос: когда пересчитывается пользовательская функция, используе
мая в формуле рабочего листа?
Пользовательские функции ведут себя точно так же, как встроенные функции рабо
чего листа Excel. Как правило, они пересчитываются только тогда, когда это необходи
мо, т.е. когда изменяются аргументы функции. Но пересчет функции можно выполнять
чаще. Добавив следующее выражение в процедуру, вы заставите функцию пересчиты
ваться при изменении любой ячейки:
A p p lic a tio n .V o la tile True
Метод V o l a t i l e в объекте A p p l i c a t i o n принимает один аргумент (либо True, либо
F a l s e ) . Обеспечив функцию атрибутом v o l a t i l e , вы заставите ее пересчитываться
каждый раз при пересчете любой ячейки рабочего листа.
Например, если применить оператор V o l a t i l e , то пользовательскую функцию
s t a t i c r a n d , представленную в этой главе, можно заменить на ее эмулятор — функцию
Excel слчис ().
F u n c t i o n NONSTATICRAND()
' Возвращает произвольное число,
1В этой и других функциях, использующих встроенные функции рабочего листа Excel, назва
ния функций приведены в варианте англоязычной версии Excel. Дело в том, что русификация кос
нулась программы Excel и ее функций, но не языка VBA; в нем используется исключительно анг
лоязычный вариант имен функций. Естественно, это вносит определенную путаницу, но все, что
нам остается, — это принять данный факт к сведению. —Примеч. ред.
Глава 25. Примеры пользовательских функций VBA 617
' изменяющееся при каждом п ер ес ч ет е данных листа
A p p lic a tio n .V o la tile True
NONSTATINCRAND = Rnd
End F u n c t io n
Использование в методе V o l a t i l e аргумента F a l s e заставляет функцию выполнить
пересчет только в том случае, если изменяются один или несколько ее аргументов (если
в функции нет аргументов, то этот метод неэффективен). По умолчанию все функции дей
ствуют так, будто для них задано выражение A p p l i c a t i o n . V o l a t i l e F a l s e .
Выбор случайной ячейки
Представленная далее функция, которая называется DRAWONE, выбирает случайным
образом из полученного диапазона произвольную ячейку и возвращает ее содержимое.
F u n c t i o n DRAWONE(rng As V a r i a n t ) As D o u b le
' Выбирает из диапазона произвольную ячейку
DRAWONE = r n g ( I n t ( ( r n g .C o u n t ) * Rnd + 1 ) )
End F u n c tio n
Используя эту функцию, обратите внимание, что при пересчете рабочего листа она не
пересчитывается. Другими словами, эта функция не является временной. Функцию мож
но сделать пересчитываемой, добавив следующее выражение:
A p p lic a tio n .V o la tile True
После этого функция DRAWONE будет отображать новые случайные значения каждый
раз при пересчете листа.
Далее представлена более общая функция, принимающая в качестве аргументов как
массивы констант, так и диапазоны.
F u n c t i o n DRAWONE2 ( r n g As V a r i a n t ) As V a r i a n t
1 Выбор сл учай н ого значения и з м асси ва
Dim A rrayL en As Long
I f TypeName(rng) = "Range" Then
DRAWONE2 = r n g ( I n t ( ( r n g . C o u n t ) * Rnd + 1 ) ) . V a l u e
E lse
ArrayLen = UBound(rng) - LBound(rng) + 1
DRAWONE2 = r n g ( I n t ( A r r a y L e n * Rnd + 1 ) )
End I f
End F u n c tio n
Эта функция использует встроенную функцию языка VBA TypeName для выяснения
того, является ли переданный аргумент диапазоном. Если это не так, считается, что был
передан массив. Следующая формула возвращает текстовую строку, соответствующую
некоторой масти в колоде карт:
=DRAWONE2 ( { "Черви"; "Бубны"; "Трефы"; "Пики"})
Следующая формула возвращает такой же результат, но использует встроенные
функции Excel:
=ВЫБОР(СЛУЧМЕЖДУ( 1 ; 3 ) ; "Черви"; "Бубны"; "Трефы"; "Пики")
Далее вашему вниманию будут представлены еще две функции, работающие со слу
чайными числами.
618 Часть VI. Разработка пользовательских функций
Вычисление комиссионных от продаж
Управляющим компании часто приходится пересчитывать комиссионные, заработан
ные агентами по продажам. Расчеты в примере функции, представленной ниже, основа
ны на гибкой шкале: чем больше агент продал, тем больший процент комиссионных он
получает (см. табл. 25.1). К примеру, если объем продаж составил от $10 ООО до $19 999,
агент получает 10,5% комиссионных.
Таблица 25.1. Ставка комиссионных для продаж за месяц
Продажа за месяц ($) Процентная ставка (%)
Менее 10000 8,0
10000-19999 10,5
20000-39999 12,0
40000 и более 14,0
Комиссионные можно вычислить для различных объемов продаж, указанных на рабо
чем листе. Для этого можно использовать сложную формулу с вложенными функциями IF.
=IF(A1<0;0;IF(A1<10000;A1*0,0 8 ;I F (А1<20000;А1*0,105;
IF (А1<40000;А1*0,1 2 ;А1*0,1 4 ))))
Этот подход нельзя назвать лучшим по нескольким причинам. Во-первых, формула
получается слишком громоздкой и запутанной, что затрудняет ее понимание. Во-вторых,
значения в формуле заданы жестко, а это затрудняет внесение изменений в формулу.
Лучший способ описать эти условия — воспользоваться таблицей классификаторов,
например:
=ПРОСМОТР(А 1 ; Т а бл и ц а; 2 ) *А1
Использование функции П Р О С М О Т Р является хорошей альтернативой, но функция не
выполняется, если структура начисления комиссионных слишком сложная (более под
робно этот вопрос будет рассмотрен в следующем разделе). Еще одним альтернативным
способом является создание пользовательской функции.
Функция для начисления комиссионных
Следующая функция COMMISSION принимает один аргумент ( S a l e s ) и вычисляет
ставку комиссионных.
F u n ctio n COMMISSION(Sales As D ouble) As D ouble
' Вычисляет комиссионные с продаж
Const T i e r l As Double = 0 .0 8
Const T ier2 As Double = 0.1 0 5
Const T ier3 As Double = 0.1 2
Const T ier4 As Double = 0.14
S e le c t Case S ales
C a se I s >= 4 0 0 0 0
COMMISSION2 = S a l e s * T i e r 4
C a se I s >= 2 0 0 0 0
COMMISSION2 = S a l e s * T i e r 3
C a se I s >= 1 0000
COMMISSION2 = S a l e s * T i e r 2
Case Is < 10000
COMMISSION2 = S a l e s * T i e r l
Глава 25. Примеры пользовательских функций VBA 619
End S e l e c t
End F u n c tio n
Приведенная ниже формула рабочего листа возвращает значение 3 000 (объем про
даж $25 ООО соответствует ставке в 12%).
=COMMISSION( 2 5 0 0 0 )
В этой функции легко разобраться. В ней используется константа для хранения став
ки комиссионных и структура S e l e c t C ase для выяснения того, какую ставку следует
использовать.
Примечание
Когда структура S e l e c t C ase пересчитывается, программа выходит из нее,
как только выполнится первый встреченный истинный оператор Case.
Функция для более сложного метода начисления
комиссионных
Если структура начисления комиссионных более сложная, следует воспользоваться
дополнительными аргументами в функции COMMISSION. Представьте, что вышеупомя
нутый менеджер решил применить новую политику начисления комиссионных, предна
значенную для уменьшения текучести кадров: общие комиссионные повышаются на 1%
в год, пока агент по продажам работает на эту компанию.
Ниже приведена измененная функция COMMISSION (она называется COMMISSION2).
Теперь эта функция принимает два аргумента: объем продаж за месяц ( S a l e s ) и количе
ство отработанных в компании лет (Y ears).
F un ction COMMISSION2(Sales, Years) As S in g le
' Вычисляет комиссионные, основываясь на объеме
' продаж и количестве отработанных в компании лет
Const T ie r l As Double = 0.0 8
Const T ier2 As Double = 0 .105
Const T ier3 As Double = 0.12
Const T ier4 As Double = 0.1 4
S e le c t Case S a les
C ase I s >= 4 0 0 0 0
COMMISSION2 = S a l e s * T i e r 4
C ase I s >= 2 0 0 0 0
COMMISSION2 = S a l e s * T i e r 3
C ase I s >= 1 000 0
COMMISSION2 = S a l e s * T i e r 2
Case Is < 10000
COMMISSION2 = S a l e s * T i e r l
End S e l e c t
COMMISSION2 = COMMISSION2 + (COMMISSION2 * Y e a r s / 100)
End F u n c t io n
На рис. 25.3 представлена функция COMMISSION2. В ячейке D2 введена следующая
формула:
=COMMISSION2(В 2 ; С2)
Компакт-диск
Эта функция содержится на прилагаемом компакт-диске в файле c o m i s
s io n fu n c tio n .xlsm(Chapter25_RUS.xlsm).
620 Часть VI. Разработка пользовательских функций
Рис. 25.3. Пересчет комиссионных на основе объема про
даж и количества отработанных в компании лет
Функции управления текстом
Управление текстом с помощью функций может выполняться разными способами.
В этом разделе мы рассмотрим операции обращения последовательности символов
(реверсирования строки), перетасовки и извлечения символов из строки. В примерах
представлены функции управления текстовыми строками.
Компакт-диск
Функции этого раздела содержатся на прилагаемом компакт-диске в файле
tex t m anipulation functions.xlsm(Chapter25_RUS.xlsm ).
Обращение строки
Следующая функция REVERSETEXT возвращает текст ячейки в обратном порядке.
F un ction REVERSETEXT(text) As S tr in g
1 Возвращает реверсивный аргумент
REVERSETEXT = S t r R e v e r s e (t e x t )
End F u n c t i o n
В этой функции используется функция VBA S t r R e v e r s e . Приведенная ниже фор
мула возвращает строку t f o s o r c i M .
=REVERSETEXT( " M i c r o s o f t ")
Перетасовка текста
Следующая функция возвращает содержимое аргумента, но его символы расположе
ны в случайном порядке. Например, если использовать M i c r o s o f t в качестве аргумен
та, то в результате может получиться o f i c M i c r o или строка с другим порядком пред
ставления символов.
F un ction SCRAMBLE(text)
' Перетасовывает символы аргумента
Dim T extL en As I n t e g e r
Dim i As I n t e g e r
Dim RandPos As I n t e g e r
Dim Char As S t r i n g * 1
S e t t e x t = t e x t . R a n g e ( "A I")
TextLen = L en(text)
For i = 1 To TextL en
Char = M i d ( t e x t , i , 1)
RandPos = I n t ( (T extL en - 1 + 1 ) * Rnd + 1)
M i d ( t e x t , i , 1) = M i d ( t e x t , RandPos, 1)
Глава 25. Примеры пользовательских функций VBA 621
M i d ( t e x t , RandPos, 1) = Char
Next i
SCRAMBLE = t e x t
End F u n c tio n
Функция SCRAMBLE обрабатывает каждый символ, а затем заменяет его другим слу
чайно выбранным символом.
Действие функции Mid может показаться немного странным. Обратите внимание на
следующий факт: когда Mid стоит справа от оператора присваивания, то это функция,
а когда Mid находится слева от данного оператора, то это выражение. Назначение опера
тора Mid подробно описано в справочной системе.
Возвращение аббревиатуры
Функция ACRONYM возвращает первую букву каждого слова аргумента (в верхнем ре
гистре). Например, следующая формула вернет строку IBM:
=ACRONYM(" I n t e r n a t i o n a l B u s i n e s s M a c h in e s" )
Текст функции ACRONYM следующий. 1
F u n c tio n ACRONYM(text) As S t r i n g + 1, 1)
1 Возвращает аббревиатуру для аргумента
Dim T e x tL en As I n t e g e r
Dim i As I n t e g e r
text = A pplication.Trim (text)
TextLen = L en(text)
ACRONYM = L e f t ( t e x t , 1)
For i = 2 To TextL en
I f M i d ( t e x t , i , 1) = C hr(32) Then
ACRONYM = ACRONYM & M i d ( t e x t , i
End I f
Next i
ACRONYM = UCase(ACRONYM)
End F u n c t i o n
В этой функции используется функция TRIM, удаляющая лишние пробелы в аргумен
те. Первый символ аргумента всегда является первым символом результата. Цикл F o r -
N e x t проверяет каждый символ. Если символ является пробелом, то символ после про
бела добавляется к результату. Затем результат преобразуется в верхний регистр с по
мощью функции VBA UCase.
Проверка соответствия текста шаблону
Следующая функция возвращает TRUE, если строка совпадает с шаблоном, состав
ленным из текста и специальных символов. Функция ISLIKE довольно проста и обычно
используется вместе с оператором VBA L ik e .
F un ction ISLIK E (text As S tr in g , p a tt e r n As S tr in g ) As B oolean
1 Возвращ ает TRUE, е с л и первый ар гум ен т р а в е н в тором у
I f t e x t L ike p a t t e r n Then ISLIKE = True E l s e ISLIKE = F a ls e
End F u n c t io n
В VBA поддерживаются некоторые специальные символы.
Следующая формула возвращает значение TRUE, поскольку вопросительный знак (?)
соответствует любому символу. Если бы первый аргумент был равен U n it 12, то функ
ция в результате вернула бы FALSE.
=ISLIKE ( " U n i t l " ; "Unit?")
622 Часть VI. Разработка пользовательских функций
Символ Значение
Соответствует одному символу
? Соответствует любому количеству символов (в том числе нулевому)
★ Соответствует одной цифре
Соответствует любому символу из списка
# Соответствует любому символу, не вошедшему в список
[ список]
[ ! список]
Функция IS L IK E работает так же и со значениями. Например, приведенная ниже
формула возвращает значение TRUE, если ячейка А1 содержит значение, которое начи
нается с 1 и состоит из трех цифр.
=ISLIKE (A I; "1##")
Следующая формула возвращает значение TRUE, поскольку первый аргумент являет
ся символом, который находится в определенном во втором аргументе списке символов.
=ISLIK E( " а " ; " [ a e i o u ] ")
Если список символов начинается с восклицательного знака (!), то сравниваются
символы, не вошедшие в список. Например, следующая формула возвращает значение
TRUE, поскольку первый аргумент является символом, не вошедшим в список второго
аргумента.
=ISLIK E( " g " ; " [ ! a e i o u ] ")
Для проверки на соответствие одному из специальных символов, описанных в табли
це, поместите этот символ в квадратные скобки. Следующая формула вернет TRUE, по
скольку шаблон состоит из трех последовательных символов вопросительного знака.
Вопросительные знаки в шаблоне заключены в квадратные скобки, поэтому представля
ют собой обычные символы, а не символы макроподстановки.
=ISLIKE(" ? ? ? " ;" [? ][? ][? ]" )
Оператор L i k e довольно универсален. Более подробная информация о работе опера
тора L i k e содержится в справочной системе.
Проверка, содержит ли ячейка заданное слово
Встроенная в Excel функция ПОИСК находит одну текстовую строку в другой и воз
вращает позицию первого символа искомой строки. Например, приведенная ниже фор
мула возвращает 13 — позицию первого символа строки е с т ь в строке Д а в а й т е в с е
ест ь овощи.
=ПОИСК( " е с т ь " ; "Давайте в с е е с т ь овощи")
Следующая формула тоже возвращает 13, хотя слова е с т во второй строке нет:
=ПОИСК( " е с т " Д а в а й т е в с е е с т ь овощи")
В Excel нет способа выяснить, содержит ли строка заданное слово. Это можно сде
лать с помощью приведенной ниже функции VBA, которая возвращает ИСТИНА, если в
строке есть слово.
F u n c t i o n EXACTWORDINSTRING(Text As S t r i n g , Word As S t r i n g )
As B oolean
ExactW ordlnString = " " & UCase(Text) & _
" " Like "*[!A -Я ] " & UCase(Word) & "[1А-Я]*"
End F u n c t io n
Глава 25. Примеры пользовательских функций VBA 623
Использование функции EXACTRWORDINSTRING показано на рис. 25.4. Столбец А
содержит текст, передаваемый в первом аргументе, а столбец В — искомое слово
(второй аргумент). В столбце С1 находится следующая формула:
=EXACTWORDINSTRING(A l ; В 1 )
Рис. 25.4. Функция VBA находит слово в строке
Компакт-диск w o rd .x lsm
Функция E x a c t W o r d l n S t r i n g содержится в файле e x a c t
(Chapter25_RUS . x ls m ) на прилагаемом компакт-диске.
Проверка наличия текста в ячейке
В главе 5 речь шла о некоторых функциях рабочего листа Excel, которые временами
становились ненадежными при управлении текстом в ячейках. К примеру, функция
ЕТЕКСТ возвращает значение ЛОЖЬ, если ее аргументом является число, отформатирован
ное как текст. Приведенная ниже функция CELLHASTEXT возвращает значение TRUE, если
в аргументе ячейки содержится текст или значение, отформатированное как текст.
F u n c tio n CELLHASTEXT(cell As Range) As B o o lea n
' Возвращ ает TRUE, е с л и ячейка содерж ит т е к с т
Dim U p p er L e ft As Range
CELLHASTEXT = F a l s e
Set UpperLeft = c e l l .Range("Al")
I f U p p e r L e ft.N u m b e r F o r m a t = "@" Then
CELLHASTEXT = True
Exit Function
End I f
I f Not IsN um eric(U pperL eft) Then
CELLHASTEXT = True
Exit Function
End I f
End F u n c tio n
Следующая формула возвращает значение TRUE, если в ячейке А1 находится строка
или если ячейка отформатирована как текст:
=CELLHASTEXT(Al)
Извлечение л-го элемента строки
Функция EXTRACTELEMENT является пользовательской функцией рабочего листа.
Она извлекает элемент из текстовой строки, основываясь на заданном символе раздели
теля. Предположим, что в ячейке А1 содержится такой текст:
123-456-789-9133-8844
624 Часть VI. Разработка пользовательских функций
Следующая формула вернет строку 9133, что соответствует четвертому элементу
строки. В строке в качестве разделителя используется дефис (-).
=EXTRACTELEMENT(А 1; 4 ; " - " )
В функции EXTRACTELEMENT применено три аргумента.
• T xt. Строка текста, из которой извлекается элемент. Это может быть строка сим
волов или ссылка на ячейку.
• п. Целое число, показывающее номер извлекаемого элемента.
• S e p a r a t o r . Символ, используемый в качестве разделителя.
Примечание
Если в качестве символа-разделителя задать пробел, то несколько пробе
лов могут восприниматься как один (почти всегда это так, как и должно
быть). Если п превышает количество элементов в строке, то функция воз
вращает пустую строку.
Код VBA функции EXTRACTELEMENT выглядит следующим образом.
F u n c t i o n EXTRACTELEMENT(T x t , n , S e p a r a t o r ) As S t r i n g
' Возвращает n -й элемент строки, в которой
' элементы разделены заданным символом
Dim A llE le m e n t s As V a r ia n t
AllElem ents = S p lit(T x t, Separator)
EXTRACTELEMENT = A l l E l e m e n t s ( n - 1)
End F u n c t io n
В этой функции используется встроенная функция VBA S p l i t , которая возвращает
массив V a r i a n t , содержащий все элементы текстовой строки. Массив начинается с 0 (а не
с 1), поэтому для обращения к необходимому элементу следует использовать индекс n - 1.
Написание числа прописью
Функция SPELLDOLLARS возвращает найденную в тексте цифру, написанную про
писью — подобно тому, как это делают на банковских чеках. Например, приведенная
ниже формула возвращает строку Ты сяча д о л л а р о в .
=SPELLDOLLARS(1 000)
На рис. 25.5 показаны примеры использования функции SPELLDOLLARS. В столбце
С содержатся формулы, в которых используется эта функция. Например, формула в
ячейке С1 следующая:
=SPELLDOLLARS(А1)
Обратите внимание, что отрицательные значения заключены в круглые скобки. Мож
но усложнить функцию, добавив знак “минус” перед отрицательными значениями, учи
тывая правильные окончания слова д о л л а р для разных чисел, заменив строку /1 0 0
словом со ты х или ц е н т о в и т.д.
Компакт-диск
Эта функция содержится на прилагаемом компакт-диске в файле s p e l l -
d o lla rs function.xlsm (Chapter25_RUS.xlsm ).
Глава 25. Примеры пользовательских функций VBA 625
Рис. 25.5. Примеры использования функции s p e l l d o l l a r s
Функции подсчета
В главе 7 были приведены примеры формул подсчета и суммирования ячеек по раз
личным критериям. Если ни одна из формул для подсчета и суммирования не подходит,
значит, следует создать собственную пользовательскую функцию. В этом разделе пред
лагаются четыре функции, выполняющие операции подсчета и суммирования.
Компакт-диск
Функции этого раздела содержатся на прилагаемом компакт-диске в файле
counting function.xlsm (Chapter25_RUS.xlsm ).
Подсчет ячеек, соответствующих заданному шаблону
Функция СЧЁТЕСЛИ принимает в передаваемых ей критериях ограниченное число
символов макроподстановки, точнее — звездочку и вопросительный знак. Если вам не
обходима более гибкая сверка с шаблоном, можете применить в пользовательской функ
ции оператор LIKE.
F u n c t i o n COUNTLIKE(rng As Range, p a t t e r n As S t r i n g ) As Long
' Подсчет в диапазоне ячеек,соответствующих шаблону
Dim c e l l As Range
Dim c n t As Long
For Each c e l l In r n g .C e lls
I f c e l l . T e x t Like p a tt e r n Then cn t = cn t + 1
Next c e ll
COUNTLIKE = c n t
End F u n c t io n
Следующая формула подсчитывает в диапазоне G4 : J 1 5 количество ячеек, не содер
жащих символ е:
=COUNTLIKE(G4: J 1 5 , "? [ ! е ] *")
Подсчет листов рабочей книги
Приведенная ниже функция COUNTSHEETS не имеет аргументов и возвращает коли
чество листов рабочей книги, из которой она была вызвана.
F u n c t i o n COUNTSHEETS() As Long
COUNTSHEETS =
A p p lic a tio n . C a lle r . P a r e n t. P a r e n t. S h e e t s . Count
End F u n c t i o n
626 Часть VI. Разработка пользовательских функций
Эта функция использует свойство A p p l i c a t i o n . C a l l e r для получения диапазона, в
который была введена формула. После этого она дважды использует свойство P a r e n t для
перехода к уровню рабочего листа и, далее, рабочей книги. Находясь на уровне рабочей
книги, она вызывает свойство C o u n t свойства S h e e t s и возвращает полученное значение.
Подсчет слов в диапазоне
Функция WORDCOUNT принимает аргумент диапазона и возвращает количество слов,
в нем содержащееся.
F u n c t i o n WORDCOUNT(r n g As Range) As Long
' Подсчет количества слов в диапазоне ячеек
Dim c e l l As Range
Dim WdCnt As Long
For Each c e l l In r n g .C e lls
I f W o r k s h e e tF u n c tio n .I s T e x t(c e ll.V a lu e ) Then
WdCnt = WdCnt + ( L e n ( c e l l . T e x t ) - _
L e n ( R e p l a c e ( c e l l . T e x t , " ", "")) + 1)
End I f
Next c e ll
WORDCOUNT = WdCnt
End F u n c t i o n
Проходя в цикле по ячейкам заданного диапазона, функция рабочего листа ISTEXT
(соответствующая ЕТЕКСТ) определяет, содержится ли в них текст. Если это так, под
считывается количество пробелов и добавляется к общему итогу, после чего к результату
добавляется еще единица (так как предложение, состоящее из четырех слов, содержит
три пробела). Подсчет пробелов выполняется путем сравнения общей длины текста с
длиной после удаления пробелов с помощью функции VBA R e p la c e .
Подсчет ячеек с определенным цветом шрифта
Функция COUNTREDS принимает аргумент диапазона и возвращает число ячеек,
имеющих красный цвет шрифта.
F u n c t i o n COUNTREDS(r n g As Range) As Long
' Подсчет я ч ее к с красным цветом шрифта
Dim c e l l As Range,
For Each c e l l In r n g .C e lls
I f c e l l . F o n t . C o l o r = vbRed Then COUNTREDS = COUNTREDS + 1
Next c e ll
End F u n c t io n
Свойство C o lo r объекта F o n t каждой ячейки сравнивается с константой vbR ed
(это встроенная константа, имеющая то же значение, что и красный цвет в Excel). Эта
функция привязана к конкретному цвету. В то же время можно написать и другую, более
общую функцию, в которой искомый цвет передается в качестве аргумента.
Примечание
Несмотря на то что в данном разделе мы имели дело с подсчетом, многие из
функций без труда можно преобразовать в функции суммирования. К при
меру, в функции countreds можно изменить строку вычисления перемен-
ной функции следующим образом (предполагается, что названием функции
суммирования будет sumreds):
SUMREDS=SUMREDS+cell.Value
Глава 25. Примеры пользовательских функций VBA 627
Функции управления датами
В главе 6 были описаны некоторые функций и формулы Excel для вычисления дат,
времени и временных периодов. В этом разделе представлены дополнительные функции
для работы с датами.
Компакт-диск
Функции этого раздела содержатся на прилагаемом компакт-диске в файле
d ate fun ction s.xlsm (C hap ter25_R U S.xlsm ).
Расчет следующего понедельника
Приведенная ниже функция NEXTMONTH принимает дату в качестве аргумента и воз
вращает дату следующего понедельника.
F u n c t io n NEXTMONDAY(d As D a te ) As D a te
' Возвращает дату следующего понедельника
NEXTMONDAY = d + 8 - W eekD ay(d, vbMonday)
End F u n c tio n
В коде используется функция VBA W eekDay (аналог ДЕНЬНЕД), которая возвращает
целое число, соответствующее дню недели для текущей даты (l=Sunday, 2=Moday
и т.д.). Также в этой функции используется встроенная константа vbMonday.
Приведенная ниже формула возвращает 31/12/2010, что соответствует первому поне
дельнику после Рождества 2010 года (Рождество выпадает на вторник).
=NEXTMONDAY(DATE(2 0 1 0 ; 1 2 ; 2 5 ) )
Примечание
Эта функция возвращает порядковый номер даты. Чтобы отобразить поряд
ковый номер в формате даты, следует изменить формат ячейки, в которой
использована функция.
Если в качестве аргумента, обрабатываемого функцией NEXTMONDAY, использовать
понедельник, функция возвратит значение следующего понедельника. Чтобы функция
вернула значение текущего понедельника, нужно использовать несколько модифициро
ванную версию.
F u n c t io n NEXTMONDAY2(d As D a te ) As D a te
' Возвращает дату следующего понедельника или текущего
' понедельника, если аргумент представляет понедельник
I f WeekDay(d) = 2 Then
NEXTMONDAY2 = d
E lse
NEXTMONDAY2 = d + 8 - W eekD ay(d, vbM onday)
End I f
End F u n c tio n
Вычисление следующего дня недели
Функция NEXTDAY является вариацией функции NEXTMONDAY. Она принимает два аргу
мента: дату и целое число в диапазоне от 1 до 7, соответствующее дню недели (l= S unday,
2=Monday и т.д.). Функция NEXTDAY возвращает дату следующего дня недели.
F u n c t io n NEXTDAY(d As D a te , d a y As I n t e g e r ) As V a r ia n t
' Возвращает дату следующего указанного дня недели.
628 Часть VI. Разработка пользовательских функций
1 День недели указывается числами от 1 до 7
I f d a y < 1 Or d a y > 7 Then
NEXTDAY = CVErr(xlErrNA)
Else
NEXTDAY = d + 8 - W eekDay(d, day)
End I f
End F u n c t io n
В функции NEXTDAY используется инструкция I f , обеспечивающая приемлемость
аргумента дня (он должен принадлежать диапазону от 1 до 7). Если аргумент дня являет
ся неприемлемым числом, функция возвращает значение ошибки #Н /Д . Поскольку
функция может возвращать значения, отличные от дат, ее тип описан как V a r i a n t .
Определение недели в месяце
Приведенная ниже функция MONTHWEEK возвращает целое число, соответствующее
номеру недели в месяце.
F u n c t i o n MONTHWEEK(d As D a te ) As I n t e g e r
1 Возвращает номер недели в месяце
Dim F i r s t D a y As I n t e g e r
' Проверка правильности введения аргумента
I f Not IsD a te(d ) Then
MONTHWEEK = CVErr(xlErrNA)
Exit Function
End I f
' Вычисление первого дня месяца
FirstDay = W eekDay(DateSerial(Year(d), Month(d), 1))
' Определение номера недели
MONTHWEEK = A p p l i c a t i o n . R o u n d U p ( ( F i r s t D a y + d a y ( d ) - 1) / 7, 0)
End F u n c t io n
Работа с датами до 1900 года
Многие пользователи удивляются, когда узнают, что Excel не работает с датами до 1900
года. Чтобы исправить этот недостаток, я создал ряд функций, манипулирующих датами. Эти
функции позволяют работать с датами, начиная с 0100 года и заканчивая 9999 годом.
• XDATE (y,m , d , f m t ) . Возвращает дату определенного года, месяца и дня. В ка
честве необязательного параметра можно задать строку формата даты.
• XDATEADD (xda t e l , d a y s , f m t ) . Добавляет определенное число дней к дате.
В качестве необязательного параметра можно задать строку формата даты.
• XDATEIF ( x d a t e l ,x d a t e 2 ). Возвращает количество дней между двумя датами.
• XDATEYEARDIF ( x d a t e l , x d a t e 2 ). Возвращает количество полных лет между
двумя датами (используется при вычислении возраста).
• XDATEYEAR ( x d a t e l ) . Возвращает год указанной даты.
• XDATEMONTH ( x d a t e l ). Возвращает месяц указанной даты.
• XDATEDAY ( x d a t e l ) . Возвращает день указанной даты.
• XDATEDOW( x d a t e l ). Возвращает день недели указанной даты (в виде целого
числа от 1 до 7).
Глава 25. Примеры пользовательских функций VBA 629
На рис. 25.6 показан рабочий лист, использующий некоторые из этих функций.
Компакт-диск
Функции работы с датами содержатся на прилагаемом компакт-диске в
файле e x t e n d e d d a t e f u n c t i o n . x l s m (Chapter25_R U S .x ls m ). Там же вы
найдете файл h e l p . d o cx , содержащий их описание.
Рис. 25.6. Примеры использования расширенных функций работы с датами
Предупреждение
Эти функции не подстраиваются под изменения, внесенные в календарь в
1582 году. Поэтому результаты функций управления датами до 15 октября
1582 года могут быть не вполне корректными.
Возвращение последней заполненной ячейки
столбца или строки
В этом разделе представлено две функции: LASTINCOLUMN, которая возвращает со
держимое последней заполненной ячейки в столбце, и LASTINROW, которая возвращает
содержимое последней заполненной ячейки в строке. В главе 15 описаны формулы мас
сивов, используемые с той же целью, но для решения данной задачи можно также при
менить пользовательские функции.
Компакт-диск
Функции этого раздела содержатся на прилагаемом компакт-диске в файле
la s t nonempty cell.xlsm (C hapter25_R U S.xlsm ).
Каждая из этих функций в качестве одного аргумента принимает диапазон. Аргумен
том может быть ссылка на столбец (для LASTINCOLUMN) или строку (для LASTINROW).
Если принимаемый аргумент не соответствует ссылке на полную строку или столбец
(такой как 3 : 3 или D : D), то в функции используется столбец или строка левой верхней
ячейки диапазона. Например, следующая формула возвращает содержимое последней
заполненной ячейки из столбца В:
=LASTINCOLUMN(ВБ)
Следующая формула возвращает содержимое последней заполненной ячейки в строке 7:
=LASINTROW(C7:D9)
630 Часть VI. Разработка пользовательских функций
Функция LASTINCOLUMN
Ниже приведен текст функции LASTINCOLUMN.
F u n c t i o n LASTINCOLUMN(rng As Range)
' Возвращает содержимое последней заполненной ячейки
' столбца
A pplication.V olatile
With rn g.P aren t
With . C e l l s ( . Rows. Count, rng.Column)
I f Not IsE m p ty(.V alue) Then
LASTINCOLUMN = . V a l u e
E l s e l f IsE m pty( . E n d (xlU p )) Then
LASTINCOLUMN = ""
E lse
LASTINCOLUMN = . E n d ( x l U p ) . V a l u e
End I f
End With
End W ith
End F u n c t i o n
Обратите внимание на ссылку P a r e n t диапазона. Она позволяет функции работать с
аргументами, которые ссылаются на различные рабочие листы и книги.
Функция LASTINROW
Ниже приведен текст функции LASTINROW.
F u n c t i o n LASTINROW(rng As Range)
' Возвращает содержимое последней
' заполненной ячейки строки
A pplication.V olatile
With rn g.P aren t
W ith . C e l l s ( r n g . Row, . C o lu m n s. C o u n t)
I f Not IsE m pty( .V alue) Then
LASTINROW = . V a l u e
E l s e l f IsE m pty( . E n d (x lT o L e ft)) Then
LASTINROW = ""
E lse
LASTINROW = . E n d ( x l T o L e f t ) . V a l u e
End I f
End With
End W ith
End F u n c t io n
Перекрестная ссылка
В главе 15 рассматривается формула массива, которая возвращает послед
нюю ячейку столбца или строки.
Функции для работы с несколькими листами
Иногда требуется создать функцию для работы с данными, которые содержатся на
нескольких рабочих листах одной рабочей книги. В этом разделе предлагается две функ
ции VBA, которые позволяют работать с данными различных листов (в том числе функ
ции, которые обходят ограничения Excel на копирование формул в другой лист).
Глава 25. Примеры пользовательских функций VBA 631
Компакт-диск
Функции этого раздела содержатся на прилагаемом компакгг-диске в файле
m u ltish eet fu n c tio n s .xlsm(Chapter25_RUS.xlsm).
Возвращение максимального значения ячейки
из всех рабочих листов
Чтобы определить максимальное значение ячейки (например, В1) нескольких рабо
чих листов, используйте такую формулу:
=МАКС(Л и с т 1 :Л и с т 4 !В 1 )
Эта формула возвращает максимальное значение ячейки В1 листов Л и ст1, Л и ст4
и всех листов, находящихся между ними. Но что произойдет, если после Л и ст4 доба
вить новый лист (Л и ст5)? Формула автоматически не обновляется, поэтому ее придется
изменить вручную:
=МАКС(Лист1:Л ист5!В1)
Следующая функция принимает аргумент одной ячейки и возвращает максимальное
значение этой ячейки на всех рабочих листах рабочей книги. Например, приведенная ниже
формула возвращает максимальное значение ячейки В1 на всех листах рабочей книги.
=MAXALLSHEETS(В1)
При добавлении нового листа редактировать формулу не нужно.
F u n c t io n MAXALLSHEETS(cell As Range)
Dim MaxVal As D o u b le
Dim Addr As S t r i n g
Dim Wksht As O b je c t
A pplication.V olatile
Addr = c e l l . R ange( "AI") .A ddress
MaxVal = - 9 . 9E+307
For Each Wksht I n c e l l . P a r e r i t . P a r e n t . W o r k s h e e t ’s
I f Wksht.Name = c e l l . Parent.N am e And _
Addr = A p p lic a tio n .C a lle r .A d d r e s s Then
' Избежание циклической ссылки
E lse
I f IsNum eric(W ksht. Range(Addr)) Then
I f W ksht. Range(Addr) > MaxVal Then _
MaxVal = W ksht. R a n g e(A d d r).V a lu e
End I f
End I f
Next Wksht
I f MaxVal = -9 .9 E + 3 0 7 Then MaxVal = 0
MAXALLSHEETS = MaxVal
End F u n c t io n
Инструкция F o r E ach использует следующее выражение для обращения к рабо
чей книге:
c e l l . P arent. P arent.Worksheets
Родителем ячейки является рабочий лист, а родителем рабочего листа— рабочая
книга. Таким образом, цикл E a c h - N e x t обрабатывает все рабочие листы в рабочей
книге. Первая инструкция I f внутри цикла проверяет наличие этой же функции в прове
ряемой ячейке. Если функция обнаружена, ячейка игнорируется во избежание ошибки
циклической ссылки.
632 Часть VI. Разработка пользовательских функций
Примечание
Функцию m a x a l l s h e e t s можно настроить для других операций с несколь
кими листами: мин, срзнач, сумм и т .д .
Функция S H E E TO FFSET
Многие замечания, касающиеся приложения Excel (в том числе и Excel 2010), заклю
чаются в недостаточной поддержке относительных ссылок на листы. Например, предста
вим, что у вас есть рабочая книга с несколькими листами, и на листе Л и с т 2 введена сле
дующая формула:
= Л и с т 1 !А1 +1
Эта формула прекрасно работает. Однако если скопировать ее на следующий лист
(Л истЗ), то формула будет продолжать ссылаться на Л и ст 1. Если вс!авить лист между
Л и ст1 и Л и ст2, формула все равно продолжит ссылаться на Л и ст1 (хотя по логике она
должна ссылаться на только что вставленный лист). Вам не удастся создать формулу, ко
торая бы ссылалась на рабочие листы относительным образом. Однако можно восполь
зоваться функцией SHEETOFFSET, чтобы избежать этих ограничений.
Приведенная ниже процедура функции VBA называется SHEETOFFSET.
F un ction SHEETOFFSET(Offset As Long, Ref c e l l As V arian t)
■ Возвращает содержимое ячейки с указанным смещением листов
Dim W ksIndex As Long, WksNum As Long
Dim wks As W ork sh eet
A pplication.V olatile
I f I s M is s i n g ( c e ll) Then S et c e l l = A p p lic a t i o n . C a lle r
WksNum = 1
For Each wks In A p p lic a t i o n . C a l l e r . P a r e n t. P aren t.W ork sh eets
I f A p p lic a t i o n . C a l l e r . Parent.Name = wks.Name Then
SHEETOFFSET = W orksheets(W ksNum + O f f s e t ) _
.R a n g e(cell(1 ).Address).Value
Exit Function
E lse
WksNum = WksNum + 1
End I f
Next wks
End F u n c t i o n
Функция SHEETOFFSET принимает два аргумента.
• O f f s e t . Смещение листа, которое может быть положительным, отрицательным
или равным нулю.
• R ef. Ссылка на одну ячейку. Если этот аргумент опущен, то ссылка на ячейку бу
дет такой же, что и ячейка, содержащая формулу.
Следующая формула возвращает значение ячейки А1 листа, который расположен пе
ред листом с формулой.
=SHEETOFFSET( - 1 ; А 1)
Представленная ниже формула возвращает значение ячейки А1 листа, расположенно
го после листа с формулой.
=SHEETOFFSET( 1 ; А 1 )
Глава 25. Примеры пользовательских функций VBA 633
Дополнительные пользовательские функции
В этом разделе рассмотрены более сложные пользовательские функции. Приведен
ные примеры демонстрируют некоторые специальные технологии, которые можно реа
лизовать в пользовательских функциях.
Возвращение значения ошибки
В некоторых случаях пользовательская функция должна возвращать конкретное значе
ние ошибки. В качестве примера рассмотрим функцию REVERSETEXT, описанную ранее.
F u n c tio n REVERSETEXT(text) As S t r i n g
REVERSETEXT = S t r R e v e r s e (t e x t )
End F u n c t io n
Функция возвращает обращенное значение содержимого ячейки-аргумента (может
быть текстом или значением). Если аргумент является многоячеечным диапазоном, то
функция возвращает ошибку #ЗНАЧ !.
Допустим, функция должна работать только со строками. Если в аргументе содер
жится не строка, то функция вернет значение ошибки (#Н /Д ). Можно просто присвоить
названию функции строку, которая выглядела бы как значение ошибки формулы Excel.
REVERSETEXT = "#Н/Д"
Несмотря на то что данная строка выглядит, как значение ошибки, она не воспринимается
другими формулами как ошибка. Чтобы действительно вернуть значение ошибки, восполь
зуйтесь функцией VBA CVErr, которая преобразует номер ошибки в реальную ошибку.
К счастью, в VBA содержатся встроенные константы для ошибок, которые должны
быть возвращены пользовательской функцией. Эти константы перечислены ниже:
• xlErrDivO ;
• xlErrNA;
• xlErrName;
• xlE rrN ull;
• xlErrNum;
• xlE rrR ef;
• xlE rrV alue.
Далее приведена усовершенствованная функция REVERSETEXTM.
F u n c t i o n REVERSETEXTM(text As V a r i a n t ) As V a ria n t
I f A pplication.ISN O N T EX T(text) Then
REVERSETEXTM = C V E r r (x lE r r )
E lse
REVERSETEXTM = S t r R e v e r s e (t e x t )
End I f
End F u n c tio n
Во-первых, тип аргумента этой функции изменен на V a r i a n t . Если бы аргумент
имел тип S t r i n g , Excel пыталась бы преобразовать то, что получает (например, булево
значение), и это ей удавалось бы. Далее в этой функции используется функция Excel I S -
NONTEXT (аналог ЕНЕТЕКСТ) для определения того, является ли аргумент текстовой
строкой. Если аргумент не является текстовой строкой, то функция возвращает ошибку
#Н/Д. В противном случае она возвращает символы в обратном порядке.
634 Часть VI. Разработка пользовательских функций
Примечание
Исходная функция r e v e r s e t e x t имела тип s t r i n g , поскольку всегда воз
вращала текстовую строку. В исправленной версии функция описана как
v a r i a n t , потому что теперь она не всегда возвращает строку.
Возвращение массива из функции
Большинство функций, написанных на языке VBA, возвращает одно значение. Одна
ко можно написать функцию, которая возвращает несколько значений в виде массива.
Ф Перекрестная ссылка
В части IV рассматриваются массивы и формулы массивов. В этих главах
приводятся примеры формул, которые возвращают несколько значений
в разных ячейках диапазона. Как будет показано далее, можно также соз
дать пользовательские функции, возвращающие массивы.
VBA предлагает весьма полезную функцию, которая называется A rr a y . Она возвра
щает значение типа V a r i a n t , содержащее массив. Важно понимать, что возвращаемый
этой функцией массив и обычный массив, составленный из элементов типа V a r i a n t , —
не одно и то же. Другими словами, массив V a r i a n t и массив из значений V a r i a n t —
это разные вещи.
Если формулы массивов Excel вам уже известны, тогда можно приступать к ознаком
лению с функцией A rr a y . Формула массива вводится в ячейку после нажатия клавиш
<Ctrl+Shift+Enter>. Формула автоматически обрамляется фигурными скобками, чтобы
показать, что это формула массива. (Более подробно о формулах массива рассказано
в главе 12.)
Примечание
Нижняя граница массива, созданного с помощью функции A rra y , по умол
чанию равна нулю. Но ее можно изменить, воспользовавшись инструкцией
Option Base.
Компакт-диск
Функции этого раздела содержатся на прилагаемом компакт-диске в файле
monthnames .xlsm (Chapter25_RUS .xlsm).
В следующей функции MONTHNAMES продемонстрировано, как вернуть массив из
функции.
F u n c t i o n MONTHNAMES() As V a r i a n t _
MONTHNAMES = A r r a y (
"Янв", "Фев", "Map", "Апр",
"Май", "Июн", "Июл", "Авг",
"Сен", "Окт", "Ноя", "Дек")
End F u n c tio n
На рис. 25.7 показан рабочий лист, использующий функцию MONTHNAMES. Функция
вводится после выделения диапазона А2 : L2 и ввода следующей формулы:
{=MONTHNAMES( ) }
Глава 25. Примеры пользовательских функций VBA 635
А2 - фГ A {=MONTHNAMES()}
! .С
А !В [ DТЕ F j6 |Н [ Гj J ■*[ К [ _L
Фев Мар Июл Авг Ноя Дек
1 Апр Май Июн Сен Окт I
2 1янв _
Ш
Рис. 25.7. Функция m o n t h n a m e s , введенная формулой массива
Примечание
Как и при работе с формулой массива, для ввода этой формулы следует на
жать клавиши <Ctrl+Shift+Enter>. Не вводите фигурные скобки — Excel доба
вит их самостоятельно.
Функция MONTHNAMES, как уже отмечалось, возвращает горизонтальный массив
размером в одну строку. Чтобы отобразить массив вертикального диапазона в один стол
бец, выделите диапазон и введите следующую формулу:
{ =ТРАНСП(MONTHNAMES( ) ) }
В качестве альтернативы, чтобы выполнить транспонирование, можно изменить и
саму функцию. В следующем примере для возвращения вертикального массива исполь
зуется функция Excel T r a n s p o s e (соответствующая ТРАНСП).
F u n c t i o n VMONTHNAMES() As V a r i a n t
VMONTHNAMES = A p p l i c a t i o n . T r a n s p o s e ( A r r a y ( _
"Янв", "Фев", "Map", "Апр",
"Май", "Июн", "Июл", "Авг", _
"Сен", "Окт", "Ноя", "Дек"))
End F u n c t io n
Возвращение массива неповторяющихся случайных
целых чисел
Функция RANDOMINTEGERS возвращает массив, состоящий из неповторяющихся це
лых чисел. Эта функция предназначена для использования в формулах многоячеечных
массивов. На рис. 25.8 показан рабочий лист, в котором в диапазоне АЗ :D12 использу
ется следующая формула:
{ =RANDOMINTEGERS( ) }
Рис. 25.8. Формула массива генери
рует неповторяющиеся целые числа,
организованные в случайном порядке
636 Часть VI. Разработка пользовательских функций
Эта формула вводится в диапазон при нажатии <Ctrl+Shift+Enter>.Она возвращает
массив неповторяющихся случайных целых чисел. Посколькуформулаохватывает 40
ячеек, то диапазон целых чисел расположен в интервале от 1 до 40. Ниже приведен код
функции RANDOMINTEGERS:
F u n c t io n RANDOMINTEGERS()
Dim FuncR ange As R ange
Dim V () As I n t e g e r , V a lA r r a y O As I n t e g e r
Dim C e llC o u n t As D o u b le
Dim i As I n t e g e r , j As I n t e g e r
Dim r As I n t e g e r , с As I n t e g e r
Dim Tempi As V a r ia n t , Temp2 As V a r ia n t
Dim RCount As I n t e g e r , CCount As I n t e g e r
R and om ize
' Создание объекта Range
S et FuncRange = A p p lic a tio n .C a lle r
' Возвращ ение ошибки, есл и FuncRange слишком большой
C ellC ount = FuncRange. Count
I f C ellC ount > 1000 Then
RANDOMINTEGERS = C V E rr(xlE rrN A )
E xit F unction
End I f
1 Назначение переменных
RCount = FuncR ange. Rows. Count
CCount = FuncR ange. C olum ns. Count
ReDim V (1 To RCount, 1 To CCount)
ReDim V a lA r r a y (l To 2 , 1 To C e llC o u n t)
' Заполнение массива произвольными последовательными
' числами
For i = 1 То C ellC ou n t
V a lA r r a y ( l , i ) = Rnd
V alA rray(2, i) = i
Next i
' Сортировка V alA rray произвольным образом
For i = 1 To C ellC o u n t
For j = i + 1 To C ellC o u n t
I f V alA rra y (1, i) > V a lA rra y (1, j) Then
Tempi = V a lA rra y (1, j)
Temp2 = V a lA r r a y (2 , j )
V alA rray(1, j) = V alA rray(1, i)
V alA rray(2, j) = V alA rray(2, i)
V a lA rra y (1, i) = Tempi
V a lA r r a y (2 , i ) = Temp2
End I f
Next j
Next i
■ Занесение произвольных значений в массив V
i =0
For г = 1 То RCount
F o r kс = 1 То CCount
i =i +1
V (г, с) = V alA rray(2, i)
Глава 25. Примеры пользовательских функций VBA 637
Next с
Next г
RANDOMINTEGERS = V
End F u n c tio n
К о м п а к т-д и с к
Эта функция содержится на прилагаемом компакт-диске в файле random
in te g e r fun ction .xlsm (C h ap ter25_R U S .xlsm ).
Перетасовка значений диапазона
Приведенная ниже функция RANGERANDOMIZE принимает аргумент диапазона и
возвращает введенный массив, расположив его элементы в случайном порядке.
F u n c t io n RANGERANDOMIZE(rng)
Dim V () As V a r ia n t , V a lA r r a y O As V a r ia n t
Dim C e llC o u n t As D o u b le
Dim i As I n t e g e r , j As I n t e g e r
Dim r As I n t e g e r , с As I n t e g e r
Dim Tempi As V a r ia n t , Temp2 As V a r ia n t
Dim RCount As I n t e g e r , CCount As I n t e g e r
R and om ize
C ellC ount = rng.C ount
I f C ellC ou n t > 1000 Then
RANGERANDOMIZE = C V E rr(xlE rrN A )
E x it F unction
End I f
RCount = r n g . Rows. Count
CCount = r n g . C olum ns. Count
ReDim V (1 To RCount, 1 To CCount)
ReDim V a lA r r a y (l To 2 , 1 To C e llC o u n t)
For i = 1 To C ellC o u n t
V a lA r r a y (l, i ) = Rnd
V alA rray(2, i) = r n g (i)
Next i
For i = 1 To C ellC o u n t
For j = i + 1 To C ellC o u n t
I f V a lA rra y (1, i) > V a lA r r a y (l, j) Then
Tempi = V a lA rra y (1, j)
Temp2 = V a lA r r a y (2 , j )
V alA rray(1, j) = V alA rray(1, i)
V alA rray(2, j) = V alA rray(2, i)
V a lA rra y (1, i) = Tempi
V a lA r r a y (2 , i ) = Temp2
End I f
Next j
Next i
i =0 i)
For r = 1 To RCount
For с = 1 To CCount
i =i +1
V (r, c) = V alA rray(2,
638 Часть VI. Разработка пользовательских функций
Next с
Next г
RANGERANDOMIZE = V
End F u n c tio n
Этот код немного напоминает код функции RANDOMINTEGERS. На рис. 25.9 показа
на данная функция в действии. Формула массива в диапазоне D2.-E17 выглядит сле
дующим образом:
{=RANGERANDOMIZE(А 2 : В 1 7 ) }
Рис. 25.9. Функция r a n g e r a n d o m i z e возвращает диапазон,
элементы которого перетасованы в случайном порядке
Компакт-диск
Эта функция содержится на прилагаемом компакт-диске в файле ran ge
random ize fu n ction .xlsm (C h ap ter25_R U S .xlsm ).
Использование необязательных аргументов
Во многих встроенных функциях рабочих листов Excel используются необязательные
аргументы. Например, функция ЛЕВСИМВ возвращает символы левой части строки.
В этой функции используется следующий синтаксис:
ЛЕВСИМВ ( текст; число_символов)
Первый аргумент обязателен, а второй — нет. Если опустить необязательный аргумент,
то Excel подставит вместо него значение, принятое по умолчанию, в данном случае 1.
В пользовательских функциях, создаваемых на языке VBA, тоже могут присутствовать
необязательные аргументы. Перед именами таких аргументов вставляется ключевое слово
O p t i o n a l . Ниже приведена простая функция, которая возвращает имя пользователя.
F u n c t io n USER()
USER = A p p lic a tio n .U s e r N a m e
End F u n c tio n
Представим, что в некоторых случаях имя пользователя должно отображаться в верхнем
регистре. Для этой задачи в следующей функции используется необязательный аргумент.
F u n ction U SER(O ptional U ppercase As B oolean)
I f IsM issin g (U p p erca se) Then U ppercase = F a lse
I f U ppercase = True Then
Глава 25. Примеры пользовательских функций VBA 639
USER = U c a s e ( A p p lic a t io n .U s e r N a m e )
E lse
USER = A p p lic a tio n .U s e r N a m e
End I f
End F u n c tio n
Примечание
Если нужно определить, передан ли необязательный аргумент функции, вы
должны объявить его с типом v a r i a n t . После этого можно использовать в
процедуре функцию i s M i s s i n g (это будет продемонстрировано в следую
щем примере).
Если аргумент равен FALSE или пропущен, то имя пользователя возвращается без
каких-либо изменений. Если же аргумент равен TRUE, то имя пользователя преобразует
ся в верхний регистр (с помощью функции VBA UCase) и только после этого отобража
ется на экране. Обратите внимание на то, что в первой инструкции в процедуре исполь
зуется функция VBA I s M is s in g для выяснения того, задан ли аргумент. Если аргумент
отсутствует, то инструкция устанавливает переменную U p p e r c a se равной FALSE (это
значение по умолчанию).
Необязательные аргументы также позволяют определить значение по умолчанию не
посредственно в объявлении (вместо тестирования с помощью функции I s M is s in g ).
Приведенная в качестве примера функция может быть в таком случае переписана в сле
дующем виде.
F u n ction USER(Optional U ppercase As B oolean = F a lse ) '
' As S tr in g
I f U ppercase = True Then
USER = U C a s e ( A p p lic a tio n .U s e r N a m e )
E lse
USER = A p p lic a tio n .U s e r N a m e
End I f
End F u n c tio n
Если аргумент не передается, значение U p p e r c a se автоматически устанавливается
в F a ls e . Этот подход имеет существенное преимущество: вам совершенно не нужно
использовать вместо четко заданного типа тип V a r ia n t. В то же время в данном случае
не существует метода узнать, передал ли пользователь аргумент или же он был подстав
лен по умолчанию.
Все приведенные ниже формулы являются правильными (и первые две выдают оди
наковый результат).
=USER()
=USER(ЛОЖЬ)
=USER(ИСТИНА)
Использование неопределенного количества
аргументов
В некоторых функциях рабочего листа Excel используется неопределенное количест
во аргументов. Примером такой функции может быть функция СУММ, имеющая следую
щий синтаксис:
=СУММ( число! ;число2 . . . )
640 Часть VI. Разработка пользовательских функций
Первый аргумент обязателен, а после него можно указать до 29 аргументов. Ниже
приведен пример формулы, в которой применяется функция СУММ с четырьмя аргумен
тами в форме диапазонов.
=СУММ(A I :А 5 ; C l : С 5; E l : Е 5 ; G l :G5) *
Типы аргументов могут быть как одинаковыми, так и разными. В следующем приме
ре передаются три аргумента — диапазон, значение и оператор:
=СУММ( A I :А 5 ; 1 2 ; 2 4 * 3 )
Можно создать собственную функцию с неопределенным количеством аргументов.
Суть состоит в том, чтобы задать массив в качестве последнего (или единственного) аргу
мента с ключевым словом ParamArray.
Примечание
Ключевое слово Param A rray можно применить только к последнему аргу
менту процедуры. Он всегда имеет тип v a r i a n t , и это всегда необязатель
ный атрибут (хотя ключевое слово O p t io n a l и не задается).
Простой пример использования неопределенных аргументов
Ниже приведен текст функции, которая может принимать любое количество одно
значных аргументов. Функция возвращает сумму аргументов.
F u n c tio n SIMPLESUM(ParamArray a r g l i s t O As V arian t) i
As D ouble
Dim a r g a s V a r ia n t
For Each arg In a r g l is t
SIMPLESUM = SIMPLESUM + a r g
Next arg
End F u n c tio n
Приведенная ниже формула возвращает сумму аргументов-ячеек.
=SIMPLESUM(AI;А 5;1 2 )
Наиболее серьезное ограничение функции SIMPLESUM заключается в том, что она не
работает с несколькими диапазонами. В приведенной ниже версии функции данный не
достаток устранен.
F u n c tio n SIMPLESUM(ParamArray a r g l i s t O As V a r ia n t)
As D ouble
Dim a r g a s V a r ia n t
Dim c e l l a s R ange
For Each arg In a r g l is t
I f TypeNam e(arg) = "Range" Then
For Each c e l l In arg
SIMPLESUM = SIMPLESUM + c e l l
Next c e ll
E lse
SIMPLESUM = SIMPLESUM + a r g
End I f
Next arg
End F u n c tio n
Эта функция проверяет каждую запись массива A r g l i s t . Если запись является диапазо
ном, то в коде выполняется цикл For E ach -N ext, выполняющий суммирование ячеек.
Даже эту версию нельзя считать полноценной заменой функции Excel СУММ. Про
верьте представленную функцию в работе, используя различные типы аргументов, и вы
Глава 25. Примеры пользовательских функций VBA 641
увидите, что функция не работает, если все аргументы не являются значениями или
ссылкой на диапазон. Если аргумент состоит из целого столбца, то функция работает
очень медленно, поскольку она просчитывает все ячейки, в том числе и пустые.
Имитация функции сумм
В этом разделе представлена функция, которая называется MYSUM. В отличие от
функции SIMPLESUM, о которой говорилось в предыдущем разделе, MYSUM может стать
полноценной заменой функции Excel СУММ.
Перед тем как рассмотреть код функции MYSUM, проанализируем функцию Excel
СУММ. Она может принимать любое количество аргументов (даже пропущенные аргу
менты). Аргументами могут быть цифры, ячейки, диапазоны, текстовое выражение
цифр, логические значения и даже внедренные функции. Например, рассмотрим сле
дующую формулу:
=СУММ(А 1; 5 ; "6" ; ; ИСТИНА; КВКОРЕНЬ (4 ) ; В 1 :В5 ; { 1; 3 ; 5 } )
Это правильная формула, и она содержит все типы аргументов, перечисленные ниже
в порядке появления в формуле:
• ссылка на одну ячейку (А1);
• константа (5);
• строка в виде точного значения (" 6");
• пропущенный аргумент;
• логическое значение (ИСТИНА);
• выражение с другой функцией (КВКОРЕНЬ);
• ссылка на диапазон (В 1 : В5);
• маССИВ ( { 1 ; 3 ; 5 } ).
Далее приведен листинг функции MYSUM, в которой используются все эти типы аргу
ментов.
F u n c tio n MySum(Param A rray a r g s () As V a r ia n t) As V a r ia n t
' Эмуляция функции р а б о ч е г о л и с т а СУММ
1 Объявления переменных
Dim i As V a r ia n t
Dim TempRange As R an ge, c e l l As R ange
Dim ECode As S t r i n g
Dim m, n
MySum = 0
' Обработка каждого из аргументов
For i = 0 То U B ound(args)
1 Пропуск отсутствующих аргументов
I f Not I s M is s in g ( a r g s ( i) ) Then
1 Аргумент присутствует
S e le c t Case T yp eN am e(args(i))
C ase "Range"
' Создание временного диапазона для обработки
' целых строк и столбцов
S e t TempRange = I n t e r s e c t ( a r g s ( i ) . _
P a ren t.UsedRange, a r g s (i ))
For Each c e l l In TempRange
I f I s E r r o r ( c e ll) Then
MySum = c e l l ' возвращ аем ошибку
642 Часть VI. Разработка пользовательских функций
E x it F unction
End I f
I f c e l l = T rue Or c e l l = F a l s e Then
MySum = MySum + 0
E lse
I f I s N u m e r i c ( c e l l ) Or I s D a t e ( c e l l ) Then _
MySum = MySum + c e l l
End I f
Next c e ll
Case " V a ria n t()"
n = a rg s(i)
For m = LBound(n) To UBound(n)
MySum = MySum(MySum, n (m )) 'рекурсивны й вызов
Next m
Case "Null" 'игнорируем пустые значения
C ase "Error" 'возвращ аем ошибку
MySum = a r g s ( i )
E x it F unction
Case "Boolean"
' Проверяем константы True и компенсируем их
I f a r g s ( i ) = "True" Then MySum = MySum + 1
C ase "Date"
MySum = MySum + a r g s ( i )
Case E lse
MySum = MySum + a r g s ( i )
End S e l e c t
End I f
Next i
End F u n c tio n
Компакт-диск
Эта функция содержится на прилагаемом компакт-диске в файле mysum
fun ction .xlsm (C h ap ter25_R U S .xlsm ).
Изучая код функции MYSUM, учтите следующее.
• Пропущенные аргументы (выявляемые функцией I sMi s s in g ) просто игнорируются.
• Для выяснения типа аргумента в процедуре используется функция VBA Т у р е -
Name (R ange, E r r o r или др.). Каждый тип аргумента обрабатывается по-своему.
• Для аргумента диапазона функция обрабатывает каждую ячейку диапазона и до
бавляет ее значение к общему значению.
• Типом функции является V a r i a n t , поскольку она должна возвращать ошибку,
если один из аргументов является значением ошибки.
• Если аргумент содержит ошибку, функция MYSUM вернет ошибку— как и функ
ция Excel СУММ.
• Функция Excel СУММ предполагает, что текстовая строка имеет нулевое значение,
если в ней не содержится числовая константа (т.е. фактическое значение, а не пе
ременная). Следовательно, MySum добавляет значение ячейки только в том случае,
если его можно вычислить арифметически (для этого используется функция Excel
IsN um eric).
• При работе с логическими аргументами использован хитрый прием. Чтобы MySum
могла заменить СУММ, проверяется наличие значения ИСТИНА в списке аргумен-
Глава 25. Примеры пользовательских функций VBA 643
тов и компенсируется разность (в VBA истинному значению соответствует число
-1 , в то время как в Excel просто единица; это несоответствие компенсируется пу
тем добавления двойки).
• Для аргументов диапазона используется инструкция I n t e r s e c t , который созда
ет временный диапазон, состоящий из пересечения диапазонов на одном и на раз
ных листах. При этом учитываются случаи, когда аргумент диапазона состоит из
целой строки или столбца, для вычисления которых потребуется целая вечность.
У вас, возможно, возникнут вопросы по поводу относительной производительности
СУММи MySum. Естественно, MySum работает намного медленнее, но насколько медлен
но, зависит от производительности системы и самих формул. В моей системе рабочий
лист с тысячей формул СУММ вычисляется мгновенно. После того как я заменил функ
цию СУММ на MySum, на пересчет потребовалось 12 секунд. Функция MySum у вас, воз
можно, работает немного быстрее, но все же скорости этих двух функций несравнимы.
Надеюсь также, что вы понимаете: целью этого примера было вовсе не создание аль
тернативной функции СУММ, а демонстрация создания пользовательских функций рабо
чего листа, которые работают и выглядят, как встроенные функции Excel.
Часть
Приложения
В этой части...
Приложение А
Описание функций Excel
Приложение Б
Пользовательские числовые форматы
Приложение В
Дополнительные ресурсы, посвященные Excel
Приложение Г
Содержимое прилагаемого компакт-диска
Приложение
Описание
функций Excel
В этом приложении вы найдете полный список функций рабочего листа Excel (кроме
текстовых функций, работающих с экзотическими алфавитами, типа фуригана, катакана,
таиландского и др.). Все функции перечислены в алфавитном порядке и разбиты на кате
гории, используемые в диалоговом окне вставки функции. Для каждой категории выде
лена отдельная таблица.
Чтобы получить более подробную информацию о конкретной функции, в том числе
о ее аргументах, выделите ее в списке диалогового окна вставки функции и щелкните на
ссылке Справка по этой функции.
Поскольку названия функций в русской и английской версиях разные, а при использова
нии функций рабочего листа в пользовательских функциях VBA требуется исключительно
английский вариант, в таблицах приводятся оба варианта названия функции. Ряд функций су
ществует только в английском варианте (в частности, это касается математических функций).
Звездочкой отмечены функции, введенные в Excel 2010.
Компакт-диск
Список функций Excel приведен также в рабочей книге w o rk s h e e t f u n c
t i o n s . x l s x на прилагаемом компакт-диске.
Таблица А. 1. Функции категории Недавно использовались (устаревшие,
оставлены для совместимости версий)
Функция Описание
FPACn(FD IST) Возвращает F-распределение вероятности
FPACnOBP(FIN V) Возвращает обратное значение F-распределения вероятности
Z T E C T (Z T E S T ) Возвращает одностороннее значение вероятности z-теста
БЕТАОБР (BETAINV) Возвращает обратную интегральную функцию бета-распределения
БЕТАРАСП (BETADIST) Возвращает интегральную функцию бета-распределения
БИНОМРАСП (BINO M DIST) Возвращает биномиальное распределение
ВЕЙ Б УЛ Л (W EIBULL) Возвращает распределение Вейбулла
648 Часть VII. Приложения
Окончание табл. А. 1
Функция Описание
Г А М М А О Б Р (GAMMAINV) Возвращает обратное интегральное гамма-распределение
ГА М М А Р А С П (GAMMADIST) Возвращает гамма-распрепределение
ГИ П ЕРГЕО М ЕТ Возвращает гипергеометрическое распределение
(HYPGEOMDIST)
Д И С П (VAR) Оценивает дисперсию по выборке, игнорируя логические значе
ния и текст
Д И С П Р (VARP) Вычисляет дисперсию для генеральной совокупности
Д О В Е Р И Т (CONFIDENCE) Возвращает доверительный интервал для среднего значения по
генеральной совокупности
К В А Р Т И Л Ь (QUARTILE) Возвращает квартиль набора данных
К О В А Р (COVAR) Возвращает ковариацию, т.е. среднее произведений парных
отклонений
КРИТБИНОМ (CRITBINOM) Возвращает наименьшее значение, для которого интегральное
биномиальное распределение равно заданному условию или
меньше его
Л О Г Н О Р М О Б Р (LOGINV) Возвращает обратное логнормальное распределение
Л О ГН О РМ РА СП Возвращает логнормальное интегральное распределение
(LOGNORMDIST)
М О Д А (MODE) Возвращает наиболее частое значение в наборе данных
Н О Р М О Б Р (NORMINV) Возвращает обратное нормальное интегральное распределение
Н О Р М Р А С П (NORMDIST) Возвращает нормальное интегральное распределение
Н О Р М С Т О Б Р (NORMSINV) Возвращает обратное значение стандартного нормального инте
грального распределения
Н О Р М С Т Р А С П (NORMSDIST) Возвращает стандартное нормальное интегральное распределение
ОТРБИНОМРАСП Возвращает отрицательное биномиальное распределение
(NEGBINOVDIST)
ПЕРСЕНТИЛЬ Возвращает k-ю персентиль для значений диапазона
(PERCENTILE)
ПРОЦЕНТРАНГ Возвращает процентную норму значения в наборе данных
(PERCENTRANK)
П У А С С О Н (POISSON) Возвращает распределение Пуассона
Р А Н Г (RANK) Возвращает ранг числа в списке чисел
С Т А Н Д О Т К Л О Н (STDEV) Оценивает стандартное отклонение выборки
С Т А Н Д О ТК Л О Н П (STDEVP) Вычисляет стандартное отклонение по генеральной совокупности
С Т Ь Ю Д Р А С П (TDIST) Возвращает t -распределение Стьюдента
С Т Ь Ю Д Р А С П О Б Р (TINV) Возвращает обратное t-распределение Стьюдента
Т Т Е С Т (TTEST) Возвращает вероятность, соответствующую t-тесту Стьюдента
Ф Т Е С Т (FTEST) Возвращает результат F-теста
Х И 2 0 Б Р (CHIINV) Возвращает обратное значение односторонней вероятности
распределения хи-квадрат
Х И 2 Р А С П (CHIDIST) Возвращает одностороннюю вероятность распределения
хи-квадрат
Х И 2 Т Е С Т (CHITEST) Возвращает результат тестирования независимости выборок по
критерию хи-квадрат
Э К С П Р А С П (EXPONDIST) Возвращает експоненциальное распределение
Приложение А. Описание функций Excel 649
Все функции категории Недавно использовались имеют в Excel 2010 новую версию с
другим именем. Все новые версии приведены в категории статистических функций.
Таблица А.2. Функции кубов данных
Функция Описание
К У Б З Н А Ч Е Н И Е (CUBEVALUE) Возвращает агрегированное значение из куба
КУБМНОЖ (CUBESET) Определяет вычисляемое множество элементов или
кортежей
КУБПОРЭЛЕМЕНТ ( Возвращает n-й ранжированный элемент множества
(CUBERANKEDMEMBER) Возвращает значение свойства элемента из куба
КУБСВОЙСТВОЭЛЕМЕНТА Возвращает количество элементов множества
(CUBEMEMBERPROPERTY) Возвращает элемент или кортеж из иерархии куба
Возвращает свойство ключевого индикатора произ
КУБЧИСЛОЭЛМНОЖ водительности и отображает его имя в ячейке
(CUBESETCOUNT)
К У Б Э Л Е М Е Н Т (CUBMEMBER)
КУБЭЛЕМЕНТКИП
(CUBEKPIMEMBER)
Таблица А.З. Функции баз данных
Функция Описание
Б Д Д И С П (DVAR) Вычисляет дисперсию по выборке из выделенной части базы
Б Д Д И С П П (DVARP) данных
Б Д П Р О И З В ЕД (DPRODUCT)
Б Д С У М М (DSUM) Вычисляет дисперсию по генеральной совокупности из вы
Б И З В Л Е Ч Ь (DGET) бранных элементов базы данных
Б С Ч Ё Т (DCOUNT)
Перемножает значения из столбца списка или базы данных,
Б С Ч Ё Т А (DCOUNTA) удовлетворяющие заданному критерию
Д М А К С (DMAX)
Д М И Н (DMIN) Суммирует числа в столбце списка или базы данных, которые
Д С Р З Н А Ч (DAVERAGE) удовлетворяют заданному критерию
Д С Т А Н Д О Т К Л (DSTDEV)
Д С Т А Н Д О Т К Л П (DSTDEVP) Извлекает одну запись из столбца списка или базы данных,
которая удовлетворяет определенному критерию
Подсчитывает количество ячеек, содержащихся в столбце
списка или базы данных и удовлетворяющих определенным
критериям
Подсчитывает заполненные ячейки в столбце списка или базы
данных по заданному критерию
Возвращает максимальное значение из столбца списка или
базы данных, удовлетворяющее заданному критерию
Возвращает минимальное значение из столбца списка или ба
зы данных, удовлетворяющее заданному критерию
Возвращает среднее значение из выделенных элементов базы
данных
Вычисляет стандартное отклонение по выборке из выделен
ной части базы данных
Вычисляет стандартное отклонение по генеральной совокуп
ности выбранных элементов базы данных
650 Часть VII. Приложения
Таблица А.4. Функции работы с датами и временем
Функция Описание
ВРЕМЗНАЧ Возвращает время в числовом формате для времени, заданно
(TIMEVALUE) го текстовой строкой
ВРЕМЯ (TIME) Возвращает числовое значение в формате времени
ГОД(YEAR)
ДАТА(DATE) Возвращает год — целое число от 1900 до 9999
ДАТАЗНАЧ
(DATEVALUE) Возвращает число, представляющее дату в формате Excel
ДАТАМЕС (EDATE)
Преобразует дату из текстового формата в числовой формат
ДЕНЬ (DAY) даты-времени Excel
ДЕНЬНЕД(WEEKDAY) Возвращает порядковый номер даты, которая отстоит на за
ДНЕЙ360(DAYS360) данное количество месяцев перед или после начальной даты
Возвращает число месяца
ДОЛЯГОДА(YEARFRAC) Возвращает порядковый номер дня недели для заданной даты
Вычисляет количество дней между двумя датами с учетом года
КОНМЕСЯЦА (EOMONTH) в 360 дней
Возвращает долю года, которую составляет количество дней
МЕСЯЦ (MONTH) между двумя заданными датами
МИНУТЫ (MINUTE) Возвращает порядковый номер последнего дня месяца, отстояще
НОМНЕДЕЛИ(WEEKNUM) го от заданной даты на определенное число месяцев (до или после)
РАБДЕНЬ(WORKDAY) Преобразует числовое значение в месяцы
Преобразует числовое значение в минуты
РАБДЕНЬ.МЕЖД Возвращает порядковый номер недели в году
(WORKDAY. INTL)* Возвращает порядковый номер даты, отстоящей на определен
СЕГОДНЯ (TODAY) ное число дней от заданной
СЕКУНДЫ(SECOND) Возвращает порядковый номер даты, отстоящей вперед или на
ТДАТА(NOW) зад на заданное количество рабочих дней
ЧАС(HOUR) Возвращает текущую дату в формате даты
ЧИСТРАБДНИ Преобразует числовое значение в секунды
(NETWORKDAYS) Возвращает текущую дату и время в формате даты и времени Excel
ЧИСТРАБДНИ.МЕЖД Преобразует числовое значение в часы
(NETWORKDAYS. INTL)* Возвращает количество полных рабочих дней междудвумя датами
Возвращает количество рабочих дней между двумя датами
Таблица А.5. Инженерные функции
Функция Описание
БЕССЕЛЬ. I (BESSELI) Возвращает модифицированную функцию Бесселя ln(x)
БЕССЕЛЬ. J (BESSELJ) Возвращает функцию Бесселя Jn(x)
БЕССЕЛЬ. К (BESSELK) Возвращает модифицированную функцию Бесселя Кп(х)
БЕССЕЛЬ. Y (BESSELY) Возвращает функцию Уп(х)
ВОСЬМ. В . ДВ (OCT2BIN) Преобразует восьмеричное число в двоичное
ВОСЬМ. В . ДЕС(OCT2DEC) Преобразует восьмеричное число в десятеричное
ВОСЬМ.В.ШЕСТИ Преобразует восьмеричное число в шестнадцатеричное
(ОСТ2НЕХ)
Приложение А. Описание функций Excel 651
Окончание табл. А.5
Функция Описание
ДВ. В . ВОСЬМ (BIN20CT) Преобразует двоичное число в восьмеричное
ДВ.В.ДЕС (BIN2DEC) Преобразует двоичное число в десятичное
ДВ. В . ШЕСТИ (BIN2HEX) Преобразует двоичное число в шестнадцатеричное
ДЕЛЬТА (DELTA) Проверяет, равны ли два значения
ДЕС. В . ВОСЬМ (DEC20CT) Преобразует десятичное число в восьмеричное
ДЕС.В.ДВ (DEC2BIN) Преобразует десятичное число в двоичное
ДЕС. В . ШЕСТИ (DEC2HEX) Преобразует десятичное число в шестнадцатеричное
ДФОШ(ERFC)* Возвращает дополнительную функцию ошибки
ДФОШ. ТОЧНО Возвращает дополнительную функцию ошибки, проинтегриро
(ERFC.PRECISE) ванную от текущего значения до бесконечности
КОМПЛЕКСИ (COMPLEX) Преобразует действительный и мнимый коэффициенты в ком
плексное число
МНИМ.ABS (IMABS) Возвращает абсолютное значение (модуль) комплексного числа
МНИМ.COS (IMCOS) Возвращает косинус комплексного числа
МНИМ.EXP (IMEXP) Возвращает экспоненту комплексного числа
МНИМ. LN (IMLN) Возвращает натуральный логарифм комплексного числа
МНИМ. LOG10 (IMLOG10) Возвращает десятичный логарифм комплексного числа
МНИМ. LOG2 (IMLOG2) Возвращает двоичный логарифм с комплексного числа
МНИМ.SIN (IMSIN) Возвращает синус комплексного числа
МНИМ.АРГУМЕНТ Возвращает аргумент q — угол, выраженный в радианах
(IMARGUMENT)
МНИМ. ВЕЩ(IMREAL) Возвращает коэффициент вещественной части комплексного числа
МНИМ.ДЕЛ (IMDIV) Возвращает частное двух комплексных чисел
МНИМ.КОРЕНЬ (IMSQRT) Возвращает квадратный корень комплексного числа
МНИМ. ПРОИЗВЕЛ Возвращает произведение двух комплексных чисел
(IMPRODUCT)
МНИМ.РАЗН (IMSUB) Возвращает разность двух комплексных чисел
МНИМ.СОПРЯЖ Возвращает сопряженное комплексное число
(IMCONJUGATE)
МНИМ.СТЕПЕНЬ Возвращает комплексное число, возведенное в степень целого
(IMPOWER) числа
МНИМ. СУММ(IMSUMM) Возвращает сумму комплексных чисел
МНИМ. ЧАСТЬ Возвращает мнимую часть комплексного числа
(IMAGINARY)
ПОРОГ (GESTEP) Проверяет, больше ли число, чем пороговое значение
ПРЕОБР(CONVERT) Преобразует число из одной системы исчисления в другую
ФОШ(ERF) Возвращает функцию ошибки
ФОШ. ТОЧНО Возвращает точную функцию ошибки
(ERF. PRECISE)*
ШЕСТИ. В . ВОСЬМ Преобразует шестнадцатеричное значение в восьмеричное
(НЕХ20СТ)
ШЕСТИ. В . ДВ (HEX2DEC) Преобразует шестнадцатеричное значение в двоичное
ШЕСТИ. В . ДЕС (HEX2DEC) Преобразует шестнадцатеричное значение в десятичное
652 Часть VII. Приложения
Таблица А.6. Финансовые функции
Функция Описание
АМОРУВ(A M O R L IN C ) Возвращает величину пропорционально распределенной амор
тизации для каждого учетного периода (коэффициент аморти
АМОРУМ(AM O R D EGR C) зации зависит от срока эксплуатации актива)
Возвращает величину пропорционально распределенной амор
АПЛ (S L N ) тизации для каждого учетного периода
Возвращает величину амортизации активов за один период,
АСЧ (SYD ) рассчитанную линейным методом
БЗРАСПИС(F V S C H E D U L E ) Возвращает величину амортизации активов за определенный
период, рассчитанную методом суммы годовых чисел
БС (FV )
ВСД (IR R ) Возвращает будущую стоимость исходного капитала после
применения серии сложных процентных ставок
ДДОБ (DDB)
Возвращает будущую стоимость инвестиции
ДЛИТ (D U R A T IO N )
Возвращает внутреннюю процентную ставку для ряда потоков
ДНЕЙКУПОН (C O U P D A Y S ) денежных средств
ДНЕЙКУПОНДО Возвращает величину амортизации актива для заданного пе
риода, рассчитанную методом двойного уменьшения остатка
(COUPDAYBS) или иного явно указанного метода
Возвращает продолжительность Макалея для ценных бумаг с
ДНЕЙКУПОНПОСЛЕ периодически выплачиваемым процентом
(COUPDAYSNC) Возвращает количество дней действия облигации с учетом рас
четного дня по фьючерсному контракту
ДОХОД ( Y I E L D )
Возвращает количество дней от начала действия облигации до
ДОХОДКЧЕК расчетного дня по фьючерсному контракту
(TBILLYIELD ) Возвращает количество дней от расчетного дня по фьючерсно
му контракту до начала действия следующей облигации
ДОХОДПЕРВНЕРЕГ
Возвращает доходность ценных бумаг с периодической выпла
(O D D FY IELD ) той процентов
ДОХОДПОГАШ( Y I E L D M A T ) Возвращает доходность по казначейскому векселю
ДОХОДПОСЛНЕРЕГ Возвращает доход от ценных бумаг с нерегулярным первым пе
риодом
(O D D Y IE LD )
Возвращает годовой доход от ценных бумаг с выплатой процен
ДОХОДСКИДКА тов по окончании срока
Возвращает доход от ценных бумаг с нерегулярным последним
(Y IE LD D IS C ) периодом
ИНОРМА( I N T R A T E ) Возвращает годовой доход по ценным бумагам, на которые
сделана скидка, например, по казначейским векселям
КПЕР (N PER)
КУПОНПРЕД (C O U P PC D ) Возвращает процентную ставку полностью инвестированных
ценных бумаг
КУПОНСЛЕД (CO UPN CD )
Возвращает количество периодов инвестирования
МВСД (M IRR)
Возвращает дату действия предыдущей облигации перед рас
четным днем по фьючерсному контракту
Возвращает дату действия следующей облигации после расчет
ного дня по фьючерсному контракту
Возвращает внутреннюю ставку доходности, где положительные и
отрицательные денежные потоки учитываются по разным ставкам
Приложение А. Описание функций Excel 653
Продолжение табл. А.6
Функция Описание
МДЛИТ (MDURATION) Возвращает модифицированный срок действия Макалея для
ценных бумаг с номинальной стоимостью 100 рублей
НАКОПДОХОД(ACCRINT)
НАКОПДОХОДПОГАШ Возвращает накопленный доход по ценным бумагам с периоди
(ACCRINTM) чески выплачиваемым процентом
НОМИНАЛ (NOMINAL)
ОБЩДОХОД (CUMPRINC) Возвращает накопленный доход для активов, процент с которых
выплачивается в конце срока
ОБЩПЛАТ(CUMIPMT)
ОСПЛТ (РРМТ) Возвращает годовую номинальную процентную ставку
ПЛТ (РМТ) Возвращает кумулятивную сумму основного долга между двумя
периодами
ПОЛУЧЕНО(RECEIVED)
Возвращает суммарный процент, выплаченный между двумя
ПРОЦПЛАТ(ISPMT) периодами
ПРПЛАТ(IPMT) Возвращает величину выплат по основной сумме инвестиции за
ПС (PV) данный период на основе постоянной процентной ставки и пе
риодических платежей
ПУО (VDB)
Возвращает величину выплаты за один период годовой ренты на
РАВНОКЧЕК(TBILLEQ) основе постоянной процентной ставки и периодических платежей
РУБЛЬ. ДЕС(DOLLARDE) Возвращает сумму, полученную по истечении срока за полно
РУБЛЬ. ДРОБЬ стью инвестированные ценные бумаги
(DOLLARFR)
СКИДКА(DISC) Возвращает проценты, выплачиваемые за определенный инве
СТАВКА(RATE) стиционный период
ФУО (DB)
ЦЕНА (PRICE) Возвращает сумму выплат процентов от инвестирования за оп
ределенный период
ЦЕНАКЧЕК(TBILLPRICE)
ЦЕНАПЕРВНЕРЕГ Возвращает приведенную к настоящему моменту стоимость ин
(ODDFPRICE) вестиции, т.е. общую сумму, которая на данный момент равно
ЦЕНАПОГАШ(PRICEMAT) ценна сумме будущих выплат
Возвращает величину амортизации имущества для заданного
периода при использовании метода двойного уменьшения ос
татка или иного явно указанного метода
Возвращает эквивалентный облигации доход по казначейскому
векселю
Преобразует цену в рублях в виде дроби в цену в рублях в виде
десятичного числа
Преобразует цену в рублях в виде десятичного числа в цену в
рублях в виде дроби
Возвращает ставку дисконтирования для ценных бумаг
Возвращает процентную ставку за один период
Возвращает величину амортизации актива для заданного перио
да, рассчитанную методом фиксированного уменьшения остатка
Возвращает цену за 100 рублей номинальной стоимости ценных
бумаг, по которым выплачивается периодический процент
Возвращает цену за номинальную стоимость 100 рублей по ка
значейскому векселю
Возвращает цену ценных бумаг номинальной стоимостью 100
рублей с нерегулярным первым периодом
Возвращает цену за 100 рублей номинальной стоимости ценных
бумаг с выплатой процента в срок погашения
654 Часть VII. Приложения
Функция Окончание табл. А.6
ЦЕНАПОСЛНЕРЕГ Описание
(ODDLPRICE)
ЦЕНАСКИДКА Возвращает цену ценных бумаг номинальной стоимостью 100
(PRICEDISC) рублей с нерегулярным последним периодом
ЧИСЛКУПОН (COUPNUM)
Возвращает цену за 100 рублей номинальной стоимости ценных
Ч И С Т В Н Д О Х О Д (XIRR) бумаг, на которые сделана скидка
ЧИСТНЗ (XNPV) Возвращает количество облигаций, подлежащих оплате, между
расчетным днем по фьючерсному контракту и окончанием срока
ЧПС (NPV)
Возвращает внутреннюю ставку доходности для графика денеж
Э Ф Ф Е К Т (EFFECT) ных потоков
Возвращает чистую приведенную стоимость для графика де
нежных потоков
Возвращает величину чистой приведенной стоимости инвести
ций на основе серий периодических денежных потоков и дис
контных ставок
Возвращает эффективную (фактическую) годовую процентную
ставку
Таблица А.7. Информационные функции
Функция Описание
ЕЛОГИЧ (ISLOGICAL) Возвращает истина, если значение логическое
ЕНД (ISNA) Возвращает истина, если значение представлено ошибкой #н/д
ЕНЕТЕКСТ (ISNONTEXT) Возвращает истина, если значение не является текстом
ЕНЕЧЕТ (ISODD) Возвращает истина, если число нечетное
ЕОШ (ISERR) Возвращает истина, если значение представлено любой ошиб
кой, кроме #н/д
ЕОШИБКА (ISERROR) Возвращает истина, если значение представлено любой ошибкой
ЕПУСТО (ISBLANK) Возвращает истина, если ячейка пустая
ЕССЫЛКА (ISREF) Возвращает истина, если значение является ссылкой
ЕТЕКСТ (ISTEXT) Возвращает истина, если значение является текстом
ЕЧЕТН (ISEVEN) Возвращает истина, если число четное
ЕЧИСЛО (ISNUMBER) Возвращает истина, если значение является числом
ИНФОРМ (INFO) Возвращает информацию о текущей операционной системе
НД (NA) Возвращает значение ошибки #н/д
ТИП (TYPE) Возвращает число, которое обозначает тип значения
Т И П .ОШИБКИ Возвращает число, соответствующее типу ошибки
(ERROR.TYPE)
4(N) Возвращает значение, преобразованное в число
Я Ч Е Й К А (CELL) Возвращает информацию о форматировании, расположении
и содержимом ячейки
Приложение А. Описание функций Excel 655
Таблица А.8. Логические функции
Функция Описание
ЕСЛИ (IF) Используется для выполнения логической проверки
ЕСЛИОШИБКА(IFERROR)
Возвращает заданное значение, если вычисление формулы
И (AND) вызывает ошибку, в противном случае возвращает результат
ИЛИ (OR) формулы
ИСТИНА (TRUE) Возвращает истина, если все его аргументы истина
ЛОЖЬ (FALSE)
НЕ (NOT) Возвращает истина, если один из аргументов истина
Возвращает логическое значение истина
Возвращает логическое значение ложь
Обращает логическое значение аргумента
Таблица А.9. Функции работы со ссылками и массивами
Функция Описание
АДРЕС(ADDRESS) Возвращает ссылку на одну ячейку рабочего листа в виде текста
ВПР (VLOOKUP) Обращается к первому столбцу массива и перемещается по стро
кам, чтобы возвратить значение соответствующей ячейки
ВЫБОР(CHOOSE) Выбирает значение из списка значений
ГИПЕРССЫЛКА Создает ярлык, щелчок на котором открывает документ на жест
(HYPERLINK) ком диске, сервере или в Интернете
ГПР (HLOOKUP) Обращается к верхней строке таблицы и возвращает значение то
го же столбца из заданной строки
ДВССЫЛ(INDIRECT) Возвращает ссылку, представленную текстовым значением
ДРВ (RTD) Извлекает данные реального времени из программы, поддержи
вающей автоматизацию СОМ
ИНДЕКС(INDEX) Использует индекс для выбора значения по ссылке или из массива
ОБЛАСТИ (AREAS) Возвращает количество областей в ссылке
ПОИСКПОЗ (MATCH) Возвращает позицию элемента в ссылке или массиве
ПОЛУЧИТЬ. ДАННЫЕ. Возвращает данные, хранимые в сводной таблице
СВОДНОЙ. ТАБЛИЦЫ
(GETPIVIOTDATA) Ищет значения в векторе или массиве
ПРОСМОТР (LOOKUP) Возвращает смещение ссылки относительно данной ссылки
СМЕЩ(OFFSET) Возвращает номер столбца ссылки
СТОЛБЕЦ (COLUMN) Возвращает номер строки ссылки
СТРОКА (ROW) Возвращает транспонированный массив
ТРАНСП(TRANSPOSE) Возвращает количество столбцов в ссылке
ЧИСЛСТОЛБ
(COLUMNS) Возвращает количество строк в ссылке
ЧСТРОК (ROWS)
656 Часть VII. Приложения
Таблица А. 10. Математические функции
Функция Описание
ABS Возвращает абсолютное значение числа
ACOS Возвращает арккосинус числа
ACOSH Возвращает гиперболический косинус числа
AS IN Возвращает арксинус числа
ASINH Возвращает гиперболический синус числа
ATAN Возвращает арктангенс числа
ATAN2 Возвращает арктангенс для координат х и у
ATANH Возвращает гиперболический тангенс числа
COS Возвращает косинус числа
COSH Возвращает гиперболический косинус числа
EXP Возвращает е в заданной степени
ISO . OKPBBEPX Округляет число вверх до ближайшего целого или кратного
(ISO. CEILING)* указанному значению с учетом заданной точности
LN Возвращает натуральный логарифм числа
LOG Возвращает логарифм числа по заданному основанию
LOG10 Возвращает десятичный логарифм числа
SIN Возвращает синус данного угла
SINH Возвращает гиперболический синус числа
TAN Возвращает тангенс числа
TANH Возвращает гиперболический тангенс числа
Возвращает итоговое значение списка или базы данных
АГРЕГАТ (AGGREGATE)*
ГРАДУСЫ (DEGREES) Преобразует радианы в градусы
ДВФАКТР(FACTDOUBLE) Возвращает двойной факториал числа
ЗНАК (SIGN)
КОРЕНЬ (SQRT) Возвращает знак числа
КОРЕНЫ1И (SQRTPl) Возвращает положительный квадратный корень
МОБР (MINVERSE)
МОПPEД (MDETERM) Возвращает квадратный корень числа к
МУЛЬТИНОМ (MULTINOMIAL) Возвращает обратную матрицу массива
МУМНОЖ (mmult) Возвращает определитель матрицы массива
НЕЧЕТ (ODD) Возвращает мультиномиальный коэффициент множества чисел
Возвращает результат умножения двух матриц
НОД(GCD)
HOK (LCM) Округляет число до ближайшего нечетного числа
Возвращает наибольший общий делитель
OKPBBEPX (CEILING)
Возвращает наименьший общий множитель
,
Округляет число до ближайшего целого или до ближайшего
OKPBBEPX.ТОЧНО кратного
(CEILING. PRECISE)* Округляет число до ближайшего целого или кратного указан
ному значению вне зависимости от знака
0КРВНИЗ(FLOOR) Округляет число в сторону нуля
0КРВНИЗ. ТОЧНО
(FLOOR. PRECISE)* Округляет число вниз до ближайшего целого или кратного
ОКРУГЛ (ROUND) указанному значению вне зависимости от знака
Округляет число до определенного количества цифр
Приложение А. Описание функций Excel 657
Окончание табл. А. 10
Функция Описание
О К Р У Г Л В В Е Р Х (ROUNDUP) Округляет число в сторону увеличения его абсолютного значения
О К РУ ГЛ ВН И З (ROUNDDOWN)
Округляет число до определенного количества разрядов
О К Р У ГЛ Т (MROUND) в сторону нуля
О С Т А Т (MOD)
О ТБР (TRUNC) Возвращает число, округленное до указанного разряда
ПИ (P I)
ПРОИЗВЕЛ (PRODUCT) Возвращает остаток от деления
ПРОМ ЕЖ УТОЧНЫ Е.ИТОГИ
(SUBTOTAL) Урезает число до целого
РАДИАНЫ (RADIANS)
РИМСКОЕ (ROMAN) Возвращает число к
РЯД . СУММ(SERIESSUM )
СЛУЧМЕЖ ДУ(RANDBETWEEN) Умножает аргументы *
СЛЧИС (RAND)
С Т ЕП Е Н Ь (POWER) Возвращает промежуточную сумму списка или базы данных
СУММ (SUM)
СУММЕСЛИ (SUM IF) Преобразует градусы в радианы
СУММЕСЛИМН(SUM IFS) Преобразует арабские числа в римские в текстовом формате
СУММКВ (SUMSQ) Возвращает сумму степенного ряда, вычисленную по формуле
СУММКВРАЗН (SUMXMY2)
Возвращает случайное число между заданными числами
СУМ М ПРО ИЗВ(SUMPRODUCT)
Возвращает случайное число между нулем и единицей
СУММРАЗНКВ (SUMX2MY2)
Возвращает результат возведенного в степень числа
СУМ М СУМ М КВ(S U P X 2 P Y 2 )
Суммирует аргументы
ФАКТР (FACTR)
ЦЕЛОЕ (INT) Суммирует ячейки, удовлетворяющие одному заданному
ЧАСТНОЕ (QUOTIENT) критерию
ЧЕТН (EVEN) Суммирует диапазон ячеек, удовлетворяющих нескольким
ЧИСЛКОМБ (COMBIN) условиям
Возвращает сумму квадратов аргументов
Возвращает сумму квадратов разностей соответствующих
значений двух массивов
Возвращает сумму произведений соответствующих компо
нентов массива
Возвращает сумму разности квадратов соответствующих
значений в двух массивах
Возвращает сумму суммы квадратов соответствующих зна
чений двух массивов
Возвращает факториал числа
Округляет число в меньшую сторону до ближайшего целого
Возвращает целую часть после деления
Округляет число до ближайшего четного целого числа
Возвращает количество комбинаций для данного числа объектов
Таблица А. 11. Статистические функции
Функция Описание
F . о б р ( f . in v )* Возвращает инверсию F-распределения вероятности
F.O B P.nx( f . i n v . r t ) * Возвращает обратный правый хвост F-распределения вероятно
сти для двух наборов данных
F . расп ( f .d is t) ’ Возвращает распределение F-вероятности
658 Часть VII. Приложения
Продолжение табл. А. 11
Функция Описание
Возвращает правый хвост F-распределения вероятности для двух
F . РАСП. ПХ наборов данных
Возвращает результат F-теста
(F.D IS T.R T)* Возвращает двустороннее Р-значение z-теста
F .T E C T ( F . TEST)* Возвращает обратную функцию к интегральной функции плотно
Z .T E C T (Z . TEST)* сти бета-вероятности
Возвращает интегральную функцию плотности бета-вероятности
БЕТА . ОБР ( B E T A . I N V )‘
Возвращает наименеьшее значение, для которого интегральная
БЕТА. РАСП функция биномиального распределения меньше или равна задан
ному значению
(B E T A . DIST)* Возвращает отдельное значение биномиального распределения
БИНОМ.ОБР Возвращает распределение Вейбулла
(B IN O M . INV)* Возвращает вероятность попадания значения в диапазон между
двумя числами
БИНОМ.РАСПР Возвращает натуральный логарифм гамма-функции
Возвращает натуральный логарифм гамма-функции
(BIN O M .D IST)*
Возвращает обратное гамма-распределение
ВЕЙБУЛЛ. РАСП
Возвращает гамма-распределение
(W EIB U LL.D IST)*
Возвращает гипергеометрическое распределение
ВЕРОЯТНОСТЬ (PROB)
Вычисляет дисперсию на основе выборки, исключая логические
ГАММАНЛОГ (GAMMALN) значения и текст
ГАММАНЛОГ. ТОЧНО Вычисляет дисперсию на основе генеральной совокупности, ис
ключая логические значения и текст
(GAMMALN. PRECISE)* Вычисляет дисперсию на основе выборки, учитывая числа, логи
ческие значения и текст
ГАММА.ОБР Вычисляет дисперсию на основе генеральной совокупности, учи
тывая числа, логические значения и текст
(GAMMA. INV)* Возвращает доверительный интервал для среднего значения по
нормальной генеральной совокупности
ГАММА. РАСП Возвращает доверительный интервал для среднего генеральной
совокупности с t-распределением Стьюдента
(GAMMA. D 1ST)* Возвращает сумму квадратов отклонений
Возвращает квартиль набора данных
ГИПЕРГЕОМ. РАСП
Возвращает квартиль набора данных на основе процентиля от О
(HYPGEOM .DIST)* до 1, исключая эти числа
Возвращает квадрат корреляции коэффициента Пирсона
ДИСП . В ( V A R . S)* Возвращает среднее произведений отклонений для каждой пары
точек в двух наборах данных
ДИСП . Г ( V A R . Р)*
ДИСПА (VARA)
ДИСПРА (V A R P A )
ДОВЕРИТ.НОРМ
( C O N F I D E N C E . NORM)*
ДОВЕРИТ.СТЬЮДЕНТ
( C O N F I D E N C E . Т)*
КВАДРОТКЛ (D EV SQ )
КВАРТИЛЬ. ВКЛ
( Q U A R T I L E . INC)*
КВАРТИЛЬ . ИСКЛ
( Q U A R T I L E . ЕХС)*
КВПИРСОН (RSQ)
КОВАРИАЦИЯ. В
(C O VAR IAN CE. Р)‘
Приложение А. Описание функций Excel 659
Продолжение табл. А. 11
Функция Описание
КОВАРИАЦИЯ.Г Возвращает ковариацию — среднее произведений парных откло
(COVARIANCE.S)* нений
КОРРЕЛ (CORREL) Возвращает коэффициент корреляции междудвумя наборами данных
ЛГРФПРИБЛ (LOGEST) Возвращает параметры экспоненциального тренда
ЛИНЕЙН (LINEST) Возвращает параметры линейного тренда
Л О Г Н О Р М .ОБР Возвращает инверсию логарифмически нормального распределения
(LOGNORM.INV)*
Л О Г Н О Р М .РАСПР Возвращает интегральное логарифмическое нормальное распре
(LOGNORM. D 1ST)* деление
МАКС (МАХ) Возвращает максимальное значение из списка аргументов, про
пуская логические и текстовые значения
МАКСА (МАХА) Возвращает максимальное значение из списка аргументов, учиты
вая логические и текстовые значения
МЕДИАНА (MEDIAN) Возвращает медиану из заданных значений
МИН (MIN) Возвращает минимальное значение из списка аргументов, про
пуская логические и текстовые значения
МИНА (MINA) Возвращает минимальное значение из списка аргументов, учиты
вая логические и текстовые значения
М О Д А .НСК Возвращает вертикальный массив из наиболее часто встречаю
(MODE.MULT)* щихся значений в массиве или диапазоне данных
М О Д А .ОДН Возвращает значение моды множества данных
(MODE.SNGL)*
НАИБОЛЬШИЙ (LARGE) Возвращает к-е наибольшее значение в наборе данных
НАИМЕНЬШИЙ (SMALL) Возвращает к-е наименьшее значение набора данных
НАКЛОН (SLOPE) Возвращает наклон линейной регрессии
НОРМ.ОБР (NORM.INV)* Возвращает инверсию интегрального нормального распределения
Н О Р М .РАСП Возвращает нормальное интегральное распределение
(NORM.d i s t )*
НОРМ.СТ.ОБР Возвращает инверсию стандартного нормального интегрального
(NORM.S .INV)* распределения
НОРМ.С Т .РАСП Возвращает стандартное нормальное интегральное распределение
(NORM.S .DIST)*
НОРМАЛИЗАЦИЯ Возвращает нормированное значение
(STANDARDIZE)
ОТРБИНОМ.РАСП Возвращает отрицательное биномиальное распределение
(NEGBINOM.DIST)*
ОТРЕЗОК (INTERCEPT) Возвращает отрезок линии регрессии
П Е Р Е С Т (PERMUT) Возвращает количество перестановок данного числа объектов
ПЕРСЕНТИЛЬ.ВКЛ Возвращает к-й персентиль значений диапазона
(PERCENTILE. INC)*
ПЕРСЕНТИЛЬ.ИСКЛ Возвращает /с-й персентиль значений диапазона, не включая к
(PERCENTILE. ЕХС)* (значение от 0 до 1)
ПИРСОН (PEARSON) Возвращает коэффициент корреляции Пирсона
ПРЕДСКАЗ (FORECAST) Возвращает значение по линейной тенденции
660 Часть VII. Приложения
Функция Продолжение табл. А. 11
ПРОЦЕНТРАНГ.ВКЛ Описание
(PERCENTRANK. INC)* Возвращает процентную ставку значения в наборе данных
ПРОЦЕНТРАНГ.ИСКЛ
(PERCENTRANK. ЕХС)‘ Возвращает процентную ставку значения в наборе данных от 0
ПУАССОН. РАСП до 1, исключая эти числа
(POISSON.DIST)* Возвращает распределение Пуассона
РАНГ. РВ (RANK.EQ)*
РАНГ. СР (RANK.AVG)* Возвращает ранг числа в списке чисел
Возвращает ранг числа в списке чисел; если несколько значений
РОСТ (GROWTH) имеют одинаковый ранг, возвращает среднее
СКОС (SKEW) Возвращает значения по экспоненциальному тренду
СРГАРМ (HARMEAN) Возвращает асимметрию распределения
СРГЕОМ (GEOMEAN) Возвращает среднее гармоническое значение
СРЗНАЧ (AVERAGE) Возвращает среднее геометрическое значение
СРЗНАЧА (AVERAGEA) Возвращает среднее аргументов
Возвращает среднее аргументов с учетом текст овых и логических
СРЗНАЧЕСЛИ значений
(AVERAGEIF)* Возвращает среднее значение ячеек, удовлетворяющих заданно
СРЗНАЧЕСЛИМН му критерию
(AVERAGEIFS)* Возвращает среднее значение ячеек, удовлетворяющих множест
СРОТКЛ (AVEDEV) ву критериев
Возвращает среднее абсолютных отклонений в данных, опреде
СТАНДОТКЛОН . В ленных пользователем
(STDEV. S)* Вычисляет стандартное отклонение на основе выборки, исключая
СТАНДОТКЛОН. Г текстовые и логические значения
(STDEV. Р)* Вычисляет стандартное отклонение на основе генеральной сово
СТАНДОТКЛОНА купности, исключая текстовые и логические значения
(STDEVA) Вычисляет стандартное отклонение на основе выборки, учитывая
СТАНДОТКЛОНПА текстовые и логические значения
(STDEVPA) Вычисляет стандартное отклонение по генеральной совокупности,
СТОШУХ (STEYX) включая числа, текст и логические значения
Возвращает стандартную ошибку заданного у-значения для каж
СТЬЮДЕНТ. ОВР дого х в регрессии
(Т. INV)* Возвращает обратное распределение Стьюдента как функцию
СТЬЮДЕНТ.ОБР.2Х вероятности и числа степеней свободы
(T.INV.2T)* Возвращает обратное распределение Стьюдента
СТЬЮДЕНТ. РАСП
(T.DIST)* Возвращает процентные точки распределения Стьюдента
СТЬЮДЕНТ. РАСП. 2Х
(T.DIST. 2Т)‘ Возвращает процентные точки распределения Стьюдента при ма
СТЬЮДЕНТ. РАСП. ПХ лом объеме выборки
(T.DIST.RT)* Возвращает процентные точки правостороннего распределения
СТЬЮДЕНТ. ТЕСТ Стьюдента
(Т. TEST)* Возвращает вероятность, соответствующую критерию Стьюдента
СЧЁТ (COUNT)
Определяет количество чисел в списке аргументов
Приложение А. Описание функций Excel 661
Окончание табл. А. 11
Функция Описание
Подсчет количества ячеек, которые удовлетворяют заданному
СЧЁТЕСЛИ (COUNTIF) в аргументе критерию
Подсчет количества ячеек, удовлетворяющих множеству аргументов
СЧЁТЕСЛИМН
(COUNTIFS) Вычисляет, сколько значений в списке аргументов
Подсчет пустых ячеек в списке аргументов
СЧЁТЗ (COUNTA)
СЧИТАТЬПУСТОТЫ Возвращает значения линейного тренда
(COUNTBLANK) Возвращает среднее внутренней части множества данных
ТЕНДЕНЦИЯ (TREND) Возвращает преобразование Фишера
УРЕЗСРЕДНЕЕ Возвращает обратное преобразование Фишера
(TRIMMEAN)
Возвращает интегральную функцию плотности бета-вероятности
ФИШЕР (FISHER) Возвращает инверсию односторонней вероятности распределе
ФИШЕРОБР ния хи-квадрат
(FISHERINV) Возвращает плотность бета-вероятности
ХИ2 . ОБР (CHISQ . INV)* Возвращает одностороннюю вероятность распределения хи-квадрат
ХИ2.ОБР.ПХ
(CHISQ.INV.RT)* Выполяет проверку на независимость выборок
ХИ2. РАСП
(CHISQ.DIST)* Возвращает частоту распределения в виде вертикального массива
ХИ2. РАСП. ПХ Возвращает экспоненциальное распределение
(CHISQ.DIST. RT)*
ХИ2.ТЕСТ Возвращает критическое значение в наборе данных >
(CHISQ. TEST)*
ЧАСТОТА (FREQUENCY)
ЭКСП. РАСП
(EXPON.DIST)*
ЭКСЦЕСС (KURT)
Таблица А. 12. Текстовые функции
Функция Описание
ДЛСТР (LEN) Возвращает количество символов в текстовой строке
•ЗАМЕНИТЬ (REPLACE) Заменяет символы в тексте
ЗНАЧЕН(VALUE) Преобразует текстовый аргумент в число
КОДСИМВ (CODE) Возвращает цифровой код первого символа в текстовой строке
ЛЕВСИМВ (LEFT) Возвращает крайние слева символы из текстового значения
НАЙТИ (FIND) Находит одно текстовое значение в другом (чувствительна к реги-
стру)
ПЕЧСИМВ (CLEAN) Удаляет в тексте все непечатаемые символы
ПОВТОР(REPT) Повторяет текст заданное количество раз
ПОДСТАВИТЬ Заменяет старый текст новым в текстовой строке,
(SUBSTITUTE)
ПОИСК (SEARCH) Находит одно текстовое значение в другом (нечувствительна
к регистру)
ПРАВСИМВ (RIGHT) Возвращает крайние справа символы текстового значения
662 Часть VII. Приложения
Функция Окончание табл. А. 12
ПРОПИСН(UPPER)
ПРОПНАЧ (PROPER) Описание
ПСТР (MID) Преобразует текст в верхний регистр
Отображает первую букву каждого слова текста как заглавную
РУБЛЬ (DOLLAR) Возвращает определенное количество символов из текстовой
СЖПРОБЕЛЫ (TRIM) строки, начиная с указанной точки
СИМВОЛ (CHAR) Преобразует число в текст с помощью денежного формата
СОВПАД (EXACT) Удаляет пробелы из текста
СТРОЧН (LOWER) Возвращает символ, определенный кодом
СЦЕПИТЬ Проверяет, совпадают ли два текстовых значения
(CONCATENATE) Преобразует текст в нижний регистр
Т (Т) Объединяет несколько элементов текста в один текстовый элемент
ТЕКСТ (TEXT)
ФИКСИРОВАННЫЙ Преобразует аргументы в текст
(FIXED) Форматирует числа и преобразует их в текст
Форматирует число как тёкст с фиксированным количеством деся
тичных цифр
Приложение
Пользовательские
числовые форматы
Существенным преимуществом Excel является возможность создавать пользователь
ские числовые форматы. Несмотря на то что в Excel предлагается значительное разнооб
разие встроенных числовых форматов, вам может так и не подойти ни один из них.
В этом приложении описано, как создать собственный числовой формат, при этом при
ведено множество примеров.
Числовое форматирование
По умолчанию во всех ячейках используется числовой формат Общий. Часто он ин
терпретируется следующим образом: “что ввел, то и получишь”. Если ячейка не доста
точно широкая, чтобы вместить все число, то формат Общий округляет его, используя
десятичную запятую и экспоненциальную запись значения. В большинстве случаев ячей
ку следует отформатировать с помощью другого формата.
При форматировании чисел главное помнить, что оно влияет только на внешний вид числа
в ячейке. Само число остается неизменным, и в формулах, в которых фигурирует отформати
рованное число, используется его фактическое значение, не зависящее от формата.
Примечание
Исключение составляет случай, когда в разделе При пересчете этой книги
вкладки Дополнительно окна параметров программы установлен флажок
Задать точность, как на экране. В этом случае в формулах будут использо
ваться значения, реально отображенные в ячейках. На практике не реко
мендуется использовать этот прием, поскольку при этом изменяются фак
тические значения рабочего листа, после чего восстановит^ исходные
значения невозможно.
Запомните: если используется диалоговое окно Найти и заменить (для его открытия
нужно выбрать команду Главная ^Редактирование*^ Найти и выделить«=>Заменить),
то дополнительные символы, отображаемые в результате числового форматирования
(например, символ валюты), не могут быть объектами поиска.
664 Часть VII. Приложения
Автоматическое числовое форматирование
Excel выполняет определенное форматирование автоматически. Например, если в ячей
ку ввести 12,3% , то Excel поймет, что вы хотите использовать процентный формат и при
менит его. Если между тройками цифр вставлять определенный в системе символ раздели
теля тысяч (в русскоязычной версии по умолчанию это пробел, в англоязычной — запятая;
все определяется региональными параметрами Windows), Excel применит формат с разде
лителями. Если же сопроводить значение символом валюты (также зависящем от регио
нальных параметров системы), будет применено финансовое форматирование.
\
Примечание
При желании можно воспользоваться флажком отключения автоматическо
го форматирования процентных значений. Откройте окно параметров Excel
и перейдите во вкладку Дополнительно. Если в разделе Параметры правки
установлен флгркок Автоматический ввод процентов (а по умолчанию это так
и есть), значит, можно вводить в отформатированную ячейку обычное зна
чение, и оно будет отображено как процент (например, введите 12,5 и полу
чите 12,5% ). Если этот флажок не установлен, то значения следует вводить
в виде десятичных чисел (например, 0,125 для 1 2 , 5%).
Excel автоматически применяет встроенный формат чисел в ячейках, основываясь на
следующих критериях.
• Если число содержит косую черту (/), его можно преобразовать в формат даты
или дробей.
• Если число содержит дефис (-), его можно преобразовать в формат даты.
• Если число содержит двоеточие (:), после числа стоит пробел, а также буква А
или Р (в любом регистре), то его можно преобразовать в формат времени.
• Если число содержит английскую букву Е (в верхнем или нижнем регистре), то
его можно преобразовать в экспоненциальный формат.
Совет
Чтобы отменить автоматическое форматирование числа при вводе значе
ния, задайте заранее желаемый формат ячейки или поставьте перед числом
апостроф (в последнем случае получится текстовый формат, и числовое
форматирование к ячейке применяться не будет).
Форматирование чисел с помощью ленты
Группа Число вкладки Главная содержит несколько элементов управления, позво
ляющих быстро применять наиболее распространенные числовые форматы. Раскрываю
щийся список Числовой формат открывает быстрый доступ к одиннадцати распро
страненным числовым форматам. Группа Число содержит несколько командных кнопок.
При щелчке на одной из них к выделенным ячейкам применяется соответствующий пре
допределенный числовой формат. В табл. Б. 1 перечислены форматы, применяемые с по
мощью этих кнопок в русифицированной версии Excel.
Приложение Б. Содержимое прилагаемого компакт-диска 665
Примечание
Некоторые их этих кнопок на самом деле применяют к выделенным ячейкам
предопределенные стили. Доступ к стилям открывается с помощью галереи
Excel (группа Стили вкладки Главная).
Таблица Б.1. Кнопки ленты, предназначенные для числового
форматирования
Название кнопки Применяемое форматирование
Финансовый числовом Добавляет справа от числа символы р . и отображает значение с
формат двумя знаками после запятой. На самом деле эта кнопка пред
ставляет собой раскрывающийся список, в котором можно вы
брать другие символы валюты
Процентный формат Отображает значение как процент, без десятичных знаков
Формат с разделителями Разделяет тысячи (группы из трех цифр) и отображает число с
двумя знаками после запятой
Увеличить разрядность Увеличивает количество знаков после десятичной запятой на
единицу
Уменьшить разрядность Уменьшает количество знаков после десятичной запятой на
единицу
Использование горячих клавиш
для форматирования чисел
Еще одним способом применения форматирования к числам является использование
горячих клавиш. В табл. Б.2 приведены комбинации клавиш, которые используются для
форматирования выделенного диапазона ячеек.
Таблица Б.2. Комбинации клавиш для форматирования цифр
Комбинация клавиш Форматирование
<Ctrl+Shift+~> Общий формат (т.е. неформатированные значения)
<Ctrl+Shift+!> Форматирование с разделителями
<Ctrl+Shift+@> Формат времени с часами и минутами
<Ctrl+Shift+#> Формат даты с днем, месяцем и годом
<Ctrl+Shift+$> Финансовый формат с двумя разрядами после запятой
<Ctrl+Shift+%> Процентный формат без десятичных разрядов
<Ctrl+Shift+A> Экспоненциальное представление чисел с двумя разрядами
после десятичной запятой
Использование диалогового окна Формат ячеек
для форматирования чисел
Максимальную гибкость при форматировании чисел пользователю предоставляет вкладка
Число диалогового окна Формат ячеек. Его можно открыть несколькими способами.
• Щелкните на кнопке в правом конце заголовка группы Число вкладки Главная.
• Выберите команду Главная^Число^Числовой формат^Другие числовые
форматы.
• Нажмите клавиши <Ctrl+1>.
666 Часть VII. Приложения
Вкладка Число диалогового окна Формат ячейки содержит 12 категорий числовых
форматов. При выборе в списке нужного варианта правая панель окна изменяется, и в
ней отображаются параметры выбранного варианта.
Ниже приводится список вариантов числового форматирования с краткими коммен
тариями.
• Общий. Применяется по умолчанию; отображает числа в виде целых, дробных
или использует экспоненциальное представление, если значения слишком длин
ные и не помещаются в ячейке.
• Числовой. Позволяет задавать количество цифр между пробелами при разделе
нии тысяч и указывать вид отрицательных чисел.
• Денежный. Позволяет задавать количество значений после запятой, выбирать де
нежный знак и способ отображения отрицательных чисел. В этом формате всегда
используется разделитель тысяч (по умолчанию в русифицированной версии раз
делителем служит пробел).
• Финансовый. В отличие от формата Денежный, символы валюты всегда выров
нены по вертикали, независимо от количества цифр, используемых для отображе
ния значений.
• Дата. Позволяет выбирать формат даты, а также использовать региональные па
раметры формата даты.
• Время. Выбор формата времени на основе региональных параметров операцион
ной системы.
• Процентный. Позволяет изменять количество разрядов после запятой; всегда
отображается символ процента.
• Дробный. Предлагает выбрать один из девяти форматов дробей.
• Экспоненциальный. Отображает числа в экспоненциальном представлении
(с символом Е): 2 ,0 0 Е + 5 = 200000, 2 ,0 5 Е + 0 5 = 205000. Также можно задать
количество разрядов после запятой слева от Е.
• Текстовый. Применение этого формата сообщает Excel о необходимости обраба
тывать значение как текст (даже если оно выглядит как число). Этот формат при
годится при вводе серийных номеров компонентов и номеров кредитных карто
чек, так как не отсекает ведущие нули.
• Дополнительный. Содержит дополнительные форматы чисел. Список изменяется в
зависимости от установленных в операционной системе региональных параметров.
• (все форматы). Позволяет определить формат, не вошедший ни в одну из других
категорий.
Примечание
Если в ячейке отображаются знаки решетки (##########), это обычно ука
зывает на тот факт, что столбец не достаточно широк, чтобы отобразить
значение с использованием выбранного формата. Сделайте шире столбец
или измените формат ячейки. Символы решетки также могут означать, что в
ячейке содержится некорректное время или дата.
Приложение Б. Содержимое прилагаемого компакт-диска 667
Создание пользовательского числового
формата
На рис. Б. 1 показано, как выглядит диалоговое окно Формат ячеек при выборе кате
гории (все форматы). Эта категория позволяет создать формат, отсутствующий в дру
гих категориях. Как видно на рисунке, в Excel можно создать огромное количество са
мых разнообразных числовых форматов.
Рис. Б.1. Параметры категории (все форматы)
© Совет
Пользовательские числовые форматы сохраняются вместе с рабочим листом,
на котором определены. Чтобы такой формат был доступен в других рабочих
книгах, скопируйте ячейку, в которой он используется, в другую рабочую книгу.
Форматирование числа задается путем определения последовательности кодов фор
матирования в виде строки формата. Эта последовательность вводится в поле Тип по
сле выбора категории (все форматы) во вкладке Число диалогового окна Ф ормат яче
ек. Ниже приведен пример простого числового формата:
О, ООО
В этом коде указываются маркеры разрядов числа и расположение десятичной запя
той; в данном случае Excel отображает произвольное значение с тремя разрядами после
десятичной запятой. Приведем еще один пример:
00000
В этом пользовательском формате введено пять маркеров разрядов числа; в данном
случае в числе отображается пять разрядов без десятичной запятой. Этот формат непло
хо подходит для введения в ячейку почтового индекса (который также представлен фор
матом Почтовый индекс категории Дополнительный). Если в ячейке используется
данный числовой формат и вводится почтовый индекс, например, 06604, то значение
отображается с нулем впереди. Если это значение ввести в ячейку с форматом Общий,
то будет отображено 6604 (без нуля впереди).