Путеводитель по сайту

Excel: как автоматизировать преобразование числа в сумму прописью?

English version Распечатать

***

***

 

***

Программа Microsoft Office Excel может очень многое, но если вам показалось, что она чего-то не может, значит, нужно помочь ей.

Для этого можно использовать VBA (Visual Basic for Applications) – встроенную в офисный пакет версию макроязыка программирования Microsoft Visual Basic.

 

Допустим, в xls-файле какая-то ячейка (например, E13) является итоговой, но число в ней представлено, естественно, в числовом формате, а вам нужна ещё и сумма прописью. Как быть? Можно попытаться «нагуглить» в Интернете какую-нибудь программу, а можно создать свою!

 

Excel: как автоматизировать преобразование числа в сумму прописью?

 

 

1. Выделите и объедините диапазон ячеек, в котором будет указана сумма прописью (например, A14–K14).

2. Щёлкните левой кнопкой мыши в строке формул и введите следующий текст (укажите вместо E13 нужную вам ячейку):

=ЕСЛИ((E13)<=0;"Сумма прописью:______________________";"Сумма прописью: "&FirstLetter(CurText(E13)))

3. Теперь займёмся программированием:

– откройте меню Сервис –> Макрос –> Редактор Visual Basic (или нажмите Alt + F11);

– в открывшемся окне Microsoft Visual Basic выберите меню Insert –> Module;

– откроется окно Module1 (Code), введите (скопируйте и вставьте) в этом окне (без изменений!) следующий код:

 

Function Cur_txt1(cur As Currency, gender As String) As String

Dim str As String

 Dim word As String

 Dim digital As Integer

 Dim c As Currency

 c = cur

 word = ""

 If c < 1000 Then

  digital = Int(c / 100)

  Select Case digital

   Case 1

     word = "сто"

   Case 2

     word = "двести"

   Case 3

     word = "триста"

   Case 4

     word = "четыреста"

   Case 5

     word = "пятьсот"

   Case 6

     word = "шестьсот"

   Case 7

     word = "семьсот"

   Case 8

     word = "восемьсот"

   Case 9

     word = "девятьсот"

  End Select

  str = word

  word = ""

  c = c - digital * 100

  If c > 19 Then

   digital = Int(c / 10)

   Select Case digital

    Case 2

      word = "двадцать"

    Case 3

      word = "тридцать"

    Case 4

      word = "сорок"

    Case 5

      word = "пятьдесят"

    Case 6

      word = "шестьдесят"

    Case 7

      word = "семьдесят"

    Case 8

      word = "восемьдесят"

    Case 9

      word = "девяносто"

   End Select

   If word <> "" Then

     If str <> "" Then

      str = str + " " + word

     Else

      str = word

     End If

   End If

   word = ""

   c = c - digital * 10

  End If

   Select Case c

    Case 1

      word = "один"

    Case 2

      word = "два"

    Case 3

      word = "три"

    Case 4

      word = "четыре"

    Case 5

      word = "пять"

    Case 6

      word = "шесть"

    Case 7

      word = "семь"

    Case 8

      word = "восемь"

    Case 9

      word = "девять"

    Case 10

      word = "десять"

    Case 11

      word = "одиннадцать"

    Case 12

      word = "двенадцать"

    Case 13

      word = "тринадцать"

    Case 14

      word = "четырнадцать"

    Case 15

      word = "пятнадцать"

    Case 16

      word = "шестнадцать"

    Case 17

      word = "семнадцать"

    Case 18

      word = "восемнадцать"

    Case 19

      word = "девятнадцать"

   End Select

   If (c <= 2) And ((gender = "w") Or (gender = "W")) Then

    Select Case c

      Case 1

        word = "одна"

      Case 2

        word = "две"

    End Select

   End If

    If word <> "" Then

     If str <> "" Then

      str = str + " " + word

     Else

      str = word

     End If

    End If

 Else

  If c < 1000000 Then

   str = Cur_txt1(Int(c / 1000), "w")

   word = ""

   Select Case Int(c / 1000) Mod 10

    Case 1

     If Int(c / 1000) Mod 100 = 11 Then

      word = "тысяч"

     Else

      word = "тысяча"

     End If

    Case 2, 3, 4

     If (Int(c / 1000) Mod 100 > 10) And (Int(c / 1000) Mod 100 < 20) Then

      word = "тысяч"

     Else

      word = "тысячи"

     End If

    Case Else

     word = "тысяч"

   End Select

   If word <> "" Then

    str = str + " " + word

   End If

   word = Cur_txt1(c - Int(c / 1000) * 1000, "m")

   If word <> "" Then

    str = str + " " + word

   End If

  Else

   If c < 1000000000 Then

    str = Cur_txt1(Int(c / 1000000), "m")

    Select Case Int(c / 1000000) Mod 10

     Case 1

      If Int(c / 1000000) Mod 100 = 11 Then

       word = "миллионов"

      Else

       word = "миллион"

      End If

     Case 2, 3, 4

     If (Int(c / 1000000) Mod 100 > 10) And (Int(c / 1000000) Mod 100 < 20) Then

      word = "миллионов"

     Else

      word = "миллиона"

     End If

     Case Else

      word = "миллионов"

    End Select

    str = str + " " + word

    word = Cur_txt1(c - Int(c / 1000000) * 1000000, "m")

    If word <> "" Then

     str = str + " " + word

    End If

   Else

  End If

  End If

 End If

 Cur_txt1 = str

End Function

 

Public Function CurText(cur As Currency) As String

  Dim tmp As String

  If cur < 1000000000 Then

    tmp = ""

    If cur >= 1 Then

      tmp = Cur_txt1(Int(cur), "m") & " руб."

    End If

    If cur - Int(cur) >= 0.1 Then

       tmp = tmp & " " & Int((cur - Int(cur)) * 100) & " коп."

    Else

       tmp = tmp & " 0" & Int((cur - Int(cur)) * 100) & " коп."

    End If

    CurText = tmp

  Else

    CurText = ""

  End If

End Function

 

Public Function FirstLetter(str As String) As String

If str <> "" Then

  FirstLetter = UCase(Left(str, 1)) + Right(str, Len(str) - 1)

 Else

  FirstLetter = ""

 End If

End Function

 

Сохраните изменения в файле. Пользуйтесь!

 

 

Примечания

1. Рекомендации данной статьи предназначены для русифицированной версии Microsoft Office Excel XP/2003, в других версиях возможны незначительные отклонения.

2. Чтобы созданная нами программа работала:

– откройте меню Сервис –> Макрос –> Безопасность…;

– в открывшемся окне Безопасность на вкладке Уровень безопасности установите переключатель Низкая, на вкладке Надежные издатели установите флажки Доверять всем установленным надстройкам и шаблонам и Доверять доступ к Visual Basic Project –> OK.

3. Если вы не можете запустить Редактор Visual Basic (при этом могут быть недоступны опции Макрос и Редактор Visual Basic), то, как правило, это означает, что система заражена макровирусами.

 

Валерий Сидоров

 

 

***

Раскрывая тайны Windows…

Дело о…

Статьи о ПК и PC

Вирусы vs. антивирусы

Apple = iСтив + iPod + iPhone + iPad + iTunes + iMac + …

Apps for iPad, iPhone, iPod touch…

 

 

 

 

 

Путеводитель по сайту

18+

© Сидоров В.В. 2016. All rights reserved.

Авторство всех материалов сайта http://netler.ru принадлежит Валерию Сидорову и охраняется Законом о защите авторских прав. Использование материалов сайта в offline-изданиях без согласования с автором категорически запрещается. В online-изданиях разрешается использовать материалы сайта при условии сохранения имени и фамилии автора и активной гиперссылки на сайт http://netler.ru.