Формирование числительных

Формирование количественных числительных осуществляется в третьем блоке таблицы, в диапазоне ячеек А5:Н13 . Описание его работы начнем со столбца "Единицы". Формулы данного столбца составлены с учетом особенности образования числительных для значений с 11 по 19. В ячейке G5 содержится такая формула:
=ЕСЛИ (G4=1;ЕСЛИ(F4=1; "одиннадцать"; "один");G6)
Если в ячейках G4 и F4 находится число 1, то функция ЕСЛИ возвратит текст одиннадцать. Если же значение 1 находится только в ячейке F4, а ячейка G4 содержит другое число, то возвращается текст один (рубль). Если в ячейке F4 находится значение, отличное от 1 , то формула переадресовывает решение задачи в ячейку G6. В ячейке G6 находится аналогичная формула:
=ЕСЛИ (G4-2;ЕСЛИ(F4=1; " двенадцать "; "два" );G7)
В ней производится анализ значений ячеек G4 и F4 на предмет того, какое числительное писать: двенадцать или два. Если условия не выполняются, то осуществляется переадресация в ячейку G7 и т. д. Анатогичными формулами заполняются ячейки столбца G по 13-ю включительно.
В столбце "Десятки" находятся формулы, которые формируют количественные числительные для десятков. Рассмотрим, по какому алгоритму они работают. В ячейке F5 содержится такая формула:
=ЕСЛИ (F4=0;"";ЕСЛИ(F4=1;
ЕСЛИ (G4-0;" десять";"") ;F6))
Сначала она производит проверку ячейки F4 на предмет наличия там значения 0. Если это значение присутствует (то есть в числе нуль десятков), формула выдает пустое значение.
Если же в ячейке F4 находится другое значение, то начинает работу первая функция ЕСЛИ. Она проверяет, находится ли в ячейке F4 значение 1. Если это так, то надо посмотреть, какое значение находится в столбце "Единицы" (ячейка G4). Это делает вторая функция ЕСЛИ. В случае, когда там находится значение О, формула выдает текст десять. Если же в ячейке G4 находится любое другое значение, формула выдает пустое значение (""). Таким образом учитывается тот факт, что числительные для значений с 1 1 по 19 уже сформированы в столбце "Единицы".
Если в ячейке F4 находится значение, отличное от 1, управление передается в ячейку F6. В ячейке F6, в свою очередь, записана следующая формула:
=ЕСЛИ(F4=2; "двадцать"; F7)
Когда в ячейке F4 находится значение 2, формула возвращает текст двадцать. В противном случае происходит переадресация в ячейку F7.
Формулы, аналогичные этой, необходимо занести в ячейки столбца F по 12-ю включительно.
Числительные для сотен формируются в столбце Е. В ячейке Е5 содержится такая формула:
=ЕСЛИ(F4=0; "" ;
ЕСЛИ (Е4=1; "сто";Е6) )
Сначала она производит проверку ячейки Е4 на предмет нахождения там значения 0. Если это значение присутствует, формула выдает пустое значение (в числе нуль сотен).
Если же там находится другое значение, формула продолжает проверку при помощи второй логической функции ЕСЛИ. Когда в ячейке Е4 находится значение 1, выдается текст сто. В противном случае выполняется переадресация в ячейку Е6.
В ячейке Е6 находится следующая формула:
=ЕСЛИ(Е4=2;"двести";Е7)
Она выдает текст двести, если в ячейке Е4 находится значение 2, и передает управление в ячейку Е7 в противном случае.
Аналогичными формулами следует заполнить ячейки столбца Е по 12-ю включительно.
ПРИМЕЧАНИЕ

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

Скопируйте диапазон ячеек E5:G13, в котором формируются числительные для единиц, десятков и сотен (0-999), в диапазон B5:D13 , формирующий написание прописью следующих разрядов (тысяч). Исправлений вносить не требуется.
Итак, мы заполнили формулами область B5:G13, в которой осуществляется запись прописью чисел от 0 до 999999.
Теперь приступим к формированию числительных для разряда миллионов. Эта операция выполняется в столбце А. В ячейке А5 находится следующая формула:
=ЕСЛИ(А4=0;"";ЕСЛИ(А4=1;"один";А6))
Она анализирует значение в ячейке А4. Если оно равно 0, то ничего не пишется. Если в ячейке А4 находится 1, то пишется текст один (миллион). Если в ячейке А4 содержится другое значение, происходит переадресация в ячейку А6 и т. д. Аналогичными формулами заполнены ячейки столбца А по 12-ю включительно.
Итак, числительные для разрядов мы сформировали, теперь приступим к созданию названий разрядов.
Формирование названий разрядов
В четвертом блоке, включающем ячейки А14 и D14, производится формирование названий разрядов — миллионов и тысяч. При этом надо определить для этих слов правильное падежное окончание. Для этого осуществляется анализ последней буквы в соответствующем числительном. В ячейке А14 находится следующая формула:

=ЕСЛИ(А4=0;"";ЕСЛИ(ПРАВСИМВ(А5;1)="а";"миллиона";
ЕСЛИ(ПРАВСИМВ(А5;1)="е";"миллиона";
ЕСЛИ(ПРАВСИМВ(А5;1)="и";"миллиона";
ЕСЛИ(ПРАВСИМВ(А5;1)="н";"миллион";"миллионов")))))

Если в ячейке А4 находится 0, то не пишется ничего. Если числительное заканчивается, например, на букву "а" (два) или "е" (четыре), то формула возвращает текст миллиона. Аналогичная проверка проводится для всех возможных окончаний.
Для определения того, какой буквой заканчивается числительное, используется текстовая функция ПРАВСИМВ (рассмотрена в главе 4).
В ячейке D14 при помощи следующей формулы формируется название для тысяч:

=ЕСЛИ(В4+С4+D4=0;"";ЕСЛИ(ПРАВСИМВ(D5;1)="а";"тысяча";
ЕСЛИ(ПРАВСИМВ(D5;1)="е";"тысячи";
ЕСЛИ(ПРАВСИМВ(D5;1)="и";"тысячи";"тысяч"))))

Сначала в формуле суммируются значения, находящиеся в ячейках В4, С4 и D4. Это делается для того, чтобы определить, присутствуют л и в числе разряды тысяч. А затем, как и в предыдущей формуле, выполняется анализ окончания числительного и на основе его результатов выбирается падежное окончание для слова "тысяча".
Формирование названия единицы измерения
Эта операция осуществляется в пятом блоке, который состоит из одной ячейки G14. Алгоритм основан на том же принципе, что и алгоритм предыдущего блока. Отличие заключается в том, что склоняется единица измерения — рубль.
Формула в ячейке G14 имеет следующий вид:

=ЕСЛИ(А4+B4+С4+D4+Е4+F4+G4=0;"Нуль рублей";
ЕСЛИ(ПРАВСИМВ(G5;1)="H";"рубль";
ЕСЛИ(ПРАВСИМВ(G5;1)="a";"рубля";
ЕСЛИ(ПРАВСИМВ(G5;1)="е";"рубля";
ЕСЛИ(ПРАВСИМВ(G5;1)="и";"рубля";"рублей")))))

Сначала в формуле проверяется, присутствует ли в данном числе целое значение рублей. Если нет, то выдается надпись Нуль рублей.

Соединение всех компонентов надписи и их текстовая обработка
В шестом блоке применяются текстовые функции, которые обрабатывают и соединяют результаты вычислений предыдущих блоков. Формулы блока (диапазон А15:А21) показаны на, а алгоритм — на.
В ячейке А15 находится следующая формула:

=СЦЕПИТЬ(А5;" ";А14;" ";В5;" ";С5;" ";D5;" ";
D14;" ";Е5;" ";F5;" ";G5;" ";G14;" ";H3;H4;" коп")

Она объединяет в единое целое все компоненты, предназначенные для написания суммы прописью. В данной формуле содержатся ссылки на все ячейки, в которых находятся сформированные числительные и названия разрядов. Между ссылками на ячейки в функции СЦЕПИТЬ нужно обязательно поставить пробелы.
Например, при формировании прописью числа 1 111 111,11 аргументы функции будут иметь такие значения:

=СЦЕПИТЬ("один";" ";"миллион";" ";"сто";" ";
"одиннадцать";" ";"тысяч";" "; ...   и  т.д.)

В ячейке А16 производится удаление из текста лишних пробелов:

=СЖПРОБЕЛЫ(А15)

Для этого применяется текстовая функция СЖПРОБЕЛЫ , которая оставляет в тексте только одиночные пробелы. Функцию СЖПРОБЕЛЫ можно применять для обработки текстов, полученных из других прикладных программ, если эти тексты содержат избыточные пробелы. Синтаксис функции имеет следующий вид:

СЖПРОБЕЛЫ(текст)

где текст — это текст, из которого удаляются пробелы.
Однако зачем удалять пробелы, если между всеми ссылками на ячейки заданы одиночные пробелы? Это делается для того, чтобы при написании прописью небольшого числа, например "Три рубля 45 коп." перед словом "Три" не было лишних пробелов. Если пробелы не удалить, надпись будет выглядеть так: " Три рубля 45 коп.".
Теперь надо обеспечить правильное употребление строчных и прописных букв в надписи. Надпись будет начинаться с прописной буквы. Это делается при помощи формул, которые находятся в ячейках А17 и А18.
В ячейке А17 содержится следующая формула:

=ЛЕВСИМВ(A16;1)

Она выделяет самый левый (то есть первый) символ строки после того, как из нее удалены лишние пробелы.
Формула в ячейке А18 назначает для этого символа прописную букву:

=ПРОПИСH(А17)

Здесь использована функция ПРОПИСН, которая делает все буквы в тексте прописными. Синтаксис функции таков:

ПРОПИСН(текст)

где текст — это текст, символы которого преобразуются в прописные. Текст может быть ссылкой на ячейку или текстовой строкой.
На данном этапе можно производить окончательное формирование надписи. Для этого надо соединить первую букву надписи (ячейка А18) с остальной ее частью.
Сначала определяем, сколько символов находится в строке после удаления лишних пробелов. Это делается в ячейке А19:

=ДЛСТР (А16)

После этого извлекаем из строки все символы, кроме первого. Предназначенная для этого формула находится в ячейке А20:

=ПРАВСИМВ(А16;А19-1)

Для того чтобы определить количество извлекаемых символов, необходимо из общего количества символов текстовой строки (содержится в ячейке А19) вычесть 1.
Теперь компоненты надписи можно объединить. Для этого запишите в ячейку А21 следующую формулу:

=СЦЕПИТЬ(А18;А20)