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

Условие 1

значение равно  =ГПР(B4;$C$1:$E$1;1;0) 

формат – шрифт полужирный курсив

и распространим его на все клетки основной части таблицы. Результат вы видите на рисунке. Теперь мы легко определим, кто именно работал в указанные дни (эти даты выделены).

Пример. Рассмотрим (рис. 4.8-4) некоторый содержательный пример, связанный с использованием функции ГПР().

Пусть по разряду рабочего (клетка В8) требуется в тарифной сетке найти соответствующий ему суточный тариф (D5) оплаты труда для дальнейшего начисления зарплаты по итогам месяца. Затем тариф умножается на число рабочих дней (сейчас не рассматривается).

Здесь в клетке C8 должен быть получен тариф Петра по его разряду (т.е. по третьему разряду 42 руб.)

тариф_Петра=ГПР(разряд_Петра;

тарифная_сетка; строка_Тариф; поиск_точный)

или в виде функции

С8=ГПР(В8;B$4:E$5;2;0),

где значение В8 ищется в верхней строке области B4:E5. Если поиск оказался успешным, результат извлекается из второй строки области поиска и заносится в С8.

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

С8=ГПР(B8;{1;2;3;4:30;35;42;50};2;0).

A

B

C

D

E

Тарифная сетка

4

Разряд

1

2

3

4

5

Тариф

30

35

42

50

6

7

ФИО

Разряд

Тариф

8

Петр

3

42

Рис. 4.8-4

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

Замечание. Если <объект поиска> целое число, поиск точный, а строка извлечения не слишком велика (до 29 элементов), то для тех же целей можно воспользоваться функцией ВЫБОР(). Так (см. выше), вместо функции С8=ГПР(В8;B$4:E$5;2;0) можно применить функцию С8=ВЫБОР(В8;B$5; C$5;D$5;E$5).

Пример. Задача с использованием функции ВПР() (рис. 4-8.5).

Положим нужно обслужить фирмы-заказчики, предварительно внес­шие некоторые денежные взносы (область А2:В5). Таблица должна быть устроена таким образом, чтобы оператор, вводя название фирмы (например, в А8) должен сразу (в В8) видеть эту сумму, с тем, чтобы не допустить отпуск товара свыше нее. В списке фирм заказчик может и отсутствовать. В этом случае в столбцеВзнос должен быть выведен 0. Для розыска значения взноса достаточно формулы вида

В8=ВПР(A8;A$2:B$5;2;0).

Однако, если введено имя фирмы, не сделавшей взноса, в клетке будет сообщение об ошибке вида #Н/Д (нет данных). Для формирования правильной реакции системы следует усложнить выражение, использовав средства, способные распознать такую ситуацию

<взнос фирмы>=если(<фирма> не найдена, то 0р.,иначе <ее взнос>).

Или в виде формулы

B8=ЕСЛИ(ЕНД(ВПР(A8;A$2:B$5;2;0));0;ВПР(A8;A$2:B$5;2;0)).

Здесь использована функция ЕНД() распознавания соответствующей ошибки (см. раздел 4.13). Тогда Остаток: D8=B8-C8.

Замечание. В некоторых случаях значение четвертого аргумента (тип поиска) функций ВПР()/ГПР() кажется безразличным. В предыдущем примере функция =ГПР(В8;B$4:E$5;2;0) даст тот же результат, что и =ГПР(В8; B$4:E$5;2;1), поскольку строка разрядов упорядочена по возрастанию. В случае, если предполагается точный поиск, следует все-таки всегда указывать параметр 0. Это позволит пользователю вовремя заметить допущенную им при заполнении таблицы ошибку. Например, если он для некоторого работника ввел значение несуществующего пятого разряда (рис. 4.8-4), Excel выдаст сообщение об ошибке. В том же самом случае при параметре тип поиска=1, система предложит считать результатом поиска тариф ближайшего четвертого разряда. Конечно, такую ошибку довольно сложно обнаружить.

СМЕЩ(<ссылка>;<строк смещения по вертикали>;

<столбцов смещения по горизонтали >;<высота>;<ширина>)

– функция возвращает диапазон заданной <высоты> и <ширины>, смещенный относительно <ссылки> на соответствующее число <строк> и <столбцов>. Результатом может быть как адрес одной клетки, так и целый блок. Функция может быть использована другими функциями, работающими с адресами (например, функцией СУММ()).

Пример. СУММ(СМЕЩ(A1;0;1;1;3))=СУММ(B1:D1).

Здесь относительно клетки A1 на расстоянии вниз на 0 строк и вправо на 1 столбец (т.е. начиная с позиции A2) выбирается блок размером в одну строку и три столбца (т.е. блок B1:D1).

ЧИСЛСТОЛБ(<область>) – возвращает число столбцов в <области>.

Примеры: ЧИСЛСТОЛБ(A1:C4) = 3 (столбцов в блоке),

ЧИСЛСТОЛБ({1;2;3:4;5;6}) = 3 (столбцов в массиве).

ЧСТРОК(<области>) – возвращает число строк в <области>.

Примеры: ЧСТРОК(A1:C4) = 4 (строк в блоке),

ЧСТРОК({1;2;3:4;5;6}) = 2 (строк в массиве).

АДРЕС(<номер строки>; <номер столбца>;

[<тип ссылки>]; [<стиль ссылки>]; [<имя листа>])

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

<Тип ссылки> – указывает тип возвращаемой ссылки и может иметь одно из значений:

1 – абсолютный (например, $A$1);

2 – абсолютная строка, относительный столбец (A$1);

3 – относительная строка, абсолютный столбец ($A1);

4 – относительный (A1).

Если тип не указан, он считается абсолютным (тип 1).

<Стиль ссылки> – логическое значение. ИСТИНА (или опущено) – ссылка в стиле А1; ЛОЖЬ – ссылка в стиле С1К1.

<Имя листа> – имя рабочего листа или листа макросов.

Примеры: АДРЕС(2;3) = "$C$2",

АДРЕС(2;3;2) = "C$2",

АДРЕС(2;3;2;ЛОЖЬ) = "R2C[3]",

АДРЕС(2;3;1;ЛОЖЬ;"Лист1") = "Лист1!R2C3".

ДВССЫЛ(<ссылка на ячейку>;<стиль ссылки>) – возвращает ссылку, заданную аргументом <ссылка на ячейку>.

<Ссылка на ячейку> – адрес ячейки, которая содержит либо ссылку в стиле А1, либо ссылку в стиле R1C1, либо имя, определенное как ссылка. Если <ссылка> не допустима, возвращается значение ошибки #ССЫЛ!.

<Стиль ссылки> – логическое значение, указывающее стиль ссыл­ки, содер­жащейся в ячейке (ИСТИНА – ссылка в стиле A1, ЛОЖЬ – в стиле R1C1).

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

Примеры: Если A1 содержит текст "B2", а ячейка B2 – значение 8, то

ДВССЫЛ(A1) = 8.

Если Excel настроен на работу с адресами в стиле R1C1 и ячейка R3C5 содержит R2C2, где в свою очередь находится число 2, то

3*ДВССЫЛ(R3C5;ЛОЖЬ) = 6.

ИНДЕКС(<область>;<номер строки>;<номер столбца>)

– возвращает ссылку на ячейку, находящуюся на пересечении <строки> и <столбца> с указанными номерами внутри <области>.

Результат функции интерпретируется другими функциями как ссылка (адрес), однако функция ИНДЕКС() “в чистом виде” возвращает значение (число, текст), находящееся в клетке.

Если <область> содержит только одну строку/столбец, то аргумент <строка> или <столбец>, соответственно, является необязательным. Так, для одной строки можно использовать форму ИНДЕКС(<область>;; <столбец>). Если аргумент <строка>/<стол­бец> равен 0, функция вернет ссылку соответственно на целую строку/столбец.

Примеры (данные взяты из рис. 4.8-6).

=ИНДЕКС(B2:B5;3)=B4=9,

=

A

B

C

D

E

1

2

1

2

3

4

3

5

6

7

8

4

9

10

11

12

5

13

14

15

16

Рис. 4.8-6

ИНДЕКС(B5:E5;;4)=E5=16,

=ИНДЕКС(B2:E5;3;2)=C4=10,

=СУММ(ИНДЕКС(B2:E5;2;2):

ИНДЕКС(B2:E5;3;4))=СУММ(C3:E4)=54,

=СУММ(ИНДЕКС(B2:B5;0))=СУММ(B2:B5)=28.

Функция ИНДЕКС() удобна для вычисления адресов блоков.

Пример. Положим (рис. 4.8-7) имеется тарифная сетка определения зарплаты (в тыс. руб.) работников производства с учетом их должности и стажа работы. Здесь в области В4:В7 представлены сведения о стаже в формате вида от” ## “лет, т.е., несмотря на внешний вид, это не текстовые, а числовые данные (числа 0, 5, 10, 15).

Пусть, нам нужно найти зарплату для сотрудника в должности Бригадир со стажем 8 лет. В таблице тарифов этим данным соответствует число 3,5 (клетка выделена), находящееся на пересечении второй строки и третьего столбца области C4:F7. Если все параметры поиска установлены, их можно указать в функции

ИНДЕКС($C$4:$F$7;2;3)=3,5.

Однако номера строки и столбца нам пока неизвестны. Их предстоит вычислить, исходя из должности и трудового стажа. Номер столбца (3) находится формулой (поиск точный)

=ПОИСКПОЗ("Бригадир";$C$3:$F$4;0)),

а номер (2) столбца

=ПОИСКПОЗ(8;$B$4:$B$7;1).

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

Или целиком

=ИНДЕКС($C$4:$F$7;ПОИСКПОЗ(8;$B$4:$B$7;1);

ПОИСКПОЗ("Бригадир";$C$3:$F$4;0)).

A

B

C

D

E

F

1

2

ТАРИФНАЯ СЕТКА

3

должн.

стаж

Рабочий

Звеньевой

Бригадир

Прораб

4

от 0 лет

1,0

2,0

3,0

5,0

5

от 5 лет

1,2

2,3

3,5

5,5

6

от 10 лет

2,0

2,5

3,8

6,0

7

от 15 лет

2,2

2,7

4,4

6,7

Рис. 4.8-7

На практике, конечно, в качестве аргументов используются не константы (слово Бригадир и число 8), а ячейки, содержащие соответствующие индивидуальные данные о стаже и должности работника.

СТОЛБЕЦ([<ссылка>]) – возвращает номер столбца по заданной <ссылке> на клетку. Пример: СТОЛБЕЦ(A3) = 1.

СТРОКА([<ссылка>]) – возвращает номер строки по заданной <ссылке> на клетку. Пример: СТРОКА(A3) = 3.

Функции СТОЛБЕЦ() и СТРОКА() без аргументов возвращают номера текущих столбца и строки.

Пример. Задача интерполяции. Положим, имеется таблица, связывающая некоторые значения Х и Y (область А1:F2 на рис. 4.8-8).

По заданному в А5 значению Хф (X фактическое) нам надо определить соответствующее значение Yф. Однако в таблице Y(X) отсутствует Хф. Уже рассмотренный подход заключается в том, чтобы воспользоваться функцией ГПР() вида

=ГПР(A5;B1:F2;2;1)

и определить Yф для ближайшего меньшего значения Х. В нашем случае для Хф=5 получим Y=3 при Х=4. Однако такой результат будет весьма неточным. На рис. 4.8-9 представлено (кружками) несколько из­вестных точек Y(X). При указанном способе поиска результатом является значение Yi. Очевидно, что более точным будет значение Yф, находящееся на прямой, соединяющей две соседние известные точки (искомая точка обозначена ромбом).

Для вычисления Yф воспользуемся пропорцией, связывающей подобные прямоугольные треугольники

A

B

C

D

E

F

1

X

0

3

4

6

7

2

Y

0

1

3

5

6

3

4

Хф

Xi

Xi+1

Yi

Yi+1

5

5

4

6

3

5

4

Рис. 4.8-8 Рис. 4.8-9

В клетки В5F5 внесены функции, выполняющие необходимые вычисления

B5=ИНДЕКС($B$1:$F$1;ПОИСКПОЗ(A5;$B$1:$F$1)),

C5=ИНДЕКС($B$1:$F$1;ПОИСКПОЗ(A5;$B$1:$F$1)+1),

D5=ГПР(A5;$B$1:$F$2;2;1),

E5=ГПР(C5;$B$1:$F$2;2;1),

F5=(E5-D5)*(A5-B5)/(C5-B5)+D5.

При желании они могут быть соединены в одно выражение.

П

А

В

1

ФИО

Разряд

2

Ольга

2

3

Иван

4

4

Олег

3

ример. В списке сотрудников (таблица справа) найти человека с наибольшим разрядом. Решением будет функция

=ИНДЕКС(A2:A4;ПОИСКПОЗ(МАКС(B2:B4);B2:B4)),

которая выработает ответ – Иван. Функция ПОИСКПОЗ() ищет номер строки в столбце разрядов, в которой находится максимальный разряд рабочего.

A

B

C

D

E

F

G

1

Работник

Март

Апрель

Май

Июнь

Июль

Лучший месяц

2

Петр

50

80

70

20

Апрель

3

Иван

110

30

150

Июнь

4

Олег

90

200

Май

5

Лучший в месяце

Иван

Петр

Олег

Иван

#Н/Д

Рис. 4.8-10

Пример. Положим, у нас имеется таблица (рис. 4.8-10), где зафиксированы выработки (в тыс. руб.) работников организации. Наша задача – определить лучшего работника в каждом из месяцев и лучший месяц для каждого работника. Рабочие формулы приведены ниже

B5=ИНДЕКС($A$2:$A$4;ПОИСКПОЗ(МАКС(B2:B4);B2:B4;0)),

G1=ИНДЕКС($B$1:$F$1;ПОИСКПОЗ(МАКС(B2:F2);B2:F2;0)).

Соседние файлы в папке EXCEL (Попов)