Если вам требуется написать цифры на украинском языке, то вы так же можете воспользоваться пользовательской функцией PropisUkr, этой функции нет в самом Excel, ее вы можете вставить самостоятельно с помощью макроса.
Смотрите также: Как написать суммы и цифры прописью на русском или английском языке (универсальная функция)
Пользовательская функция для перевода чисел в текстовом виде на украинском языке выглядит следующим образом:
=PropisUkr(n;hryvnias;kopecks)
где
n — ссылка на ячейку с суммой, числом
hryvnias — необязательный аргумент, позволяет показывать (1) или не показывать (0) слово гривны
kopecks — необязательный аргумент, позволяет показывать (1) или не показывать (0) в конце копейки.
Чтобы сделать активной данную функции необходимо добавить код в VBA для этого:
- нажмите сочетание клавиш ALT+F11, чтобы открыть редактор Visual Basic
- добавьте новый пустой модуль через меню Insert — Module
- скопируйте и вставьте туда код этой функции, указанный ниже:
Макрос пользовательской функции для перевода чисел в текстовом виде на украинском языке
Function PropisUkr(n As Double, Optional hryvnias As Variant = False, Optional kopecks As Variant = False) As String Nums0 = Array("", "одна ", "дві ", "три ", "чотири ", "п'ять ", "шість ", "сім ", "вісім ", "дев'ять ") Nums1 = Array("", "один ", "два ", "три ", "чотири ", "п'ять ", "шість ", "сім ", "вісім ", "дев'ять ") Nums2 = Array("", "десять ", "двадцять ", "тридцять ", "сорок ", "п'ятдесят ", "шістдесят ", "сімдесят ", "вісімдесят ", "дев'яносто ") Nums3 = Array("", "сто ", "двісті ", "триста ", "чотириста ", "п'ятсот ", "шістсот ", "сімсот ", "вісімсот ", "дев'ятсот ") Nums4 = Array("", "одна ", "дві ", "три ", "чотири ", "п'ять ", "шість ", "сім ", "вісім ", "дев'ять ") Nums5 = Array("десять ", "одинадцять ", "дванадцять ", "тринадцять ", "чотирнадцять ", "п'ятнадцять ", "шістнадцять ", "сімнадцять ", "вісімнадцять ", "дев'ятнадцять ") Sum = WorksheetFunction.Round(CDbl(n), 2) whole = Int(Sum) fraq = Format(Round(Abs(Sum - whole) * 100), "00") hryvnias = CBool(hryvnias) kopecks = CBool(kopecks) If Sum < 0 Then whole = 0 fraq = Format(0, "00") ed_txt = "Ноль " GoTo rrr End If ed = Class(n, 1) dec = Class(n, 2) sot = Class(n, 3) tys = Class(n, 4) dectys = Class(n, 5) sottys = Class(n, 6) mil = Class(n, 7) decmil = Class(n, 8) sotmil = Class(n, 9) bil = Class(n, 10) Select Case bil Case 1 bil_txt = Nums1(bil) & "мільярд " Case 2 To 4 bil_txt = Nums1(bil) & "мільярди " Case 5 To 9 bil_txt = Nums1(bil) & "мільярдів " End Select Select Case sotmil Case 1 To 9 sotmil_txt = Nums3(sotmil) End Select Select Case decmil Case 1 mil_txt = Nums5(mil) & "мільйонів " GoTo www Case 2 To 9 decmil_txt = Nums2(decmil) End Select Select Case mil Case 0 If decmil > 0 Then mil_txt = Nums4(mil) & "мільйонів " Case 1 mil_txt = Nums1(mil) & "мільйон " Case 2, 3, 4 mil_txt = Nums1(mil) & "мільйона " Case 5 To 9 mil_txt = Nums1(mil) & "мільйонів " End Select If decmil = 0 And mil = 0 And sotmil <> 0 Then sotmil_txt = sotmil_txt & "мільйонів " www: sottys_txt = Nums3(sottys) Select Case dectys Case 1 tys_txt = Nums5(tys) & "тисяч " GoTo eee Case 2 To 9 dectys_txt = Nums2(dectys) End Select Select Case tys Case 0 If dectys > 0 Then tys_txt = Nums4(tys) & "тисяч " Case 1 tys_txt = Nums4(tys) & "тисячa " Case 2, 3, 4 tys_txt = Nums4(tys) & "тисячі " Case 5 To 9 tys_txt = Nums4(tys) & "тисяч " End Select If dectys = 0 And tys = 0 And sottys <> 0 Then sottys_txt = sottys_txt & " тисяч " eee: sot_txt = Nums3(sot) Select Case dec Case 1 ed_txt = Nums5(ed) GoTo rrr Case 2 To 9 dec_txt = Nums2(dec) End Select ed_txt = Nums0(ed) If whole < 1 Then ed_txt = "Ноль " rrr: Select Case Class(n, 1) + Class(n, 2) * 10 Case 1, 21, 31, 41, 51, 61, 71, 81, 91 grv_text = "гривня" Case 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94 grv_text = "гривні" Case Else grv_text = "гривень" End Select Select Case fraq Case 1, 21, 31, 41, 51, 61, 71, 81, 91 kop_text = "копiйка" Case 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94 kop_text = "копійки" Case Else kop_text = "копійок" End Select outstr = bil_txt & sotmil_txt & decmil_txt & mil_txt & sottys_txt & dectys_txt & tys_txt & sot_txt & dec_txt & ed_txt If hryvnias Then outstr = outstr & grv_text If hryvnias And kopecks Then outstr = outstr & " " & fraq & " " & kop_text PropisUkr = UCase(Mid(outstr, 1, 1)) + Mid(outstr, 2) End Function Private Function Class(m, i) Class = Int(Int(m - (10 ^ i) * Int(m / (10 ^ i))) / 10 ^ (i - 1)) End Function Private Function ScriptRus(n As Double) As String Dim Nums1, Nums2, Nums3, Nums4 As Variant Nums1 = Array("", "один ", "два ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ") Nums2 = Array("", "десять ", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ") Nums3 = Array("", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ") Nums4 = Array("", "одна ", "две ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ") Nums5 = Array("десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", "пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать ") If n = 0 Then ScriptRus = "Ноль" Exit Function End If ed = Class(n, 1) dec = Class(n, 2) sot = Class(n, 3) tys = Class(n, 4) dectys = Class(n, 5) sottys = Class(n, 6) mil = Class(n, 7) decmil = Class(n, 8) sotmil = Class(n, 9) mlrd = Class(n, 10) If mlrd > 0 Then Select Case mlrd Case 1 mlrd_txt = Nums1(mlrd) & "миллиард " Case 2, 3, 4 mlrd_txt = Nums1(mlrd) & "миллиарда " Case 5 To 20 mlrd_txt = Nums1(mlrd) & "миллиардов " End Select End If If (sotmil + decmil + mil) > 0 Then sotmil_txt = Nums3(sotmil) Select Case decmil Case 1 mil_txt = Nums5(mil) & "миллионов " GoTo www Case 2 To 9 decmil_txt = Nums2(decmil) End Select Select Case mil Case 1 mil_txt = Nums1(mil) & "миллион " Case 2, 3, 4 mil_txt = Nums1(mil) & "миллиона " Case 0, 5 To 20 mil_txt = Nums1(mil) & "миллионов " End Select End If www: sottys_txt = Nums3(sottys) Select Case dectys Case 1 tys_txt = Nums5(tys) & "тысяч " GoTo eee Case 2 To 9 dectys_txt = Nums2(dectys) End Select Select Case tys Case 0 If dectys > 0 Then tys_txt = Nums4(tys) & "тысяч " Case 1 tys_txt = Nums4(tys) & "тысяча " Case 2, 3, 4 tys_txt = Nums4(tys) & "тысячи " Case 5 To 9 tys_txt = Nums4(tys) & "тысяч " End Select If dectys = 0 And tys = 0 And sottys <> 0 Then sottys_txt = sottys_txt & " тысяч " eee: sot_txt = Nums3(sot) Select Case dec Case 1 ed_txt = Nums5(ed) GoTo rrr Case 2 To 9 dec_txt = Nums2(dec) End Select ed_txt = Nums1(ed) rrr: ScriptRus = mlrd_txt & sotmil_txt & decmil_txt & mil_txt & sottys_txt & dectys_txt & tys_txt & sot_txt & dec_txt & ed_txt ScriptRus = UCase(Left(ScriptRus, 1)) & LCase(Mid(ScriptRus, 2, Len(ScriptRus) - 1)) End Function Private Function ScriptEng(ByVal Number As Double) Dim BigDenom As String, Temp As String Dim Count As Integer ReDim Place(9) As String Place(2) = " Thousand " Place(3) = " Million " Place(4) = " Billion " Place(5) = " Trillion " strAmount = Trim(Str(Int(Number))) Count = 1 Do While strAmount <> "" Temp = GetHundreds(Right(strAmount, 3)) If Temp <> "" Then BigDenom = Temp & Place(Count) & BigDenom If Len(strAmount) > 3 Then strAmount = Left(strAmount, Len(strAmount) - 3) Else strAmount = "" End If Count = Count + 1 Loop Select Case BigDenom Case "" BigDenom = "Zero " Case "One" BigDenom = "One " Case Else BigDenom = BigDenom & " " End Select ScriptEng = BigDenom End Function Private Function GetHundreds(ByVal MyNumber) Dim result As String If Val(MyNumber) = 0 Then Exit Function MyNumber = Right("000" & MyNumber, 3) If Mid(MyNumber, 1, 1) <> "0" Then result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred " End If If Mid(MyNumber, 1, 1) <> "0" And (Mid(MyNumber, 2, 1) <> "0" Or Mid(MyNumber, 3, 1) <> "0") Then result = result & "And " End If If Mid(MyNumber, 2, 1) <> "0" Then result = result & GetTens(Mid(MyNumber, 2)) Else result = result & GetDigit(Mid(MyNumber, 3)) End If GetHundreds = result End Function Private Function GetTens(TensText) Dim result As String result = "" If Val(Left(TensText, 1)) = 1 Then Select Case Val(TensText) Case 10: result = "Ten" Case 11: result = "Eleven" Case 12: result = "Twelve" Case 13: result = "Thirteen" Case 14: result = "Fourteen" Case 15: result = "Fifteen" Case 16: result = "Sixteen" Case 17: result = "Seventeen" Case 18: result = "Eighteen" Case 19: result = "Nineteen" Case Else End Select Else Select Case Val(Left(TensText, 1)) Case 2: result = "Twenty " Case 3: result = "Thirty " Case 4: result = "Forty " Case 5: result = "Fifty " Case 6: result = "Sixty " Case 7: result = "Seventy " Case 8: result = "Eighty " Case 9: result = "Ninety " Case Else End Select result = result & GetDigit _ (Right(TensText, 1)) End If GetTens = result End Function Private Function GetDigit(Digit) Select Case Val(Digit) Case 1: GetDigit = "One" Case 2: GetDigit = "Two" Case 3: GetDigit = "Three" Case 4: GetDigit = "Four" Case 5: GetDigit = "Five" Case 6: GetDigit = "Six" Case 7: GetDigit = "Seven" Case 8: GetDigit = "Eight" Case 9: GetDigit = "Nine" Case Else: GetDigit = "" End Select End Function
Примечание
- Данная функция будет работать с числами от 0 до 99 999 999
- Код VBA необходимо вставлять во все файлы (Книги Excel), где вы хотите, чтобы она работала
- После вставки код, необходимо сохранить файл с поддержкой макросов xlsm (в Excel, начиная с 2007 версии)
- Функцию можно либо набирать в ручную, либо, если вы забыли как она пишется, через мастер функций (кнопка fx в строке формул, категория Определенные пользователем)
Пример, если вы хотите, чтобы функция заменяла числа на украинский текст, со словами «гривна» и копейками, то напишите следующую формулу.
=PropisUkr(A1;1;1)
где A1 — это ссылка на ячейку с числом, которое необходимо перевести в текст.
Большое спасибо — все работает!
Спасибо, и у меня работает тоже!! Ура!!
Добрый день! Спасибо, но у меня отображаются знаки вопросов, что это может значить?
Перед копированием кода переключите раскладку клавиатуры на украинскую
Помогите не выходит, переключил на УКР язык, дальше создал модуль, вставил, закрыл VB, сохранил файл с поддержкой макросов, открыл, ввожу и открывается VB и пишет Compile error: sub or Function not defined
Проверил. Все должно работать. Проверьте, что весь код копируете. После вставки в модуль сразу проверьте работает формула или нет.
добрый день, спасибо за предложенный вариант решения проблемы, но после короткого использования функции высвечивается #ИМЯ?, подскажите как с этим справиться?
В примере не вижу этой ошибки
Спасибо огромное, воспользовалась вышеуказанным макросом — все замечательно работает!! Вопрос: а как сделать начало текста строчными буквами?, т.к. число прописью вставляется в середине текста. Спасибо.
Можно обернуть в функцию =СТРОЧН()
СПАСИБО !!!!!
А как же быть со значениями с десятичными знаками?
Раньше работало, а сейчас нет….
Case without select Case
ЧТО не так?
Добрый день! подскажите пожалуйста как добавить в этот код чтобы копейки тоже прописью были?
Подскажите пожалуйста как в данном макросе сделать чтобы копейки тоже прописью были?