Число прописью в Excel (динамический вариант)

Запишем число прописью в Excel без использования VBA. Вспомогательные диапазоны разместим в личной книге макросов. Кроме того, добавим руб./коп. для записи денежных сумм, например: четыреста сорок четыре руб. 00 коп.

Иногда требуется записать число прописью: 256 записать как двести пятьдесят шесть. Набирать этот текст безумно скучно, кроме того легко ошибиться, поэтому давно написаны макросы на VBA, которые легко справляются с этой задачей.

В статье Число прописью (статичный вариант) приведено решение этой задачи позволяющей перевести число в текстовую форму по следующему алгоритму:

  • вводим число в определенную ячейку;
  • с помощью формул, вспомогательных диапазонов с текстом и имен получаем число прописью;
  • копируем результат вычисления формулы (число прописью) в Буфер обмена;
  • вставляем текст в любую открытую книгу «Как значение» (Главная/ Буфер обмена/ Вставить/ Вставить как значение).

Это не всегда удобно. Хочется по аналогии с функциями на VBA написать что то вроде =ЧислоПрописью(А1) и получить результат. Все промежуточные вычисления должны быть «за кадром». Но, создание пользовательских функций это прерогатива VBA.

Тем не менее, можно предложить следующее решение с помощью обычных формул:

  • разместить в Личной книге макросов (PERSONAL.XLSB) вспомогательные диапазоны, содержащие некоторые числа прописью (от 0 до 999);
  • создать формулу, переводящую в текст любое число от 0 до 1 млрд. с помощью вспомогательных диапазонов и имен;
  • в любой книге, где требуется записать число прописью создать Именованную формулу ЧислоПрописью с относительной ссылкой на исходное число (относительную ссылку можно создать так, чтобы она позволяла выводить число прописью, например, в соседней ячейке слева от исходного числа).

В результате вышеуказанных манипуляций можно будет, например, записав в ячейке G6 исходное число, а в ячейке G7 формулу =ЧислоПрописью, и получить нужный результат.

Все это реализовано в файле примера.

Как и в примере статьи Число прописью (статичный вариант) на листе Служ размещены вспомогательные диапазоны, содержащие некоторые числа прописью в Excel.

Теперь эти диапазоны длиннее (числа от 1 до 999) и содержат слова тысяча и миллион с учетом склонения. Также создан диапазон для отображения слова Рублей с учетом склонения.

Теперь все готово для записи формулы переводящей исходное число (ячейка B6) в текст:
=СЖПРОБЕЛЫ(
ИНДЕКС(Миллионы;ОСТАТ(ОТБР(B6/1000000);1000000)+1)&" "&
ИНДЕКС(Тысячи;ОСТАТ(ОТБР(B6/1000);1000)+1)&" "&
ИНДЕКС(Единицы;ОСТАТ(B6;1000)+1))

Задача в принципе решена, осталось только разместить вспомогательные диапазоны в Личную книгу макросов PERSONAL.XLSB, для того чтобы формула, переводящая число в текст была доступна в любой книге.

В Windows XP эта книга находится в папке C:\Documents and Settings\имя_пользователя\Application Data\Microsoft\Excel\XLStart, откуда она будет автоматически загружается при каждом запуске приложения Excel. В Windows Vista эта книга хранится в папке C:\Users\имя_пользователя\Application Data\Microsoft\Excel\XLStart.

Если Личная книга макросов еще не была создана, то скопируйте лист Служ из файла примера в новую книгу, и сохраните ее в директорию C:\Documents and Settings\имя_пользователя\Application Data\Microsoft\Excel\XLStart (для XP) под именем PERSONAL.XLSB.

Если Личная книга макросов уже была ранее создана, то через меню Вид/ Окно/ Отобразить отобразите ее, скопируйте в нее лист Служ, сохраните Личную книгу макросов (можно ее потом скрыть Вид/ Окно/ Скрыть).

Теперь откройте книгу, в которой нужно записать число прописью. Исходное число разместите, например, в ячейке А1. Введите в нужную ячейку формулу:
=ЕСЛИ(A1;СЖПРОБЕЛЫ(
ИНДЕКС(PERSONAL.XLSB!Миллионы;ОКРУГЛВНИЗ(A1;-6)/1000000+1)&" "&
ИНДЕКС(PERSONAL.XLSB!тысячи;ОСТАТ(ОТБР(A1/1000);1000)+1)&" "&
ИНДЕКС(PERSONAL.XLSB!Единицы;ОСТАТ(A1;1000)+1)&" руб. "&ТЕКСТ((A1-ЦЕЛОЕ(A1))*100;"00")&" коп.");"ноль руб. 00 коп.")

Формула отобразит число прописью. Ячейки, содержащие исходное число и формулу, можно перенести в любое место в книге или даже в другую книгу.

Чтобы еще больше приблизиться к идеалу создадим именованную формулу ЧислоПрописью. Для этого:

  • выделите ячейку B1;
  • через меню Формулы/ Определенные имена/ Присвоить имя создайте именованную формулу ЧислоПрописью;
  • в поле Диапазон введите формулу указанную выше:
  • нажмите ОК;
  • в ячейке В1 введите формулу =ЧислоПрописью
  • ячейка В1 будет содержать число прописью.

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

При пересылке файла, например, по электронной почте, формула будет продолжать работать, не смотря на то, что Личная книга макросов не пересылалась, т.е. Ваши коллеги получившие файл, смогут с ним работать как Вы.

Связанные статьи

Похожие задачи
Прочитайте другие статьи, решающие похожие задачи в MS Excel. Это позволит Вам решать широкий класс подобных задач.
Средняя: 3.8 (5 оценок)

Комментарии

MCH

Решение без VBA, одной формулой:
http://www.excelworld.ru/forum/3-3521-1

Михаил Ч. (MCH) (не проверено)

топик случайно удалили, новая ссылка:
http://www.excelworld.ru/forum/3-9902-1

Гость (не проверено)

попробуем, полезная фича

xaxa74

А "файл примера" для чайников где?

xaxa74

всего-то не обновил страницу...чайник...:(