Страницы: 1
RSS
Нужен актуальный вариант функции "СУММА ПРОПИСЬЮ", Нужен актуальный вариант функции "СУММА ПРОПИСЬЮ"
 
Добрый день!  Нашел на форуме 2012 года функцию написание числа ПРОПИСЬЮ.  (Автор Николай Павлов.)
Но там шли обсуждения, вносились какие-то изменения в код. И в итоге на форуме остался старый вариант.
https://www.planetaexcel.ru/techniques/7/46/#1620


Где бы найти актуальную функцию СУММА ПРОПИСЬЮ с  Исправлениями?
Спасибо.
 
Цитата
YGrigor18 написал:
Нужен актуальный вариант функции "СУММА ПРОПИСЬЮ"
А, что изменились правила Русского языка? Что именно Вас не устраивает в коде Николая Павлова, там где-то ошибка?
Если очень нужна альтернатива, то на этом форуме Игорь Гончаренко выкладывал свой вариант, нужно только поискать.
 
Цитата
Msi2102 написал:
Если очень нужна альтернатива
+++!YGrigor18, Самая актуальная функция, причем самая надежная: на бумажном носителе, заверенная нотариусом :) У начальства с разделителями разрядов туго? :)  Десять ноликов по три никак не увидеть и не просчитать? И поэтому кучу накладных или смет некому подписывать?  )
 
Сам автор Николай Павлов вносил коррекцию в представленный первоначальный код  - по результатам общения на форуме.
но на сайте остался первоначальный вариант.

Поэтому и спросил, что может есть доработанный вариант?, с учетом пожеланий пользователей форума,  так как время прошло и  этого исключать нельзя.
 
от Игоря Гончаренко функцию сумма прописью не нашел.  Нашел аналогичную функцию от Владимира Яркова. (может кому пригодится.)
Ссылка с примером:  http://www.excelworld.ru/board/vba/udf/sum_in_words/8-1-0-52
Код
[/CODE][CODE]
'Сумма Прописью по Владимиру Яркову (короткая)
'Владимир Ярков
'Функция вывода суммы прописью в рублях и цифрами в копейках
'синтаксис: fSUMprop(число[,вариант])
'знак числа не учитывается
'первый аргумент - число (Variant) до 10 триллионов
'второй аргумент =0 - возвращает сумму с первой прописной,
'                     остальные - строчными буквами
'               <>0 возвращает сумму строчными буквами
Public Function fSUMprop(xsu As Variant, Optional mb As Byte) As String
On Error GoTo ersupr
If Not IsNumeric(xsu) Then
    fSUMprop = ""
    Exit Function
End If
If xsu >= 10000000000000# Then
    fSUMprop = "слишком большое число"
    Exit Function
End If
Dim ssu As String, nsu, edi, des, sot, ind As Byte, i As Integer
If Fix(xsu) = 0 Then
    fSUMprop = "ноль рублей "
Else
    ssu = Mid$(str$(Fix(xsu)), 2)    ' строка рублей без знака
    nsu = (Len(ssu) + 2) \ 3         ' количество троек цифр
    ssu = Right$("00", nsu * 3 - Len(ssu)) + ssu    ' добавляем нулями
    For i = nsu To 1 Step -1
        sot = Val(Mid$(ssu, (nsu - i) * 3 + 1, 1))    ' сотни
        des = Val(Mid$(ssu, (nsu - i) * 3 + 2, 1))    ' десятки
        edi = Val(Mid$(ssu, (nsu - i) * 3 + 3, 1))    ' единицы
        If sot + des + edi > 0 Or i = 1 Then
            If sot > 0 Then
                fSUMprop = fSUMprop + Choose(sot, "сто", "двести", "триста", _
                                             "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", _
                                             "девятьсот") + " "
            End If
            If des = 1 Then
                fSUMprop = fSUMprop + Choose(edi + 1, "десять", "одиннадцать", _
                                             "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", _
                                             "семнадцать", "восемнадцать", "девятнадцать") + " "
                ind = 3
            Else
                If des <> 0 Then
                    fSUMprop = fSUMprop + Choose(des - 1, "двадцать", _
                                                 "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", _
                                                 "девяносто") + " "
                End If
                If edi <> 0 Then    ' вычисляем индекс для тысяч (одна,две)
                    If i = 2 And (edi = 1 Or edi = 2) Then
                        ind = 9
                    Else
                        ind = 0
                    End If
                    fSUMprop = fSUMprop + Choose(edi + ind, "один", "два", _
                                                 "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "одна", _
                                                 "две") + " "
                End If
                Select Case edi
                    Case 1
                        ind = 1
                    Case 2, 3, 4
                        ind = 2
                    Case Else
                        ind = 3
                End Select
            End If
            fSUMprop = fSUMprop + Choose((i - 1) * 3 + ind, "рубль", "рубля", _
                                         "рублей", "тысяча", "тысячи", "тысяч", "миллион", "миллиона", "миллионов", _
                                         "миллиард", "миллиарда", "миллиардов", "триллион", "триллиона", _
                                         "триллионов") + " "
        End If
    Next i
End If
ssu = Right$(Format$(xsu, "0.00"), 2)
des = Val(Left$(ssu, 1))
edi = Val(Right$(ssu, 1))
If des = 1 Then
    ind = 3
Else
    Select Case edi
        Case 1
            ind = 1
        Case 2, 3, 4
            ind = 2
        Case Else
            ind = 3
    End Select
End If
fSUMprop = fSUMprop + ssu + Choose(ind, " копейка", " копейки", " копеек")
If mb = 0 Then
    fSUMprop = UCase$(Left$(fSUMprop, 1)) + Mid$(fSUMprop, 2)
End If
Exit Function
ersupr:
fSUMprop = "ошибка"
End Function
Изменено: YGrigor18 - 15.06.2022 11:44:37
 
Работает!
Изменено: _Igor_61 - 14.06.2022 17:37:34
 
ТУТ смотрели, там много ссылок на готовые решения. А вообще ЗДЕСЬ можете выбрать сами.
Изменено: Msi2102 - 14.06.2022 18:01:10
 
YGrigor18,  код следует оформлять соответствующим тегом: для этого используйте кнопку <...>.
Исправьте свой пост.
 
Цитата
написал:
от Игоря Гончаренко функцию сумма прописью не нашел.

https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=113232&a...
Страницы: 1
Наверх