Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Сумма прописью на украинском (и на русском и на других языках)
 
Цитата
MCH написал:
По трем запускам "MSumPropUkrSelect" у меня немного опередила "СуммаПрописью"
Значит скорость отрабатывания зависит еще и от железа (а может еще и от версии офиса).
Раз такая песня, что разница в скорости отрабатывании кода на уровне погрешности, то ваш вариант намного красивее. Привожу ваш код полностью на Select (без фичи со Static). А в прикрепленном файле 2 варианта со Static и без.
Код
Option Explicit
Function MSumPropUkr$(chislo#) 'Автор MCH (Михаил Ч.), май 2012
    Dim rub$, kop$, ed, des, sot, nadc, razr, i&, m$
    If chislo >= 1E+15 Or chislo < 0 Then Exit Function

    sot = Array("", "сто ", "двісті ", "триста ", "чотириста ", "п'ятсот ", "шістсот ", "сімсот ", "вісімсот ", "дев'ятсот ")
    des = Array("", "", "двадцять ", "тридцять ", "сорок ", "п'ятдесят ", "шістдесят ", "сімдесят ", "вісімдесят ", "дев'яносто ")
    nadc = Array("десять ", "одинадцять ", "дванадцять ", "тринадцять ", "чотирнадцять ", "п'ятнадцять ", "шістнадцять ", "сімнадцять ", "вісімнадцять ", "дев'ятнадцять ")
    ed = Array("", "один ", "два ", "три ", "чотири ", "п'ять ", "шість ", "сім ", "вісім ", "дев'ять ", "", "одна ", "дві ")
    razr = Array("трильйон ", "трильйона ", "трильйонів ", "мільярд ", "мільярда ", "мільярдів ", "мільйон ", "мільйона ", "мільйонів ", "тисяча ", "тисячі ", "тисяч ", "гривня ", "гривні ", "гривень ")
     
    rub = Left(Format(chislo, "000000000000000.00"), 15)
    kop = Right(Format(chislo, "0.00"), 2)
     
    If CDbl(rub) = 0 Then
        m = "нуль " & razr(UBound(razr))
    Else
        For i = 1 To Len(rub) - 6 Step 3
            If Mid(rub, i, 3) <> "000" Then
                m = m & sot(CInt(Mid(rub, i, 1)))
                Select Case Mid(rub, i + 1, 1)
                   Case "1"
                      m = m & nadc(CInt(Mid(rub, i + 2, 1))) & razr(i + 1)
                   Case Else
                      m = m & des(CInt(Mid(rub, i + 1, 1))) & ed(CInt(Mid(rub, i + 2, 1)))
                      Select Case Mid(rub, i + 2, 1)
                      Case "1"
                          m = m & razr(i - 1)
                      Case "2", "3", "4"
                          m = m & razr(i)
                      Case Else
                          m = m & razr(i + 1)
                      End Select
                End Select
            End If
        Next i
        For i = Len(rub) - 5 To Len(rub) Step 3
            If Mid(rub, i, 3) <> "000" Then
                m = m & sot(CInt(Mid(rub, i, 1)))
                Select Case Mid(rub, i + 1, 1)
                    Case "1"
                        m = m & nadc(CInt(Mid(rub, i + 2, 1))) & razr(i + 1)
                    Case Else
                        m = m & des(CInt(Mid(rub, i + 1, 1)))
                        Select Case Mid(rub, i + 2, 1)
                        Case "1"
                            m = m & ed(11) & razr(i - 1)
                        Case "2"
                            m = m & ed(12) & razr(i)
                        Case "3", "4"
                            m = m & ed(CInt(Mid(rub, i + 2, 1))) & razr(i)
                        Case Else
                            m = m & ed(CInt(Mid(rub, i + 2, 1))) & razr(i + 1)
                        End Select
                End Select
            End If
        Next i
    End If
    m = m & kop & " копі"
    Select Case Left(kop, 1)
        Case "1"
            m = m & "йок"
        Case Else
            Select Case Mid(kop, 2)
                Case "1"
                    m = m & "йка"
                Case "2", "3", "4"
                    m = m & "йки"
                Case Else
                    m = m & "йок"
            End Select
    End Select
    MSumPropUkr = UCase(Left(m, 1)) & Mid(m, 2)
End Function
Изменено: illianull - 03.11.2020 16:52:00
Сумма прописью на украинском (и на русском и на других языках)
 
Спасибо Михаил.
Просмотрел вашу функцию [в файле в Module2]. Перевел её на If (работает быстрее) [в файле в Module3]. А потом чуток допилил до Select (работает ещё быстрее) [в файле в Module4].
Но я не смог добиться того, чтобы MSumPropUkr работал быстрее СуммаПрописью. Привожу результат теста на моем компьютере:
Скрытый текст

Скорость работы проверял предложенным вами способом. Код в файле "Сравнение.xmls"
P.s. про БМВ наврал - да он не предлагал способов сравнения скорости обработки кода.
Изменено: illianull - 04.11.2020 10:18:25
Сумма прописью на украинском (и на русском и на других языках)
 
Цитата
sokol92 написал:
MSumPropUkr получает первый приз.  
Я не уследил о каком примере вы говорите. Поделитесь, пожалуйста, кодом. Чтобы не изобретать велосипед из костылей. А то я могу. И не говорите что вы меня не знаете  :D  
Изменено: illianull - 29.10.2020 00:18:15
Сумма прописью на украинском (и на русском и на других языках)
 
Цитата
БМВ написал:
кто это?
Цитата
Ігор Гончаренко написал:
нет, я вас не знаю
э-э-эх шутники-флудеры :)
Ну ладно БМВ меня не знает, но Игорь вам то не стыдно? Уже 10 месяцев знакомы.
Сумма прописью на украинском (и на русском и на других языках)
 
К сожалению уперся в невозможность инициализировать массив значениями при подгрузке модуля. Поэтому накостылял как мог.
P.s. функционал добавлен из-за просьбы в личку (вывод рублей и гривен в полном и коротком варианте). Удаление из кода литералов, содержащих русские буквы в планах. Но вы меня знаете - я могу опять на пол года пропасть.  :)  
Сумма прописью на украинском (и на русском и на других языках)
 
Цитата
MCH написал:
разница на 20-30%
Огромнейшее спасибо! Я не гуру, поэтому и не знаю как точнее определить разницу скорости. Да и сравнивать скорости отрабатывания в екселе вообще не представляю как. Насколько я помню то принцип был - составить число из столбца A и записать время за которое была проведена операция. Потом посчитать среднее. Косяк который я подметил - это 0 времени в некоторых случаях (наверное просто ескель так округлил значение). Поэтому и попросил перепроверить того кто больше в этом шарит.
P.s. отключал все шевеления екселя, потому что время затрачиваемое на заполнение ячейки данными было в разы больше чем время затрачиваемое на выполнение функции. Что в очередной раз показывает, что интерес быстродействия - чисто спортивный.
Сумма прописью на украинском (и на русском и на других языках)
 
БМВ, да-да. А я уже и забыл про этот косяк. В идеале я хотел вообще через Const сделать. Но не смог. И примеров не нашел. Подскажите, как исправить, или где найти пример, в котором задается константный массив.
Сумма прописью VBA для UNICODE
 
Цитата
БМВ написал:
Но  это для надстройки подойдет
То-есть если написать функцию с буквами кириллицы и сохранит как надстройку, то при загрузке надстройки на компе с другой кодировкой проблем не будет? Или как? Вопрос в том как не морочить себе голову. А пусть этим занимается компьютер.  
Сумма прописью на украинском (и на русском и на других языках)
 
Цитата
Геннадий написал:
Не Дев'ятсота Дев'ятьсот
Проверяйте, пожалуйста, свои предположения в словарях. Вики пишет "дев'ятсот". А где вы нашли свой вариант?
Изменено: illianull - 28.10.2020 08:39:52
Сумма прописью на украинском (и на русском и на других языках)
 
Ігор Гончаренко, ваш код - швейцарский нож (конечно не для всех языков, а для украинско- и русскоподобных). И главная фича кода - добавление этих языков за пол минуты. Может я недостаточно явно это описал. Стоит также отметить, что эта функция обычно используется 1-3 раза на весь лист (в основном для составления счетов на оплату, по крайней мере так в моей конторе). Поэтому мултитул (пусть даже более медленный) будет предпочтительней - разница в наносекунды не заметна, а вот недостаток функционала серьезно напрягает (например не хватает языка).
Мой код ради спортивного интереса - проверить как сделать то-же с меньшими затратами ресурсов ПК. А в итоге, если можно будет всунуть те же фичи за меньшие "деньги" - то такой вариант будет предпочтительней.
Изменено: illianull - 28.10.2020 08:32:46
Сумма прописью на украинском (и на русском и на других языках)
 
Цитата
БМВ написал:
я б так не горячился
А я и не горячусю.  :)
Я делюсь и жду обоснованной критики. Спасибо за ваш пример. Я правильно понял, что в вашем примере решен вопрос когда у иностранцев иероглифы вместо букв?
Сумма прописью на украинском (и на русском и на других языках)
 
Простите, что пропал. Скачал все примерчики, расковырял и даже сверял кто быстрее работает. Но итогами своих наблюдений так и не поделился. И честно говоря уже подзабыл какой вариант быстрее работал (поковырял файлик Сравнение СуммПрописью и вспомнил). Ігор Гончаренко привел (ПрописПримеры.xlsm) самый медленный код, но самый крутой для быстрой подмены языка.
На основе всего увиденного разработал свой вариант. Он оказался самым быстрым (где-то в 100 раз быстрее кода Игоря и в 30 раз быстрее самого быстрого, найденного мной аналога). В то же время мой код не так уж сложен в доработке. Но он заточен только под 1 язык. Переточить под другой язык, похожий на русский и украинский - дело полу часа (я вообще за 5 минут это сделаю).
Делюсь своими наработками в файле СуммаПрописьюОтИН
Файл Сравнение СуммПрописью - показывает как я сравнивал скорость работы алгоритмов. Но объяснять что там я не буду - сами разбирайтесь, кому интересно. Буду рад если кто-то проведет свой тест скорости отрабатывания моего алгоритма в сравнении с другими. А то в 30-100 раз быстрее остальных - я и сам себе не верю. При том там нет чего-то сверх сложного.
Изменено: illianull - 27.10.2020 17:35:21
Сумма прописью на украинском (и на русском и на других языках)
 
Спасибо вам, что поделились своими трудами. На досуге просмотрю что да как у вас устроено в логике ваших решений.
И постараюсь сделать ссылки на облачные хранилища со всеми собранными в этой теме материалами, чтоб не терялись труды (мало ли).  
Сумма прописью на украинском (и на русском и на других языках)
 
Михаил Витальевич С., ну пока Ігор Гончаренко, не покажет ссылку мы не узнаем об этом наверняка.
Сумма прописью на украинском (и на русском и на других языках)
 
Цитата
Ігор Гончаренко написал:
у меня есть функция Пропис (публиковалась тут)
Извините, но ссылок нет (может модераторы свой сайт охраняют, а может вы её забыли вставить).
Добавьте пожалуйста ссылку, или прикрепите к комментарию свое творение (или и то и другое).  :)
А то описанная вами функция довольно крутая. И думаю многим еще пригодится.
Сумма прописью на украинском (и на русском и на других языках)
 
Цитата
MCH написал:
http://www.excelworld.ru/forum/3-9902-1
Спасибо MCH!!! Офигенные наработки!
А вот некоторые ссылки, по этому форуму на тему "сумма прописью"
цифры прописью и загадочные функции
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=2608
Сумма прописью!
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=36916
Число прописью
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=4431
число прописью на украинском
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=29563
========Добавлено========
Сумма прописью VBA для UNICODE
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=129782
Изменено: illianull - 28.10.2020 11:57:28
Сумма прописью на украинском (и на русском и на других языках)
 
В интернете нашел надстройку "sumprop.xla", но в ней есть оИшибка:
"2002002002" получается "Две миллиарда две миллиона две тысячи две гривны 00 копеек"
Диапазон от 0 до 999999999999
Функции: СуммаПрописью, СуммаПрописьюЕвро, СуммаПрописьюДоллары, СуммаПрописьюГривны
Исправил ошибку "sumpropRU.xla" (в "sumprop.xla" неверно применялся женский род и разряд тысяч был через костыль)
Перевел на украинский "sumpropUK.xla" (ну и поменял логику из-за разницы между "п’ятдесят" и "пятьдесят" - загвоздка в мягком знаке)

А так-же нашел на этом форуме решение для одного извращенца без макросов "sumpropUK_notVBA.xls" (сам не проверял, но в теме вроде не ругались на автора)
Изменено: illianull - 23.01.2019 20:51:26
Сумма прописью на украинском (и на русском и на других языках)
 
Нужно преобразовать число денег в текст. "124,45" в "сто двадцять чотири гривні 45 копійок".
Будет круто собрать здесь решения на других языках (кроме русского и украинского). Читал, что на английском есть, но в своей работе не применял и не проверял.
--
Это не вопрос. Просто постфактум делюсь своим решением.
Мог бы в уже существующие темы написать, но они архивные.
Автозавершение текста, когда список подстановки в другом диапазоне
 
Да автозвершение возможно только в ActiveX-элементе - "поле со списком" (оно там по умолчанию работает).

Вот как мне пришлось изголяться:
Изменено: illianull - 23.01.2019 20:43:38
Автозавершение текста, когда список подстановки в другом диапазоне
 
Вот
Автозавершение текста, когда список подстановки в другом диапазоне
 
Да вы скажете это уже было. Если так, то помогите найти.

Мне нужно как если бы я в столбец записал разные строки, а потом сразу после последней строчки начинаю вводить текст и эксель подсказывает как завершить строку. Только такое автозавершение должно происходить на одном листе, а столбец с примерами строк на другом листе.
Страницы: 1
Наверх