Написание числовых данных прописью

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

ДЕНЬНЕД (дата_в_числовом_формате; тип)

Она возвращает день недели, соответствующий первому аргументу дата_в_чи-словом_формате. День недели будет представлен как целое число в интервале от 1 (воскресенье) до 7 (суббота).
Аргумент дата_в_числовом_формате — это код дата-время, который Excel применяет для операций в датами. Данный аргумент можно задавать и в текстовом виде, заключив строку в кавычки. Тип — это число, определяющее нумерацию дней недели. Аргумент Тип может принимать следующие значения:
— 1 (либо опущено) — число от 1 (воскресенье) до 7 (суббота);
— 2 — число от 1 (понедельник) до 7 (воскресенье);
— 3 — число от 0 (понедельник) до 6 (воскресенье).
Таким образом, в зависимости от типа, указанного в функции ДЕНЬНЕД, 5-й день недели может быть четвергом, пятницей или субботой. Чтобы не задавать второй аргумент, будем считать, что 5-й день недели — это четверг.
Введите в ячейку А1 любую догу, например 6.01.2002 г. Для наглядности задайте для этой ячейки формат даты. Перейдите в ячейку А2 и вызовите панель функции ДЕНЬНЕД . В поле Дата_как_число введите адрес ячейки А1.
После этих действий ячейка А2 будет содержать следующую формулу:

=ДЕНЬНЕД(А1)

Эта формула вернет результат, равный 1. Значит, интересующий нас день — воскресенье.
Теперь приступим к реализации алгоритма, позволяющего написать прописью название этого дня недели. Введите в ячейку A3 формулу, созданную на основе логической функции ЕСЛИ:

=ЕСЛИ(А2=1;"Воскресенье";А4)

Формула сравнивает номер дня недели со значением 1. Если результатом сравнения является ИСТИНА, то в ячейке A3 появится текст Воскресенье. В противном случае значение ячейки A3 будет определяться содержимым ячейки А4.
В ячейке А4 должна находиться аналогичная формула:

=ЕСЛИ(А2=2;"Понедельник";А5)

Если номер дня недели отвечает понедельнику (равен 2), то в этой ячейке появится текст Понедельник. Данное значение затем передается в ячейку A3.
Заполните аналогичными формулами для других дней недели ячейки А5:А7. А вот в ячейку А8 поместите следующую формулу:

=ЕСЛИ(А2=6;"Пятница";"Суббота")

Она не содержит ссылок на другие ячейки, поскольку мы уже перечислили все дни недели.
Алгоритм, реализованный при помощи этих формул, представлен на.
Разработанная нами таблица располагается в диапазоне ячеек А1:А8, ее входом является ячейка А1, выходом — ячейка A3. На показана таблица с формулами, а на — с числовыми значениями.
Воспользуемся методом вложения формул и минимизируем эту таблицу. На ее базе можно создать модуль, состоящий всего из двух ячеек. Ячейка А1 будет служить входом модуля, а ячейка А2, в которой производятся вычисления, — выходом. Ячейка А2 должна содержать следующую формулу:

=ЕСЛИ(ДЕНЬНЕД(А1)=1;"Воскресенье";
ЕСЛИ(ДЕНЬНЕД(А1)=2;"Понедельник";
ЕСЛИ(ДЕНЬНЕД(А1)=3;"Вторник";
ЕСЛИ(ДЕНЬНЕД(А1)=4;"Среда";
ЕСЛИ(ДЕНЬНЕД(А1)=5;"Четверг";
ЕСЛИ(ДЕНЬНЕД(А1)=6;"Пятница","Суббота"))))))

Данный модуль можно перемещать по рабочему листу и копировать в другие книги (файлы) и рабочие листы. Подкорректировав ссылку в формуле, вы можете изменить расположение ячеек входа и выхода: разместить их не в одной строке, а в одном столбце .
Дата прописью
Модуль для написания даты прописью, который мы сейчас рассмотрим, может найти более широкое применение (в частности, он пригодится при составлении платежных поручений и накладных). Задача состоит в том, чтобы заставить Excel написать дату словами, например, дату 12.02.2002 представить в виде текста "от 12 февраля 2002 года".
Решить эту задачу можно следующим методом: сначала разбить дату на составляющие, день месяц и год (причем для месяца сформировать не его порядковый номер в году, а название), а после этого все компоненты соединить в текстовой строке.
Таблица, построенная на базе этого алгоритма, с формулами и числовым примером показана на.
Ячейки таблицы выполняют следующие функции:
— ячейка А1 — служит входом (содержит дату в формате Excel);
— ячейка А2 — определяет номер дня месяца;
— ячейка A3 — определяет номер месяца;
— ячейка А4 — определяет год;
— ячейки А5:А15 — обеспечивает написание названия месяца;
— ячейка А16 — добавляет нуль перед номером дня месяца, если этот номер меньше или равен 9;
— ячейка А17 — служит выходом (содержит дату прописью).
Итак, нам необходимо выделить в дате день, месяц и год (ячейки А2, A3 и А4). Для определения дня задействуем функцию ДЕНЬ, принадлежащую к категории Дата и время. Функция возвращает номер дня в месяце для даты, указанной в числовом формате. День возвращается как целое число из диапазона от 1 до 31. Синтаксис функции имеет следующий вид:

ДЕНЬ(дата_в_числовом_формате)

Поместите табличный курсор в ячейку А2 и вызовите панель функции ДЕНЬ . В поле Дата_как_число введите адрес ячейки А1. Вы должны получить в ячейке А2 формулу, которая определяет день месяца, указанный во введенной в ячейку А1 дате:

=ДЕНЬ(А1)

Для определения года используем функцию ГОД, которая также принадлежит к категории Дата и время. Функция возвращает год, соответствующий аргументу дата_в_числовом_формате. Год определяется как целое число в интервале от 1900 до 9999. Синтаксис функции следующий:

ГОД(дата_в_числовом_формате)

Разместите табличный курсор в ячейке A3 и вызовите панель функции ГОД . В поле Дата_как_число введите адрес ячейки А1. Формула в ячейке A3 должна имеет такой вид:

=ГОД(А1)

Таким образом, в этой ячейке будет содержаться номер года от рождества Христова в дате, указанной в ячейке А1.
Теперь приступим к формированию названия месяца. Для определения номера месяца воспользуемся функцией МЕСЯЦ, принадлежащей к категории Дата и время. Функция возвращает месяц, соответствующий аргументу дата_в_число-вом_формате. Месяц определяется как целое в интервале от 1 (январь) до 12 (декабрь). Синтаксис функции такой:

МЕСЯЦ(дата_в_числовом_формате)

Установите табличный курсор в ячейку А4 и вызовите панель функции МЕСЯЦ . В поле Дата_как_число введите адрес ячейки А1. Полученная формула должна иметь вид:

=МЕСЯЦ(А1)

В данном случае функция МЕСЯЦ определяет, какой номер месяца указан в дате, находящейся в ячейке А1.
В области А5:А15 необходимо разместить формулы, построенные на базе логической функции ЕСЛИ. С их помощью реализуется алгоритм, который аналогичен алгоритму, использованному для определения названия дня недели. Однако теперь вместо номеров дней недели указаны номера месяцев в году. В ячейке А5 формируется название месяца в родительном падеже. Занесите в ячейку А5 следующую формулу:

=ЕСЛИ(А4=1;"января";А6)

В ячейках А6:А14 расположите аналогичные формулы для других месяцев, а в ячейку А15 введите несколько другую формулу:

=ЕСЛИ(А4=11;"ноября";"декабря")

Мы хотим, чтобы номер дня, если он меньше 10, был представлен с предшествующим нулем. Реализовать это можно с применением помещенной в ячейку А16 формулы

=ЕСЛИ(А2<=9;0;"")

Если порядковый номер дня месяца меньше или равен 9, функция ЕСЛИ возвращает 0. В противном случае она выдает пустую строку, потому что между кавычками в третьем аргументе ничего не введено.
Результат формируется в ячейке А17 с использованием формулы

="от"&А16&А2&" "&А5&" "&АЗ&" года."

В этой формуле при помощи символов "&" производится конкатенация (соединение) текстовых строк и содержимого ячеек, в которых находятся определенные ранее элементы даты. Перед датой добавляется предлог "от" (это нужно, в частности, для платежного поручения). Далее следует адрес ячейки А16. Она предназначена для вставки предшествующего нуля перед датой в случае, когда номер дня меньше 10. Указание адреса ячейки А2 приводит к вставке дня месяца. Дальше следует пробел (" "), перед названием месяца. В ячейке А5 находится название месяца. После него опять надо вставить пробел (" "). Ячейка A3 содержит год. Предлог " от " в начале формулы можно удалить или заменить другим.
Для конкатенации элементов можно использовать не только символ "&". В Excel есть текстовая функция СЦЕПИТЬ. Для ее вызова также применяется мастер функций. Панель функции приведена. С помощью этой функции можно получить формулу, которая аналогична предыдущей, но более удобна для восприятия:

=СЦЕПИТЬ("от";А16;А2;" ";А5;" ";АЗ;" года.")

Модуль, формирующий дату прописью
Как и в случае определения названия дня недели, воспользуемся методом вложения формул и создадим модуль, формирующий дату прописью. Этот модуль будет располагаться в диапазоне А1:АЗ и состоять из трех ячеек . Модуль из двух ячеек в данном случае не получится, поскольку в Excel допускается только 7 уровней вложения функций.
В ячейке А2 модуля должна находиться следующая формула:
=ЕСЛИ(МЕСЯЦ(С1)=5;"мая";
ЕСЛИ(МЕСЯЦ(С1)=6;"июня";
ЕСЛИ(МЕСЯЦ(С1)=7;"июля";
ЕСЛИ(МЕСЯЦ(С1)=8;"августа";
ЕСЛИ(МЕСЯЦ(С1)=9;"сентября";
ЕСЛИ(МЕСЯЦ(С1)=10;"октября";
ЕСЛИ(МЕСЯЦ(С1)=11;"ноября";"декабря")))))))
В ячейке A3 при помощи приведенной ниже формулы будет формироваться результат:
=СЦЕПИТЬ(" от ";
ЕСЛИ(ДЕНЬ(С1)<=9;0;"") ;
ДЕНЬ (C1);" ";
ЕСЛИ (МЕСЯЦ (С1)=1; "января" ;
ЕСЛИ (МЕСЯЦ (С1)=2; "февраля" ;
ЕСЛИ (МЕСЯЦ (C1)=3; "марта";
ЕСЛИ (МЕСЯЦ (С1)=4; "апреля" ;С2))));" ";ГОД(С1)x ;"года.")
ПРИМЕЧАНИЕ

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