Excel: как автоматизировать преобразование числа в сумму прописью?
Программа Microsoft Office Excel может очень многое, но если вам показалось, что она чего-то не может, значит, нужно помочь ей.
Для этого можно использовать VBA (Visual Basic for Applications) – встроенную в офисный пакет версию макроязыка программирования Microsoft Visual Basic
Допустим, в xls-файле какая-то ячейка (например, E13) является итоговой, но число в ней представлено, естественно, в числовом формате, а вам нужна еще и сумма прописью. Как быть? Можно попытаться «нагуглить» в Интернете какую-нибудь программу, а можно создать свою!
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), то, как правило, это означает, что система заражена макровирусами.
Валерий Сидоров