Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Уокенбах Формулы в Excel

.pdf
Скачиваний:
190
Добавлен:
26.03.2016
Размер:
35.82 Mб
Скачать

Использование функций VBA

для подсчета исуммирования данных

Иногда вы можете столкнуться с тем, что некоторые виды задач подсчета и суммирования данных просто невозможно выполнить с помощью функций, встроенных в Excel, а также формул массива. К счастью, на этот случай приложение Excel имеет мощный инструмент — язык программирования Visual Basic for Application (VBA), предназначенный для создания пользовательских функций, которые, в отличие от встроенных, позволяют решить эти задачи.

Более подробно функции VB А будут рассмотрены в части IV этой книги. В главе 25 приведены примеры некоторых пользовательских функций подсчета и суммирования данных. Ниже приводится краткое описание этих функций:

Функция COUNTBETWEEN. Возвращает количество ячеек, которые содержат значение, расположенное между двумя заданными величинами.

ФункцияCOUNTVISIBLE. Возвращает количество видимых ячеек заданного диапазона.

Функция DATATYPE. Возвращает строку с описанием типа данных, содержащихся в ячейке. Данная функция позволяет подсчитать ячейки, которые содержат даты (что, как правило, не возможно).

Функции ISBOLD, ISITALIC, FILLCOLOR. Функции возвращают значение ИСТИНАв том случае, если указанная ячейка имеет определенный тип форматирования (полужирный шрифт, курсив или шрифт определенного цвета). Данные функции могут быть использованы для суммирования и подсчета ячеек на основе их форматирования.

Функция NUMBERFORMAT.Возвращает числовой формат ячейки. Данная функция позволяет подсчитать или суммировать ячейки на основе их числового формата. /

Функция SUMVISIBLE. Возвращает сумму видимых ячеек заданного диапазона.

Резюме

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

Вследующей главе мы обсудим использование формул для поиска информации в таблицах или диапазонах данных.

200

Часть //. Использование функций в форм

Глава8

Поискданных

Вэтой главе...

Знакомство с формулой поиска данных

Функции,используемые для поиска данных

Основные формулы поиска данных

Специальные формулы поиска данных

Резюме

Вэтой главе мы обсудим различные методы, используемые для поиска значений в таблицах. Для выполнения этой задачи приложение Excel предоставляет пользователю три функции: ПРОСМОТР,ВПР и ГПР. Несмотря на то, что именно эти функции рассматриваются как основные функции поиска информации, они все же не достаточно универсальны. В этой главе приведено множество примеров поиска информации как стандартными, поддерживаемыми обычными средствами Excel, так и другими более специализированными инструментами поиска данных.

Знакомство сформулой поиска данных

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

03/05/98

11/24/98

05/12/98

06/30/97

01/04/D1

09/19/98

04/16Я9

02/01ЛЮ

Рис. 8.1. Формулы поиска, введенные в строку 2, возвращают необходимую информацию служащего, имя которого введено в ячейку С2

Обратите внимание, на рис. 8.1 отображен простейший рабочий лист, который содержит несколько формул поиска и таблицу, содержащую данные о служащем

ГлаваftПоискданных

201

(EmpData), начиная с 9 строки. Если в ячейку С2 ввести интересующее вас имя, формулы поиска, введенные в диапазон ячеек D2 :G2, отыщет в таблице необходимую информацию. Приведенные ниже формулы используют функцию поиска ВПР:

D2

=ВПР(С2;EmpData;2;ЛОЖЬ)

Е2

=ВПР(С2;ЕтрБаЬа;3;ЛОЖЬ)

F2

=ВПР(С2;ЕтрБаЬа;4;ЛОЖЬ)

G2

=ВПР(С2/EmpData;5;ЛОЖЬ)

В этом примере, для того чтобы возвратить информацию из диапазона EmpData,используется четыре формулы. Однако, как правило, пользователю необходимо возвратить только одно значение таблицы, поэтому достаточно часто используется только одна формула.

Функции, используемые для поиска данных

Для написания формул поиска информации в таблице данных используются следующие функции Excel (табл. 8.1):

Таблица 8.1. Функции, используемые для поиска данных втаблице Д ? ч>

Функция

Описание функции

В Ы Б О Р

Возвращает определенное значение изсписка значений (до29), введенных

 

в качестве аргументов.

Г П Р

Функция горизонтального просмотра. Просматривает верхнюю строку таблицыи

 

возвращает значение изуказанной ячейки.

И Н Д Е К С

Использует индекс для выбора значения изтаблицы илимассива.

П Р О С М О Т Р

Возвращает значение из диапазона, состоящего изодного столбца или однойстроки.

п о и с к п о з

Возвращает относительное положение элемента диапазона, который соответству-

 

ет указанному значению вуказанном порядке.

СМЕЩ

Возвращает ссылку надиапазон, смещенную относительно заданной ячейки или

 

диапазона на определенное количество строк и столбцов.

В П Р

Вертикальный поиск. Ищет значение впервом столбце массива и возвращает

 

значение изячейки внайденной строке иуказанном столбце.

Все примеры, приведенные в этой главе, используют функции, перечисленные в табл. 8.1.

Основные формулы поиска данных

Базовые функции поиска данных используются, в основном, для поиска

определенных

строк и столбцов таблицы и, в результате,

возвращают другое, соответствующее

им значение

таблицы. Приложение Excel предоставляет

в распоряжение пользователя три базовых функ-

ции просмотра: ГПР, ВПРи ПРОСМОТР. Функции ПОИСКПОЗ и ИНДЕКС часто

используются

совместно с ними и возвращают ячейку илиссылку на ячейку с искомым значением.

ФункцияВПР

Функция ВПР осуществляет поиск значения в первом столбце просматриваемой таблицы и возвращает значение из ячейки, расположенной на пересечении найденной строки и ука-

202

Часть II.Использование функцийв форму

занного столбца таблицы. Данная функция осуществляет вертикальный поиск по таблице. Синтаксис функцииВПР следующий:

ВПР (искомое_значение; массив_табл; номер_индекса_столбца; диапазон_просмотра) Функция ВПР использует следующие аргументы:

искомое__значение — значение, которое необходимо найти в первом столбце таблицы (значение, ссылка или строка).

массив_табл— диапазон, содержащий таблицу, в которой осуществляется поиск данных.

номер_индекса_столбца — номер столбца в таблице, в котором необходимо найти соответствующее значение.

диапазон_просмотра — необязательный аргумент. В том случае, если данный аргумент содержит значение ИСТИНА или опущен, функция возвращает значение, найденное путем приближенного сопоставления искомого значения (если не найдено точное значение, функция возвращает ближайшее самое большое значение, но меньшее, чем заданный аргумент искомое_значение). В случае, если аргумент содержит логическое значение ЛОЖЬ, функция будет искать точное соответствие. Если точное соответствие не найдено, функция возвращает ошибку #Н/Д.

Если аргумент диапазон_просмотра содержит значение ИСТИНА ИЛИопущен, таблица будет отсортирована в порядке возрастания. В случае, если аргумент искомое_значение меньше самого меньшего значения, содержащегося в первом столбце диапазона массив_табл, функция ВПР возвращает ошибку #н/д. Если аргумент диапазон_прос?мотра содержит значение ложь, первый столбец таблицы поиска не требует сортировки по возрастанию. Тогда, если точное соответствие не найдено, функция возвращает ошибку #н/д

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

Классическим примером применения формулы поиска может служить таблица с процентными ставками подоходного налога (рис. 8.2). В шкалу ставок подоходного налога внесены ставки налога, каждая из которых соответствует определенному уровню дохода служащего. Следующая формула, введенная в ячейку ВЗ, возвращает ставку подоходного налога для уровня дохода в ячейке В2:

=BriP(B2;D2:F7;3)

2

1

Enter Income: I

$21566

3

I

The Tax Rate is: ''

28,00%

45.25%

t Note: This к set up to work with whofe numbers only (no decimals).

ml

Рис. 8.2. Чтобы найти ставку налога, воспользуйтесь функциейВПР

Глава 8.Поиск данных

203

Обратите внимание, анализируемая таблица находится в диапазоне, состоящем из трех столбцов (D2 :F7). Последний аргумент функции ВПР — 3,поэтому формула возвращает соответствующее значение, содержащееся втретьем столбце таблицы.

В данном случае, точного соответствия не требуется. Если точное соответствие ненайдено в первом столбце просматриваемой таблицы, функция ВПР будет использовать ближайшее наибольшее значение, которое меньше искомого в таблице значения. Другими словами, функция использует строку, содержащую значение, которое меньше или равно искомому, а значение следующей заней строки больше искомого значения. Втаблице налоговых ставок — это вторая строка.

Функция ГПР

Функция ГПРработает поаналогии с функцией ВПР, за исключением того, чтотаблица просматривается невертикально, а горизонтально. Функция просматривает верхнюю строку таблицы ивозвращает значение, соответствующее указанной строке таблицы.

Синтаксис функции ГПР имеет следующий вид: ГПР(искомое_значение;таблица;номер_строки;диапазон__просмотра)

Функция ГП Р использует следующие аргументы:

искомое_значение — значение, которое требуется найти впервой строке таблицы.

таблица — таблица, в которой производится поиск данных.

номер_строки — номер строки втаблице, из которой возвращается сопоставляемое значение.

диапазон_просмотра — необязательный аргумент. Если значение этого аргумента ИСТИНА илиопущено, функция возвращает значение, найденное путем приближенного сопоставления искомого значения (если точное соответствие не будет найдено, функция возвратит ближайшее наибольшее значение, меньшее чем значение аргумента искомое_значение). В случае, если аргумент содержит логическое значение ЛОЖЬ, функция ГПРбудет искать точное соответствие. Если точное соответствие не найдено, функция возвращает ошибку #Н/Д.

Эта информация невключена в интерактивную справку функции, однако, имейте в виду, что, если аргумент искомое_значение содержит текстовое значение, в нем можно использовать групповыесимволы * и ?.

На рис. 8.3 показана таблица со ставками подоходного налога, ноуже в горизонтальной форме (El:J3). Формула вячейке ВЗ выглядит следующим образом:

=ITIP(B2;E1:J3;3)

 

* A -' *-

8

 

 

'•

F

 

 

 

.j <

 

 

1

 

 

 

МФгЩщитЮьч, j

$0

$2 651

$27

301

$58 501

$131 801

$284 7011

>

2

Enter Income:

r$21 566

Г ] utUeeThan... .

$2 650

$27 300

$58

500

$131800

$284 700

 

 

3

The Tax Rate is: ' 28.00%

T*xRa » ^ 1 15.00% I 28.00%

31.00% I 36.00%

39.60%

45.25% I

 

4

 

 

 

 

 

 

 

 

 

 

 

 

JL

 

 

 

 

 

 

 

 

 

 

j

flg

И 4

 

 

 

 

 

 

 

 

 

 

Рис. 8.З. В этом случае для поиска ставки подоходного налога молено воспользоваться функцией ГПР

204

Часть II. Использование функций вформулах

Функция ПРОСМОТР

Функция ПРОСМОТРимеет следующий синтаксис: ПРОСМОТР(искомое_значение;вектор_просмотра;вектор_результата)

Данная функция использует следующие аргументы:

искомое_значение — значение, которое функция ищет в первом векторе.

вектор_просмотра — диапазон, состоящий только из одной строки или одного столбца, содержащий значения, которые необходимо найти. Значения должны располагаться в порядке возрастания.

вектор_результата— диапазон, состоящий только из одной строки или одного столбца и содержащий значения, которые будут возвращены. Размер этого диапазона должен равняться размеру диапазона вектор_просмотра.

Функция ПРОСМОТР просматривает диапазон, состоящий из одной строки или одного столбца (вектор_просмотра), находит необходимое значение (искомое_значение) и возвращает значение, содержащееся в соответствующей ячейке второго диапазона, который также состоит из одной строки или одного столбца (вектор_результата).

Имейте в виду, что значения диапазона вектор_просмотра должны располагаться в порядке возрастания. В том случае, когда значение искомое_значение меньше наименьшего значения, содержащегося в диапазоне вектор_просмотра, функция возвращает ошибку #н/д.

Справочная система Excel для функции ПРОСМОТР предлагает выбрать один из двух вариантов синтаксиса данной функции. Второй вариант синтаксиса функции ПРОСМОТР содержит аргумент массив. Данный синтаксис обеспечивает совместимость Excel с другими программными продуктами, поддерживающими электронные таблицы. Однако, в действительности, вместо этого синтаксиса предпочтительней использовать функции ВПР и ГПР.

Обратите внимание, на рис. 8.4 показана все та же таблица ставок подоходного налога, только на этот раз формула, введенная в ячейку ВЗ, использует функцию ПРОСМОТР, чтобы возвратить соответствующую налоговую ставку:

= П Р О С М О Т Р ( В 2 ; D 2 : D 7 ; F 2 : F 7 )

Имейте в виду, что, если значения, содержащиеся в первом столбце, не расположены в порядке возрастания, значение, возвращенное функцией ПРОСМОТР, может быть неправильным.

Глава8.Поискданных

205

ш2

 

3

с

 

 

 

: Enter Income:

$123 409

Ю

 

$2 650

15.00%

3

:The Tax Rate is:

36.00%

$2 651

 

$27 300

28.00%

4 :

 

 

$27 301

 

$58 500

31.00%

ij

 

$58 501

$131 800

36.00%

 

$131 801

$284 700

39.60%

 

$284 701

 

 

45.25%

8

 

 

 

 

 

 

-AflUv , -v**vm ч.г«~*~ ,—•••

 

 

LiJ

vL

 

 

 

 

 

 

Рис. 8.4. Чтобы найти соответствующую налоговуюставку, воспользуйтесьфункцией ПРОСМОТР

В отличие от функции ВПР функция ПРОСМОТРиспользует два диапазона: первый диапазон содержит искомое значение, второй — результирующее значение, возвращенное функцией. В свою очередь, функция ВПР использует только диапазон таблицы поиска, а третий аргумент этой функции определяет номер столбца в таблице, в котором располагается результирующее значение. Конечно, этот аргумент может состоять из ссылки на ячейку.

Комбинирование функций ПОИСКПОЗ иИНДЕКС

Достаточно часто, при выполнении задач поиска данных, функции ПОИСКПОЗи ИНДЕКС используются вместе. Первая функция— функция ПОИСКПОЗ, возвращает относительную позицию ячейки в диапазоне, соответствующей заданному значению. Синтаксис функции следующий:

ПОИСКПОЗ(искомое_значение;массив_поиска;тип_сопоставления) Функция ПОИСКПОЗ использует следующие аргументы:

искомое_значение — значение, искомое в массиве массив_поиска. Если третий

аргумент этой функции— тип_сопоставления, равен 0, а

аргумент

искомое_значение представляет собой текст, то он может содержать

групповые

символы * и ?

 

массив_поиска — диапазон, который содержит искомое значение.

тип_сопоставления — целое число в интервале от -1, 0, 1, которое устанавливает параметры соответствия

Втомслучае,если аргумент тип_сопоставления равен 1,функцияпоискпоз ищет самое большое значение, которое меньше, либо равно аргументу искомое_значение (значения диапазона массив_поиска должнырасполагаться в порядке возрастания). Если аргумент тип_сопоставления равен 0, функция ищет первое значение, вточности соответствующее аргументу искомое_значение. Если же аргумент тип_сопоставления равен -1, функция ищет наименьшее значение, которое больше или равно аргументу искомое^значение (в этом случае значения диапазона массив_поиска должны располагаться в порядке убывания). Если аргумент тип_сопоставления опускается, то поумолчанию онпринимается равным1.

Функция ИНДЕКС возвращает ячейку диапазона. Синтаксис функции следующий : ИНДЕКС(массив;номер_строки;номер_столбца)

Функция ИНДЕКС использует следующие аргументы:

массив — диапазон, являющийся массивом

номер_строки — строка в массиве массив, из которого возвращается значение

номер__столбца — столбец в массиве массив, из которого возвращается значение

206

Часть II. Использованиефункций в форму

В том случае, если массив содержит только одну строку или столбец, соответствующий аргумент номер_строки или номер_столбца использовать необязательно.

На рис. 8.5 показан рабочий лист, в котором в столбцах D, Е и F содержатся даты, дни недели и суммы. При вводе даты в ячейку В1 формула, приведенная ниже (ячейка В2), просматривает значения в столбце D в поисках даты, а затем возвращает из столбца F соответствующую этой дате сумму:

= И Н Д Е К С ( F 2 : F 2 1 ; П О И С К П О З ( B l ; D 2 : D 2 1 ; 0 ) )

Л > Н ^ ^ » ^ /Щ*М>7ЩмР>\match >о<1ен/сш>}<|

Рис. 8.5. Функции ИНДЕКС и ПОИСКПОЗ используются для поиска данных в таблице

Когда пустая ячейка не равна нулю

Достаточно часто может возникнуть ситуация, когда ячейки результирующего диапазона не содержат никаких значений. Функции поиска Excel обрабатывают такие ячейки как нулевые значения. Например, рабочий лист в приведенном ниже рисунке, содержит таблицу поиска, состоящую из двух столбцов. Следующая формула просматривает первый столбец, отыскивая внем имя, введенное вячейку В1 ивозвращает соответствующую этому имени сумму:

=BnP(Bl;D2:E8;2)

Обратите внимание, чтоячейка Amount, соответствующая имени Charlie, пуста, однако формула возвращает нулевое значение:

Bob

45

Charlie

0

David

Frank

32

George

9

Harry

0

Mike

1

Глава ftПоиск данных

207

Если вы хотите, чтобы нулевые значения отличались от пустых ячеек, измените формулу просмотра, добавив в нее функцию ЕСЛИ, чтобы определить длину возвращаемогозначе-

ния.

В том случае, если возвращаемая ячейка пуста, длина значения воспринимается рав-

ной

нулю, во всех других случаях — как ненулевое значение. Следующая формула отобра-

жает пустую строку (пробел) всякий раз, когда длина возвращаемого значения нулевая, и фактическое значение, когда длина значения не равна нулю:

=ЕСЛИ(ДЛСТР(ВПР(В1;Б2:Е8;2) ) = 0 ; " "•; ( В П Р ( B 1 ; D 2 : Е 8 ; 2 ) ) )

Чтобы понять, как работает эта формула, начните с функции ПОИСКПОЗ. Данная функция ищет в диапазоне D2 :D21 дату, содержащуюся в ячейке В1 и относительный номер строки, в которой эта дата найдена. Полученное значение используется в качестве второго аргумента функции ИНДЕКС. В результате формула возвращает соответствующее значение, содержащееся в диапазоне F2 :F21.

Специальные формулы поиска данных

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

Поиск точного значения

Как было показано в предыдущих примерах, функции ВПР и ГПР не требуют точного соответствия искомого значения значению, содержащемуся в таблице поиска. Однако это допустимо, например, при поиске ставки подоходного налога. В других ситуациях может потребоваться полное соответствие значений. К примеру, при поиске табельного номера служащего необходимо полное соответствие номера.

Для того чтобы найти только точно соответствующее значение, используются те же функции ВПР или ГПР, но с необязательным четвертым аргументом со значениемЛОЖЬ.

На рис. 8.6 показан рабочий лист с таблицей, которая содержит табельные номера (столбец С), а также имена и фамилии служащих (столбец D). Таблица поиска носит название EmpList. Следующая формула, введенная в ячейку В2, ищет табельный номер служащего (ячейка В1) и возвращает имя служащего, имеющего данный табельный номер:

=ВПР(В1;EmpList;2;ЛОЖЬ)

Поскольку последний аргумент функции ВПР имеет значение ЛОЖЬ, функция возвращает значение только в том случае, если найдено точное соответствие. В противном случае, если значение не найдено, формула возвращает ошибку #Н/Д. Безусловно, поиск приближенного соответствия значения табельного номера служащего не имеет, в данном случае, никакого смысла. Кроме того, обратите внимание, что табельные номера служащих в столбце Срасположены не в порядке возрастания, поскольку при использовании в качестве четвертого аргумента логического значения ЛОЖЬ,упорядочения по возрастанию не требуется.

208

Часть II. Использование функций в форму

873

Charles к Barkley

1109

FrancisJenikins

1549

JamesBrackman

1334

Unda Нафег

1643

Louise Victor

1101

MelindaHindquest

1873

LMichaelOrenthal

983

Peter Yates

972

Sally Rice

1398

Walter Franklin

Puc. 8.6. Поиск в этой таблице требует точного соответствия значений

Если вы хотите, чтобы вместо ошибки #н/д на экране отображалась другая информация (в случае, если табельный номер служащего не найден), используйте функцию ЕСЛИ, предотвращая появление ошибки #н/д(используя функцию ЕНД) и заменяя ееналюбуюдругую строку. Следующаяформула вместо ошибки#н/д отображает текст "Не найдено":

=ЕСЛИ(ЕНД(ВПР(В1;ЕтрЫ8Ь;2;Л0ЖЬ) ) ;

11 Не найдено " ;ВПР ( B l ; E m p L i s t ; 2;ЛОЖЬ) )

Поиск значения слева

Функция ВПР всегда ищет значение в первом столбце заданного диапазона. Но как быть, если пользователю необходимо найти значение не в первом, а в каком-либо другом столбце? Конечно, очень удобно назначать третьему аргументу функции ВПРотри-

цательное значение. Ноэто невозможно.

 

Давайте рассмотрим эту проблему на простом примере (рис. 8.7). Предположим, что

нам

необходимо найти средний темп (столбец В, диапазон Averages) одного из игроков

из

столбца С (диапазон Players). Имяигрока, данные о котором необходимо найти, вве-

дено в ячейку LookupValue. В данном случае функция ВПР работать не будет, поскольку данные размещены не корректно. Конечно, данные можно перестроить с помощью одного действия, однако иногда и это невозможно.

!с| lookup toth» ieft.xfc

•••V,v>: v -

 

 

 

 

 

 

3JRSSZ

в _ л ^

D

i..

E _

j -F - .. . <^ . / ; . н . i

1 7

0,333

Ana;

Player to lookup:

Darr

 

***"

2

\

12

 

 

 

 

 

 

3

 

41

0.390

Darr

 

 

Average

0,390 <--LOOKUP

 

 

4

 

24

0,333

Davis

 

 

At Bats:

41 <-- LOOKUP

 

 

5

 

25

0.160

Gomez

 

 

 

 

 

 

6 ч

23

0.217

Gonzolez

 

 

Average

0.390 <--INDEX and MATCH

7

j

30

0 3O0

Gwynn

 

 

At Bats:

41 <--INDEX and MATCH

 

8

!

0

0.000

Henderson

 

 

 

 

 

 

9 .

51

0.333

Jackson

 

 

 

 

 

 

10

 

43

0.186

Klesko

 

 

 

 

 

 

«•

 

36

0,139

Kotsay

 

 

 

 

 

 

12 j

9

0,333

Magadan

 

 

 

 

 

 

13]

16

0.313

Mendez

 

 

 

 

 

 

14

 

44

0,341

Nevin

 

 

 

 

 

 

15'

14

0,286

Perez

 

 

 

 

 

 

16j

28

0.321

Trammell

 

 

 

 

 

 

17 i

 

 

 

 

 

 

 

 

 

18'

 

 

 

 

 

 

 

 

 

19 i

 

 

 

 

 

 

 

 

 

H~ 4 T w\sheetl/" "

.

 

 

ш

i >\r<

 

 

 

Puc. 8.7. Функция ВПР не позволяет осуществить поиск значения в столбцеВна основе данныхстолбца С

Глава 8. Поискданных

209