Главная
Регистрация
Вход
Четверг
26.06.2025
15:29
Приветствую Вас Гость | RSS
О возвышенном... кодинг и около него...=)

Мини-чат
300

Поиск

Форма входа

 Хитрости в Excel 

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), то, как правило, это означает, что система заражена макровирусами.



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


Главное меню

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сделать бесплатный сайт с uCoz
People Group
Контекстная реклама
Раскрутка сайта
Заработок на сайте