Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2009, 12:45   #1
stas77
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 83
По умолчанию Где ошибка?

Всем привет!
Сильно не бейте за повтор темы, но хочу научится сам, переделал макрос украинской валюты в казахскую, и все ниче но где то косяк с написанием пишет например дванадцать вместо двенадцать,четыренадцать дведцать вместо двадцать можно ли проверить где я ошибся!
Вложения
Тип файла: rar sumpropua.rar (15.1 Кб, 18 просмотров)
stas77 вне форума Ответить с цитированием
Старый 31.10.2009, 13:54   #2
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от stas77 Посмотреть сообщение
проверить где я ошибся!
Пустой архив
valerij вне форума Ответить с цитированием
Старый 31.10.2009, 14:02   #3
stas77
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от valerij Посмотреть сообщение
Пустой архив
Может лучше так выложу:

'
' Функции для вычисления суммы прописью по
' числовому значению от 0 до 999999999999
'
' Вспомогательные переменные
Dim Тысячи, Миллионы As Boolean
Dim Миллиарды, ВторойДесяток As Boolean
' Массмв составных частей
Dim Часть(32) As String
' Логические константы
Const Истина As Boolean = True
Const Ложь As Boolean = False
'
' Функция возвращает сумму прописью
'
Function СумаПрописом(Тенге)
' Считаем тиын
Переменная = (Тенге - Fix(Тенге)) * 100
If (Переменная - Fix(Переменная)) >= 0.5 Then
If Переменная >= 99.5 Then
Переменная = 0
Тенге = Тенге + 1
Else
Переменная = Fix(Переменная) + 1
End If
Else
Переменная = Fix(Переменная)
End If
Тиын = CStr(Переменная)
' Вызов функции для получения числа прописью
Число = CStr(Fix(Тенге))
СумаПрописом = ЧислоПрописом(Число)
' Строку с заглавной буквы
СумаПрописом = UCase(Mid(СумаПрописом, 1, 1)) + _
Mid(СумаПрописом, 2)
' Вычислить длину исходного числа
Длина = Len(Число)
' Если число только из одной цифры, добавить
' до двух (для единообразия алгоритма)
If Длина = 1 Then
Число = "0" & Число
Длина = Длина + 1
End If
' Добавление нужного окончания строки
'
' Для чисел, оканчивающихся на 10, 11, 12, 13,
' 14, 15, 16, 17, 18, 19 добавляем "тенге"
If Mid(Число, Длина - 1, 1) = 1 Then
СумаПрописом = СумаПрописом + "тенге"
' Для всех остальных случаев
Else
Select Case Mid(Число, Длина)
' Для чисел, оканчивающихся на 1 добавляем "тенге"
Case 1
СумаПрописом = СумаПрописом + "тенге"
' Для чисел, оканчивающихся на 2, 3, 4
' добавляем "тенге "
Case 2, 3, 4
СумаПрописом = СумаПрописом + "тенге"
' Для чисел, оканчивающихся на 5, 6, 7, 8,
' 9, 0 добавляем "тенге"
Case Else
СумаПрописом = СумаПрописом + "тенге"
End Select
End If
' Окончательно формируем результат, добавляя тиын
If Len(Тиын) = 1 Then
Тиын = "0" & Тиын
End If
СумаПрописом = СумаПрописом + " " + Тиын + " "
' Для чисел, оканчивающихся на 10, 11, 12, 13,
' 14, 15, 16, 17, 18, 19 добавляем "тиын"
If Mid(Тиын, 1, 1) = 1 Then
СумаПрописом = СумаПрописом + "тиын"
' Для всех остальных случаев
Else
Select Case Mid(Тиын, 2)
' Для чисел, оканчивающихся на 1 добавляем "тиын"
Case 1
stas77 вне форума Ответить с цитированием
Старый 31.10.2009, 14:03   #4
stas77
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 83
По умолчанию

СумаПрописом = СумаПрописом + "тиын"
' Для чисел, оканчивающихся на 2, 3, 4
' добавляем "тиын"
Case 2, 3, 4
СумаПрописом = СумаПрописом + "тиын"
' Для чисел, оканчивающихся на 5, 6, 7, 8,
' 9, 0 добавляем "тиын"
Case Else
СумаПрописом = СумаПрописом + "тиын"
End Select
End If
End Function
'
' функция возвращает число прописью
'
Function ЧислоПрописом(Число)
' Присвоение значений массиву частей
Часть(1) = "один": Часть(2) = "две"
Часть(3) = "три": Часть(4) = "четыре"
Часть(5) = "пять": Часть(6) = "шесть"
Часть(7) = "семь": Часть(8) = "восемь"
Часть(9) = "девять": Часть(10) = "н"
' Часть(11) = "ы": Часть(12) = "ь"
Часть(13) = "надцать": Часть(14) = "дцать"
Часть(15) = "сорок": Часть(16) = "девяно"
Часть(17) = "сто": Часть(18) = "две"
Часть(19) = "сти": Часть(20) = "сот"
Часть(21) = "одна": Часть(22) = "тысяч"
Часть(23) = "а": Часть(24) = "и"
Часть(25) = "миллион": Часть(26) = "ов"
Часть(27) = " ": Часть(28) = "":
Часть(29) = "десять": Часть(30) = "ста"
Часть(31) = "миллиард": Часть(32) = "ноль "
' Временные переменные вначале сбрасываются
Тысячи = Ложь: Миллионы = Ложь
Миллиарды = Ложь: ВторойДесяток = Ложь
' Отбрасываем дробную часть, если она есть
Число = Fix(Число)
' Определяем длину исходного числа
Длина = Len(Число)
' Цикл по всем цифрам числа, начиная с крайней
' левой до крайней правой
For Позиция = Длина To 1 Step -1
' Добавляются очередные слова, описывающие
' текущую цифру
ЧислоПрописом = ЧислоПрописом + _
ЦифраСтрокой(Mid(Число, _
Длина - Позиция + 1, 1), _
Позиция)
Next Позиция
' Алгоритм возвращает пустую строку при
' нулевом аргументе. Исправим это
If ЧислоПрописом = "" Then
ЧислоПрописом = Часть(32)
End If
End Function
'
' Составление слов из частей по очередной
' цифре числа и по предистории работы
'
' Функция доступна только в текущем модуле
'
Private Function ЦифраСтрокой(Цифра, Место) As String
' Если сотни или десятки миллиардов, то
' запомнить об этом для будущего
If (Цифра <> 0) And ((Место = 11) Or _
(Место = 12)) Then
Миллиарды = Истина
End If
' Если сотни или десятки миллионов, то
' запомнить об этом для будущего
If (Цифра <> 0) And ((Место = 8) Or _
(Место = 9)) Then
Миллионы = Истина
End If
' Если сотни или десятки тысяч, то
' запомнить об этом для будущего
If (Цифра <> 0) And ((Место = 5) Or _
(Место = 6)) Then
Тысячи = Истина
End If
' Если предыдущая цифра была единица
' в поле десятков, то выбираем
If ВторойДесяток Then
Select Case Цифра
' пишем "десять "
Case 0
ЦифраСтрокой = Часть(29) + Часть(12) + _
Часть(27)
' пишем "дванадцать "
Case 2
ЦифраСтрокой = Часть(18) + Часть(13) + _
Часть(27)
' в остальных случаях пишем название цифры
' плюс "надцать "
Case Else
ЦифраСтрокой = Часть(Цифра) + Часть(13) + _
Часть(27)
End Select
' Добавляем название разрядов
Select Case Место
Case 4
' добавляем "тысяч "
ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
Часть(27)
' добавляем "миллионов "
Case 7
ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
Часть(26) + Часть(27)
' добавляем "милиардов "
Case 10
ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
Часть(26) + Часть(27)
End Select
' Сбрасываем значения, так как переходим к
' предыдущим разрядам
ВторойДесяток = Ложь: Миллионы = Ложь
Миллиарды = Ложь: Тысячи = Ложь
' Во всех остальных случаях, то есть
' не для описания чисел второго десятка
Else
stas77 вне форума Ответить с цитированием
Старый 31.10.2009, 14:05   #5
stas77
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 83
По умолчанию

' Определяем название десятков
If (Место = 2) Or (Место = 5) Or _
(Место = 8) Or (Место = 11) Then
Select Case Цифра
' Запоминаем про второй десяток для
' подстановки при следующем входе
Case 1
ВторойДесяток = Истина
' пишем "двадцать "
Case 2
ЦифраСтрокой = Часть(18) + Часть(14) + _
Часть(27)
' пишем "тридцать "
Case 3
ЦифраСтрокой = Часть(Цифра) + Часть(14) + _
Часть(27)
' пишем "сорок "
Case 4
ЦифраСтрокой = Часть(15) + Часть(27)
' пишем "девяносто "
Case 9
ЦифраСтрокой = Часть(16) + Часть(17) + _
Часть(27)
' в остальных случаях пишем название цифры
' плюс "десят "
Case 5, 6, 7, 8
ЦифраСтрокой = Часть(Цифра) + Часть(29) + _
Часть(27)
End Select
End If
' Определяем названия сотен
If (Место = 3) Or (Место = 6) Or _
(Место = 9) Or (Место = 12) Then
Select Case Цифра
' пишем "сто "
Case 1
ЦифраСтрокой = Часть(17) + Часть(27)
' пишем "двести "
Case 2
ЦифраСтрокой = Часть(2) + Часть(19) + _
Часть(27)
' пишем "триста "
Case 3
ЦифраСтрокой = Часть(3) + Часть(30) + _
Часть(27)
' пишем "четыреста "
Case 4
ЦифраСтрокой = Часть(4) + Часть(11) + _
Часть(30) + Часть(27)
' в остальных случаях пишем название цифры
' плюс "сот "
Case 5, 6, 7, 8, 9
ЦифраСтрокой = Часть(Цифра) + Часть(20) + _
Часть(27)
End Select
End If
' Определяем названия единиц
If (Место = 1) Or (Место = 4) Or _
(Место = 7) Or (Место = 10) Then
Select Case Цифра
' пишем "один " для миллионов и миллиардов и "одна " для остальных вариантов
Case 1
If (Место = 7) Or (Место = 10) Then
ЦифраСтрокой = Часть(1) + Часть(10) + Часть(27)
Else
ЦифраСтрокой = Часть(21) + Часть(27)
End If
' пишем "два " для миллионов и миллиардов и "два " для остальных вариантов
Case 2
If (Место = 7) Or (Место = 10) Then
ЦифраСтрокой = Часть(18) + Часть(27)
Else
ЦифраСтрокой = Часть(2) + Часть(27)
End If
' пишем "три "
Case 3
ЦифраСтрокой = Часть(Цифра) + Часть(27)
' пишем "четыре "
Case 4
ЦифраСтрокой = Часть(4) + Часть(11) + _
Часть(27)
' пишем "семь" или "восемь"
Case 7, 8
ЦифраСтрокой = Часть(Цифра) + Часть(27)
' в остальных случаях пишем название цифры
Case 5, 6, 9
ЦифраСтрокой = Часть(Цифра) + Часть(12) + _
Часть(27)
End Select
' Определяем названия тысяч
If Место = 4 Then
Select Case Цифра
' пишем "тысяч" только в том случае, если
' хотя бы в одном разряде тысяч есть не нулевое
' значение
Case 0
If Тысячи Then
ЦифраСтрокой = Часть(22) + Часть(27)
End If
' пишем "одна тысяча "
Case 1
ЦифраСтрокой = Часть(21) + Часть(27) + _
Часть(22) + Часть(23) + Часть(27)
' пишем "две тысячи "
Case 2
ЦифраСтрокой = Часть(2) + Часть(27) + _
Часть(22) + Часть(24) + Часть(27)
' добавляем "тысячи "
Case 3, 4
ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
Часть(24) + Часть(27)
' в остальных случаях добавляем "тысяч "
Case 5, 6, 7, 8, 9
ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
Часть(27)
End Select
' Сбрасываем значения тысяч, так как
' переходим к предыдущим разрядам
stas77 вне форума Ответить с цитированием
Старый 31.10.2009, 14:07   #6
stas77
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 83
По умолчанию

Тысячи = Ложь
End If
' Определяем названия миллионов
If Место = 7 Then
Select Case Цифра
' пишем "миллионов " только в том случае,
' если хотя бы в одном разряде миллионов
' есть не нулевое значение
Case 0
If Миллионы Then
ЦифраСтрокой = Часть(25) + Часть(26) + _
Часть(27)
End If
' добавляем "миллион "
Case 1
ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
Часть(27)
' добавляем "миллионы "
Case 2, 3, 4
ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
Часть(11) + Часть(27)
' добавляем "миллионов "
Case 5, 6, 7, 8, 9
ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
Часть(26) + Часть(27)
End Select
' Сбрасываем значения миллионов, так как
' переходим к предыдущим разрядам
Миллионы = Ложь
End If
' Определяем названия миллиардов
If Место = 10 Then
Select Case Цифра
' пишем "милиардов " только в том случае,
' если хотя бы в одном разряде миллиардов
' есть не нулевое значение
Case 0
If Миллиарды Then
ЦифраСтрокой = Часть(31) + Часть(26) + _
Часть(27)
End If
' добавляем "милиард "
Case 1
ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
Часть(27)
' добавляем "милиарды "
Case 2, 3, 4
ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
Часть(11) + Часть(27)
' добавляем "милиардов "
Case 5, 6, 7, 8, 9
ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
Часть(26) + Часть(27)
End Select
' Сбрасываем значения миллиардов, так как
' переходим к предыдущим разрядам
Миллиарды = Ложь
End If
End If
End If
End Function
stas77 вне форума Ответить с цитированием
Старый 31.10.2009, 14:09   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от stas77 Посмотреть сообщение
Может лучше так выложу
Ну и кто эти посты будет собирать?
Почему не выложить в формате xls,
valerij вне форума Ответить с цитированием
Старый 31.10.2009, 14:16   #8
stas77
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от valerij Посмотреть сообщение
Ну и кто эти посты будет собирать?
Почему не выложить в формате xls,
Сори, за мои познания екселя!
Вроде то что я зазаиповал, открывается у меня на компе, через Разработчик-VB..там весь этот код!
ваш вариант выкладки не совсем понятен! я думал что просто "орфографически" проверите на ошибку, не более!
Еще раз извините!
stas77 вне форума Ответить с цитированием
Старый 31.10.2009, 20:37   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Вроди бы все исправил,проверте все внимательно.
Вложения
Тип файла: rar Пропис.rar (711.5 Кб, 36 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 01.11.2009, 16:00   #10
stas77
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Вроди бы все исправил,проверте все внимательно.
Спасибо, большое!
stas77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка: Egik_net Microsoft Office Access 6 26.10.2009 00:43
Где ошибка? Константин1985 HTML и CSS 3 30.09.2009 17:35
где ошибка? Prophet23 Паскаль, Turbo Pascal, PascalABC.NET 0 20.05.2009 23:20
Где ошибка? [Smarik] Общие вопросы Delphi 5 01.04.2008 09:56
Где ошибка? jarded Общие вопросы C/C++ 2 01.06.2007 15:10