На этом шаге мы рассмотрим особенности некоторых областей этого рабочего листа.
Данные о модели автомобиля вводятся в ячейку D1 (рисунок 1).
Рис.1. Фрагмент рабочего листа ВводДанных с областью ввода данных марки автомобиля, государственного регистрационного номера и данных о водителе
Можно вводить данные с клавиатуры, но подобный метод требует значительного времени на выполнение этой операции и внимательности. Поэтому введите в ячейку D1 формулу:
=ВПР(E1;Модель!$A$3:$B$20;2;ЛОЖЬ)
Рассмотрим, как можно автоматизировать этот процесс.
После создания элемента управления вызовите командой Формат | Элемент управления или комбинацией клавиш Ctrl+1 диалоговое окно Формат элемента управления. На вкладке Элемент управления в поле Формировать список по диапазону выделите область ячеек В3:В20 на рабочем листе Модель, в которую введены названия моделей автомобилей.
В поле Помещать результат в ячейку укажите адрес ячейки Е1.
Рис.2. Диалоговое окно Формат элемента управления для элемента Список
Для выбора модели автомобиля нажмите на кнопку открытия списка и выберите ее наименование в открывшемся списке (рисунок 3).
Рис.3. Элемент Список с открытым списком моделей автомобилей
В зависимости от очередности, которую занимает этот автомобиль в списке, в ячейку Е1 вводится его порядковый номер. А уже по этому номеру формула в ячейке D1 произведет поиск марки на рабочем листе Марка.
Для того чтобы застраховаться от случайного удаления формулы в ячейке D1 запишите макрос, который будет создавать эту формулу (рисунок 4) и назначьте его элементу управления Список.
Рис.4. Макросы создающие формулы в ячейках D1:D3
При каждом обращении к этому элементу управления формула будет обновляться. Аналогичные формулы находятся в ячейке D2 и D3 соответственно:
=ВПР(E2;Водители!$D$4:$E$20;2;ЛОЖЬ) =ВПР(E3;Водители!$A$4:$B$20;2;ЛОЖЬ)
На рисунке 5 показана табличная база данных на рабочем листе БазаДанных по введенным ранее путевым листам.
Рис.5. Рабочий лист БазаДанных
В столбце А находится текст, объединяющий марку автомобиля, государственный регистрационный номер и фамилию водителя.
В ячейке D5 листа ВводДанных находится формула поиска последнего показания спидометра автомобиля, находящегося в табличной базе данных на основании заданных условий поиска:
=ВПР(СЦЕПИТЬ($D$1;" Гос. Номер ";$D$2;" ";$D$3); БазаДанных!$A$2:$F$1000;6;ЛОЖЬ)
В качестве искомого значения использующегося для поиска информации используется текст объединенный функцией СЦЕПИТЬ.
В связи с тем, что данные на листе БазаДанных отсортированы по столбцу F по убыванию, то функция ВПР производит поиск до первой строки, удовлетворяющей условиям поиска. А уже затем из этой строки выбирает значение, находящееся в 6-м столбце справа, которое и является максимальным (последним) значением спидометра данного автомобиля.
Еще раз обратите внимание - поиск данных осуществляется на основании комбинации объединенных данных: выбранной модели, регистрационного номера и фамилии водителя. Это условие может не соответствовать действительности, если на данном автомобиле работает несколько водителей, но этот тот частный случай, который можно устранить, если в объединенный функцией СЦЕПИТЬ текст в столбце А на листе БазаДанных, не вводить фамилию водителя.
В ячейке D6 (последняя дата возвращения в гараж) находится аналогичная формула, но в третий аргумент введено значение 3 - поиск в столбце С листа БазаДанных.
И в ячейке D7 (линейная расхода топлива норма на 100 км) введена формула, которая определяет базовую норму расхода топлива по выбранной модели автомобиля из таблицы на листе Модель:
=ВПР(ВводДанных!$D$1;Модель!$B$3:$C$100;2;ЛОЖЬ)
Следующий блок - область ввода данных, находится в диапазоне ячеек А9:D17 (рисунок 6).
Рис.6. Фрагмент рабочего листа ВводДанных с областью ввода показаний по путевому листу
В ячейку D10 вводится показание спидометра при возвращении в гараж, а в ячейку D15 - расход топлива, указанные в путевом листе. Для того чтобы не вводить эти данные непосредственно в ячейку, с помощью функции InputBox (рисунок 9) создайте пользовательские диалоговые окна Спидометр (рисунок 7) и ГСМ (рисунок 8).
Рис.7. Диалоговое окно Спидометр для ввода показания спидометра по возвращению в гараж
Рис.8. Диалоговое окно ГСМ для ввода расхода топлива по путевому листу
Рис.9. Подпрограммы ввода даты, последнего показания по спидометру и создания пользовательских диалоговых окон
Введенные в них с клавиатуры показания будут присвоены соответствующим ячейкам.
Следовательно, дату, определенную в ячейке D6 из табличной базы данных, необходимо увеличить на один день. Тогда при нажатии на кнопку Перенос дата (рисунок 1) в ячейки D11 (дата выезда из гаража) и D12 (дата возвращения в гараж) по обрабатываемому путевому листу будет введена дата, увеличенная на один день по отношению к предыдущему путевому листу. Макрос ПереносДата (рисунок 9) выполнит эту операцию. При необходимости, введенные даты можно откорректировать непосредственно в ячейках с клавиатуры. Или же ввести в макрос строку кода VBA с вызовом функции InputBox для ввода дат выезда и возвращения в пользовательские диалоговые окна и последующему присвоению введенных значений ячейкам D11 и D12.
На следующем шаге мы продолжим изучение этого вопроса.