Если время НН меньше 8-и часов, то день остается без изменения, если нет – берется следующий день. Иными словами

КН=день НД + 8:00+ЕСЛИ(время НД<8:00; 0; 1)

или F5=ЦЕЛОЕ(E5)+E$2+ЕСЛИ(ОСТАТ(E5;1)<=E$2;0;1).

Функция ОСТАТ() отделяет дробную часть Е5 (т.е. часы и минуты) от полной даты_времени НД.

Теперь найдем время, отработанное в ночную смену. Если время КД менее НН (дежурство заканчивается до наступления ночи), работы в ночную смену не было. В противном случае находится разность между минимальным значением из КД, КН и максимальным из НД, НН и умножается на 24.

Часов ночной смены=ЕСЛИ(КД<НН; 0;МИН(КД;КН)–МАКС(НД;НН))*24

или G5=ЕСЛИ(C5<E5;0;МИН(C5;F5)–МАКС(B5;E5))*24.

Наконец, мы можем вычислить заработанную сумму.

Оплата=за дневную смену + за ночную смену+30, если была ночная смена

илиH5=(D5–G5)*H$2+G5*2*H$2+ЕСЛИ(G5>0;30).

К оформлению. В завершении сделаем так, чтобы оператор, работающий на компьютере, мог легко видеть, кто в настоящее время дежурит. Это существенно, поскольку таблица может иметь большой размер и быстро найти в ней нужную строку не так просто. Для ориентирования во времени в клетку F1 введена функция =ТДАТА() предъявления текущей даты_времени. Значение в этой клетке непрерывно само не обновляется – новое время можно получить, нажав клавишу пересчета F9. Для реализации желаемого установим на клетки А5, А6, А7 условный формат

Условие 1 формула =ЕСЛИ(И($G$1>B6;$G$1<=C6);1) ,

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

  A B C D E F G H
Стоимость дома $200000            
Вид скидки: окна на улицу 1 этаж этаж более 100м      
% скидки: 5% 10% 5% 3%      
ПРОДАЖА КВАРТИР
Квартира Площадь Этаж Сторона Оплата со скидкой Эквивал. площадь Цена кварт. Цена 1 м
70м у 85% 59,5м $ 34724 $496
160м д 97% 155,2м $ 90575 $566
60м д 100% 60,0м $ 35016 $584
80м у 85% 68,0м $ 39685 $496
ВСЕГО 370м       342,7м $200000  
      Рис. 5.33        

Пример 5.33. Продажа квартир.Положим, фирме, построившей небольшой жилой дом за 200 000$, требуется установить продажные цены на квартиры, исходя из их площади и потребительских качеств. Устанавливаются скидки на квартиры, находящиеся на первом и последнем (третьем) этаже, на большие квартиры (более 100 кв.м) и квартиры, выходящие на улицу. Все возможные скидки представлены во второй и третьей строках. Буквой “д” обозначены квартиры, выходящие во двор, а буквой “у” – на улицу. Для вычисления цены квартиры введем два технических столбца. В столбце Оплата со скидкойопределяется процент стоимости квартир относительно номинальной. Из 100% отнимаются все возможные скидки.

E6=100%–ЕСЛИ(C6=1;$C$3)–ЕСЛИ(C6=4;$C$3)–ЕСЛИ(D6="у";$B$3)–ЕСЛИ(B6>100;$E$3).

  A B C D E F G H I J
ТАРИФЫ:              
Телефон отдельный 20р              
спаренный 15р              
Газ без колонки 3р/ч              
с колонкой 4р/ч              
Коммун. услуги без колонки 3р/м              
с колонкой –10%              
РАСЧЕТ КВАРТПЛАТЫ
Квар- тира Площадь Человек Удобства Оплата  
Э/плита Газ.колонка Телефон (спар/отд) Коммун. услуги Газ Телефон Всего
100м   + о 270р 28р 20р 318р
60м +   с 180р 15р 195р
70м   +   189р 16р 205р
80м     о 240р 20р 269р
90м   +   243р 32р 275р
ВСЕГО 400м 1122р 85р 55р 1262р
      Рис. 5.3          

В столбце Эквивалентная площадьвычисляется некоторая теоретическая площадь, соответствующая цене со скидкой, F6=B6*E6.Видим, что она равна 342м вместо 370. Отсюда можно определить цену одного квадратного метра с учетом скидок как частное от деления стоимости дома на эту площадь. Таким образом, продажная цена квартиры составит G6=$B$1/$F$10*F6,а стоимость одного квадратного метра в ней H6=G6/B6.Расчеты выполнены верно, поскольку суммарная стоимость всех квартир (G10) равна стоимости дома (B1).

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

Положим квартплата состоит из следующих элементов (см. область Тарифы на рисунке):

· Оплата за пользование отдельным или спаренным телефоном (помечается буквами “о” или “с”).

· Оплата за газоснабжение при наличии водонагревательной (помечается значком “+”) колонки и без нее. Рассчитывается на каждого проживающего в квартире человека и только в случае отсутствия электроплит. Считается, что при наличии электроплит, газ к дому не подведен.

· Оплата за коммунальные услуги. Рассчитывается пропорционально площади квартиры. При наличии газовой колонки (помечается значком “+”) она снижается на 10% поскольку централизованное снабжение горячей водой тогда отсутствует (но возрастает сумма, выплат за газ).

Платежи определяются следующими формулами:

Коммунальные услуги

=площадь_квартиры * тариф_“без_колонки”*ЕСЛИ(колонка есть тариф снижается, иначе остается)

или для первой квартиры

G11=B11*$C$6*ЕСЛИ(E11="+";1+$C$7;1).

Оплата за газ

=ЕСЛИ (нет электроплиты, то 1, иначе 0)*число_человек*

ЕСЛИ (колонка есть, то тариф_“с колонкой”, иначе “без_колонки”)

H11=ЕСЛИ(D11<>"+";1;0)*C11*ЕСЛИ(E11="+";$C$5;$C$4).

Оплата за телефон

=ЕСЛИ (телефон отдельный, то обычный тариф, иначе ЕСЛИ(телефон спаренный, сниженный тариф, иначе 0))

I11=ЕСЛИ(F11="о";$C$2;ЕСЛИ(F11="с";$C$3;0)).

Далее подсчитывается число владельцев электроплит, газовых колонок D11=СЧЁТЕСЛИ(D11:D15;"+"), E11=СЧЁТЕСЛИ(E11:E15;"+")и телефонов F11=СЧЁТЗ(F11:F15).

Последнее рассчитывается как число непустых ячеек в диапазоне.

Суммы находятся очевидным образом J11=СУММ(G11:I11), B16= СУММ(B11:B15), C16=СУММ(C11:C15) и т.п.

Пример 5.35. Матрица решений.Иногда принятие решения при выполнении расчетов сопряжено с таким большим числом условий, которые сложно или даже невозможно разместить в клетке. В этом случае можно воспользоваться так называемой матрицей решений, где содержатся все возможные комбинации параметров, влияющих на результат. Положим, возможно выполнение ряда работ (у нас до пяти) в различной комбинации, за которые нужно заплатить определенную цену. Выполнение работы, например, помечается единицей, невыполнение – нулем. Для реализации возможности поиска в столбце Код формируется строка, содержащая все нули и единицы из клеток соответствующей строки матрицы решений,

G2=B2&C2&D2&E2&F2или G2=СЦЕПИТЬ(B2;C2;D2;E2;F2).

Собственно данные находятся ниже – в списке заказов. Цена работы для первого заказа определяется функцией ВПР(), где в качестве искомой величины задается строка видов работ B7&C7&D7&E7&F7 в заказе, а поиск ведется в столбце Кодматрицы решений

G7=ВПР(B7&C7&D7&E7&F7;G$2:H$4;2;0).

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

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

  A B C D E F G H
Матрица решений Работа1 Работа2 Работа3 Работа4 Работа5 Код Цена
ОБРАБОТКА ЗАКАЗОВ
5

               
Заказ Работа1 Работа2 Работа3 Работа4 Работа5 Цена  
Заказ1  
Заказ2  
Заказ3 #Н/Д Рис. 5.35
  A B C D E F G H
Рабочие дни   ТОРГОВЛЯ В КРЕДИТ  
04.01   Заказ Банковских дней Дата платежа Сумма с кредитом
05.01   номер дата сумма
06.01   04.01 13.01
07.01   13.01 15.01
08.01   14.01 нет даты
11.01   15.01 15.01
12.01   16.01   #Н/Д
13.01   17.01     #Н/Д
14.01              
15.01              
        Рис. 5.36    

Пример 5.36. Торговля в кредит.Определим дату и сумму, выплачиваемую покупателем за товар, в зависимости от срока последующей оплаты. Чем больше срок оплаты, тем больше эта сумма, поскольку, отпуская товар без предоплаты, продавец дает покупателю кредит. Положим стоимость кредита равна 1% от исходной цены за каждый день кредита. При торговых операциях сроки оплаты обычно указываются не в календарных, а в рабочих днях. Поскольку в общем случае рабочими могут быть и воскресные и субботние дни, использование функций РАБДЕНЬ() и ЧИСТРАБДНИ() оказывается неудобным или невозможным. В виду этого приходится создавать специальную таблицу, содержащую перечень таких дней. На рисунке она помещена в столбце А. Обслуживая клиента, оператор вводит номер, дату и сумму заказа, а также число рабочих дней (в данном случае банковских), через которое должна быть произведена оплата. Наша задача определить Дату платежа, отстоящую от Даты заказа на заданное число рабочих дней и сумму платежа (Сумму с кредитом), которые мы и сообщим покупателю. Для этого нужно найти Дату заказа в столбце А и прибавить к ней число Банковских дней.Функция ПОИСКПОЗ( D4;A:A;0)+F4 находит номер строки в столбце А, отстоящей от даты заказа на число рабочих дней (F4). Чтобы извлечь из этой строки ее содержимое, воспользуемся функцией

=ИНДЕКС(A:A;ПОИСКПОЗ(D4;A:A;0)+F4;1).

На этом можно было бы остановиться, но следует предусмотреть контроль наличия в столбце А даты оплаты. Например, при дате заказа 14 января и сроке оплаты через 23 рабочих дня, функция извлечет данные из строки, отстоящей от строки 9 на 23 позиции ниже, т.е. из 32-ой строки. Поскольку сейчас вся наша таблица заканчивается датой 15 января, ниже находятся только пустые строки. Чтобы избежать неверных результатов, усложним функцию извлечения, сформировав результат "нет даты", если найденное содержимое не больше нуля

G4=ЕСЛИ(ИНДЕКС(A:A;ПОИСКПОЗ(D4;A:A;0)+F4;1)>0;ИНДЕКС(A:A;ПОИСКПОЗ(D4;A:A;0)+F4;1);"нет даты").

При получении сообщения "нет даты", пользователь должен дополнить столбец рабочих дней.

И наконец, вычисляем сумму оплаты с учетом стоимости кредита H4=E4*(1+F4*1%).

К оформлению. Здесь имеет смысл проконтролировать принадлежность и даты заказа к множеству рабочих дней. Если игнорировать этот факт, Exel выдаст сообщение об ошибке #Н/Д (например, клетки G8 и G9). Это можно сделать с помощью условного форматирования для элементов столбца D с условием следующего вида (для D4)

формула =ЕНД(ПОИСКПОЗ(D4;$A:$A;0))

Далее мы можем установить, например, цветовую заливку таких клеток, что привлечет внимание пользователя.

Отсутствие даты заказа в столбце дат может явиться следствием одной из двух причин:

1. В таблицу рабочих дней еще не включена новая дата и ее нужно внести.

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

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

  A B C D E
Про цесс Темпе- ратура Дав- ление Время ВЕС
№1
№2 2,7
№3
  Р ис. 5.37 а. Лист Вес  

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

Если время НН меньше 8-и часов, то день остается без изменения, если нет – берется следующий день. Иными словами - student2.ru Положим, возможные температурные режимы представлены уровнями в 70, 80 и 90 градусов (начиная от 70), время выдержки – уровнями в 10, 40 и 60 минут (начиная от 60), давление – 1, 3 и 5 атмосфер (от 1). Поместим эти нормативные данные на отдельном листе с именем НОРМЫ. Представим их в виде трех идентичных по структуре таблиц для фиксированных значений температуры (строки 7-10, 11-14, 15-18 листа НОРМЫ). Для формирования функций поиска нам понадобится также специальная техническая таблица Температура, содержащая указания на нужные области. В строке 2 перечислены все значения температуры. В строке 3 – адреса областей, содержащих веса выходного продукта; в строке 4 – адреса областей, содержащих значения давлений; в 5 строке – адреса областей, содержащих время обработки продукта. Все ссылки вводятся непосредственно как текстовые данные и включают также имя листа (НОРМЫ), где они находятся.

Теперь перейдем к главному – построению формул извлечения ожидаемого веса продукта из нормативных таблиц в зависимости от температуры, давления, и времени обработки. Чтобы было понятно, как построена итоговая функция, проделаем это постепенно. Для клетки Е2 листа ВЕС можем записать

=ИНДЕКС(адрес блока данных ВЕС для температуры 70 град.;

номер строки в блоке ДАВЛЕНИЕ для 2 атм. и 70 град.;

номер столбца в блоке ВРЕМЯ для 70 мин. и 70 град.)

или =ИНДЕКС(нормы!C8:E10; ПОИСКПОЗ(C2;нормы!B8:B10;1); ПОИСКПОЗ(D2;нормы!C7:E7;1)).

  A B C D Если время НН меньше 8-и часов, то день остается без изменения, если нет – берется следующий день. Иными словами - student2.ru E
  Температура  
  70гр 80гр 90гр  
вес Если время НН меньше 8-и часов, то день остается без изменения, если нет – берется следующий день. Иными словами - student2.ru нормы!C8:E10 нормы!C12:E14 нормы!C16:E18
давл. Если время НН меньше 8-и часов, то день остается без изменения, если нет – берется следующий день. Иными словами - student2.ru нормы!B8:B10 нормы!B12:B14 нормы!B16:B18
время Если время НН меньше 8-и часов, то день остается без изменения, если нет – берется следующий день. Иными словами - student2.ru нормы!C7:E7 нормы!C11:E11 нормы!C15:E15
   
70гр Давл\Время 10мин 40мин 60мин
  1атм
  3атм 1,1т 1,5т 1,7т
  5атм 1,8т 2,5т
80гр Давл\Время 10мин 40мин 60мин
  1атм 1,5т 4,5т
  3атм 1,65т 2,25т 2,55т
  5атм 2,7т 3,75т
90гр Давл\Время 10мин 40мин 60мин
  1атм
  3атм 2,2т
Рис. 5.37в. Лист НОРМЫ
3,4т

  5атм 3,6т

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

Усложним формулу, заменив непосредственные адреса на ссылки, применяя функцию ДВССЫЛ()

=ИНДЕКС(ДВССЫЛ(нормы!B3); ПОИСКПОЗ(C2;ДВССЫЛ(нормы!B4);1); ПОИСКПОЗ(D2;ДВССЫЛ(нормы!B5);1)).

Здесь используется не сама таблица (для 70º), а ссылки на нее, находящиеся в верхней части листа НОРМЫ.

Пока еще функция не позволяет работать с другими температурными режимами. Чтобы это было возможным, мы заменим фиксированные адреса нормы!$B$3, $B$4 и $B$5 на адреса, найденные функцией ГПР()

E2= ИНДЕКС(ДВССЫЛ(ГПР(B2;нормы!$B$2:$D$5;2;1));

ПОИСКПОЗ(C2;ДВССЫЛ(ГПР(B2;нормы!$B$2:$D$5;3;1));1);

Если время НН меньше 8-и часов, то день остается без изменения, если нет – берется следующий день. Иными словами - student2.ru ПОИСПОЗ(D2;ДВССЫЛ(ГПР(B2;нормы!$B$2:$D$5;4;1));1)).

Именно это выражение и использовано в таблице на листе ВЕС. Оно может с сохранением функциональности беспрепятственно копироваться во все другие ее строки.

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

Когда справочных таблиц немного, то можно, используя функцию ЕСЛИ( ) сразу записать необходимую формулу без формирования текстовых ссылок. В нашем случае можно создать листы содержащие данные для температурных режимов от 70 градусов, от 80-ти и от 90 (рис. 6.38г). Дадим им имена г70, г80 и г90 соответственно. Лист НОРМЫ более не нужен. Выражение для извлечения необходимых данных строится следующим образом

вес=ЕСЛИ(температура < 80, данные извлекаются из листа г70;

ЕСЛИ(температура < 90, данные извлекаются из листа г80;

иначе данные извлекаются из листа г90)).

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

E2=ЕСЛИ(B2<80;ИНДЕКС(г70!$A$2:$D$5; ПОИСКПОЗ(C2;г70!$A$2:$A$5;1);ПОИСКПОЗ(D2;г70!$A$2:$D$2;1));

ЕСЛИ(B2<90;ИНДЕКС(г80!$A$2:$D$5; ПОИСКПОЗ(C2;г80!$A$2:$A$5;1);ПОИСКПОЗ(D2;г80!$A$2:$D$2;1));

Наши рекомендации