Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

цифры прописью.ошибка

Автор ivan-makeem1, 29.08.2012, 03:03:18

« назад - далее »

ivan-makeem1

здравствуйте есть следующая проблема при вводе следующих значений путает цифры 12на 20,14 на 40,15на32 и т.д в чём может быть проблемма т.е он почемуто ошибочно определяет 12 как 20.вот программа
Private Sub CommandButton1_Click()
a = 0
d = 0
c = 0
d = 0
e = 0
h = 0
j = 0
l = 0
m = ""
Dim g(40)
Dim k(40)
Dim n(99999)
n(0) = ""
n(1) = ""
n(2) = ""
n(3) = ""
n(4) = ""
n(5) = ""
n(6) = ""
n(7) = ""
n(8 ) = ""
n(9) = ""
n(10) = ""
n(11) = ""
n(12) = ""
n(13) = ""
n(14) = ""
n(15) = ""
n(16) = ""
n(17) = ""
n(18) = ""
n(19) = ""
n(20) = ""
n(21) = ""
n(22) = ""
n(23) = ""
n(24) = ""
n(25) = ""
n(26) = ""
n(27) = ""
n(28) = ""
n(29) = ""
n(30) = ""
n(31) = ""
n(32) = ""
n(33) = ""
n(34) = ""
n(35) = ""
n(36) = ""
n(37) = ""
n(38) = ""
n(39) = ""
n(40) = ""
n(41) = " "
Label1.Caption = m
'
a = TextBox1.Text
'
b = Trim(a)
'
c = Len(b)
'
For e = 1 To c
d = Mid(a, e, [1])
g(e) = d
Next e
'
For j = 0 To c
k(j) = Val(g(j))
Next j
If c = 1 Then GoTo
If c = 2 Then GoTo

:
For i = 0 To c
If k(i) = 0 And k(i + 1) = 0 Then m = n(0)
If k(i) = 1 And k(i + 1) = 0 Then m = n(1)
If k(i) = 2 And k(i + 1) = 0 Then m = n(2)
If k(i) = 3 And k(i + 1) = 0 Then m = n(3)
If k(i) = 4 And k(i + 1) = 0 Then m = n(4)
If k(i) = 5 And k(i + 1) = 0 Then m = n(5)
If k(i) = 6 And k(i + 1) = 0 Then m = n(6)
If k(i) = 7 And k(i + 1) = 0 Then m = n(7)
If k(i) = 8 And k(i + 1) = 0 Then m = n(8 )
If k(i) = 9 And k(i + 1) = 0 Then m = n(9)
Next i
GoTo dsdjl
:
For i = 0 To c
If k(i) = 0 And k(i + 1) = 1 Then m = n(10)
If k(i) = 1 And k(i + 1) = 1 Then m = n(11)
If k(i) = 2 And k(i + 1) = 1 Then m = n(12)
If k(i) = 3 And k(i + 1) = 1 Then m = n(13)
If k(i) = 4 And k(i + 1) = 1 Then m = n(14) + "p"
If k(i) = 5 And k(i + 1) = 1 Then m = n(15)
If k(i) = 6 And k(i + 1) = 1 Then m = n(16)
If k(i) = 7 And k(i + 1) = 1 Then m = n(17)
If k(i) = 8 And k(i + 1) = 1 Then m = n(18)
If k(i) = 9 And k(i + 1) = 1 Then m = n(19)
If k(i) = 2 And k(i + 1) = 0 Then m = n(20) + " p"
If k(i) = 2 And k(i + 1) = 1 Then m = n(20) + n(41) + n(1)
If k(i) = 2 And k(i + 1) = 2 Then m = n(20) + n(41) + n(2)
If k(i) = 2 And k(i + 1) = 3 Then m = n(20) + n(41) + n(3)
If k(i) = 2 And k(i + 1) = 4 Then m = n(20) + n(41) + n(4)
If k(i) = 2 And k(i + 1) = 5 Then m = n(20) + n(41) + n(5)
If k(i) = 2 And k(i + 1) = 6 Then m = n(20) + n(41) + n(6)
If k(i) = 2 And k(i + 1) = 7 Then m = n(20) + n(41) + n(7)
If k(i) = 2 And k(i + 1) = 8 Then m = n(20) + n(41) + n(8 )  
If k(i) = 2 And k(i + 1) = 9 Then m = n(20) + n(41) + n(9)
If k(i) = 3 And k(i + 1) = 0 Then m = n(21)
If k(i) = 3 And k(i + 1) = 1 Then m = n(21) + n(41) + n(1)
If k(i) = 3 And k(i + 1) = 2 Then m = n(21) + n(41) + n(2)
If k(i) = 3 And k(i + 1) = 3 Then m = n(21) + n(41) + n(3)
If k(i) = 3 And k(i + 1) = 4 Then m = n(21) + n(41) + n(4)
If k(i) = 3 And k(i + 1) = 5 Then m = n(21) + n(41) + n(5)
If k(i) = 3 And k(i + 1) = 6 Then m = n(21) + n(41) + n(6)
If k(i) = 3 And k(i + 1) = 7 Then m = n(21) + n(41) + n(7)
If k(i) = 3 And k(i + 1) = 8 Then m = n(21) + n(41) + n(8 )
If k(i) = 3 And k(i + 1) = 9 Then m = n(21) + n(41) + n(9)
If k(i) = 4 And k(i + 1) = 0 Then m = n(22)
If k(i) = 4 And k(i + 1) = 1 Then m = n(22) + n(41) + n(1)
If k(i) = 4 And k(i + 1) = 2 Then m = n(22) + n(41) + n(2)
If k(i) = 4 And k(i + 1) = 3 Then m = n(22) + n(41) + n(3)
If k(i) = 4 And k(i + 1) = 4 Then m = n(22) + n(41) + n(4)
If k(i) = 5 And k(i + 1) = 5 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 6 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 7 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 8 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 9 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 0 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 1 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 2 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 3 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 4 Then m = ""
If k(i) = 5 And k(i + 1) = 5 Then m = ""
If k(i) = 5 And k(i + 1) = 6 Then m = ""
If k(i) = 5 And k(i + 1) = 7 Then m = ""
If k(i) = 5 And k(i + 1) = 8 Then m = ""
If k(i) = 5 And k(i + 1) = 9 Then m = ""
If k(i) = 9 And k(i + 1) = 0 Then m = ""
Next i
GoTo dsdjl
:
dsdjl:
Label1.Caption = m
End Sub


Оформляйте код тэгами VBA Code [МОДЕРАТОРЫ]

ivan-makeem1

#1
Private Sub CommandButton1_Click()
a = 0
d = 0
c = 0
d = 0
e = 0
h = 0
j = 0
l = 0
m = ""
Dim g(40)
Dim k(40)
Dim n(99999)
 n(0) = "ноль"
n(1) = "один"
n(2) = "два"
 n(3) = "три"
 n(4) = "четыте"
  n(5) = "пять"
   n(6) = "шесть"
    n(7) = "семь"
     n(8 ) = "восемь"
      n(9) = "девять"
      n(10) = "десять"
      n(11) = "одинадцать"
      n(12) = "двенадцать"
      n(13) = "тринадцать"
      n(14) = "четырнадцать"
      n(15) = "пятнадцать"
      n(16) = "шестнадцать"
      n(17) = "семнадцать"
      n(18) = "восемнадцать"
      n(19) = "двятнатцать"
      n(20) = "двадцать"
      n(21) = "тридцать"
      n(22) = "сорок"
      n(23) = "пятдесят"
      n(24) = "шесдесят"
      n(25) = "семдесят"
      n(26) = "восемдесят"
       n(27) = "девяносто"
        n(28) = "сто"
               n(29) = "двести"
           n(30) = "триста"
           n(31) = "четыреста"
           n(32) = "пятсот"
           n(33) = "шесот"
       n(34) = "семсот"
       n(35) = "восемсот"
       n(36) = "девятьсот"
       n(37) = "тысеча"
       n(38) = "тысяч"
       n(39) = "милион"
       n(40) = "милионы"
       n(41) = "  "
Label1.Caption = m
'получаем строку
a = TextBox1.Text
'вырезаем пробелы
b = Trim(a)
'длина строки
c = Len(b)
'разбираем на символы
For e = 1 To c
d = Mid(a, e, [1])
g(e) = d
Next e
'переводим в цифры
For j = 0 To c
k(j) = Val(g(j))
Next j
If c = 1 Then GoTo единицы
If c = 2 Then GoTo десятки

единицы:
For i = 0 To c
If k(i) = 0 And k(i + 1) = 0 Then m = n(0)
If k(i) = 1 And k(i + 1) = 0 Then m = n(1)
If k(i) = 2 And k(i + 1) = 0 Then m = n(2)
If k(i) = 3 And k(i + 1) = 0 Then m = n(3)
If k(i) = 4 And k(i + 1) = 0 Then m = n(4)
If k(i) = 5 And k(i + 1) = 0 Then m = n(5)
If k(i) = 6 And k(i + 1) = 0 Then m = n(6)
If k(i) = 7 And k(i + 1) = 0 Then m = n(7)
If k(i) = 8 And k(i + 1) = 0 Then m = n(8 )
If k(i) = 9 And k(i + 1) = 0 Then m = n(9)
Next i
GoTo dsdjl
десятки:
For i = 0 To c
If k(i) = 0 And k(i + 1) = 1 Then m = n(10)
If k(i) = 1 And k(i + 1) = 1 Then m = n(11)
If k(i) = 2 And k(i + 1) = 1 Then m = n(12)
If k(i) = 3 And k(i + 1) = 1 Then m = n(13)
If k(i) = 4 And k(i + 1) = 1 Then m = n(14) + "p"
If k(i) = 5 And k(i + 1) = 1 Then m = n(15)
If k(i) = 6 And k(i + 1) = 1 Then m = n(16)
If k(i) = 7 And k(i + 1) = 1 Then m = n(17)
If k(i) = 8 And k(i + 1) = 1 Then m = n(18)
If k(i) = 9 And k(i + 1) = 1 Then m = n(19)
If k(i) = 2 And k(i + 1) = 0 Then m = n(20) + " p"
If k(i) = 2 And k(i + 1) = 1 Then m = n(20) + n(41) + n(1)
If k(i) = 2 And k(i + 1) = 2 Then m = n(20) + n(41) + n(2)
If k(i) = 2 And k(i + 1) = 3 Then m = n(20) + n(41) + n(3)
If k(i) = 2 And k(i + 1) = 4 Then m = n(20) + n(41) + n(4)
If k(i) = 2 And k(i + 1) = 5 Then m = n(20) + n(41) + n(5)
If k(i) = 2 And k(i + 1) = 6 Then m = n(20) + n(41) + n(6)
If k(i) = 2 And k(i + 1) = 7 Then m = n(20) + n(41) + n(7)
If k(i) = 2 And k(i + 1) = 8 Then m = n(20) + n(41) + n(8 )
If k(i) = 2 And k(i + 1) = 9 Then m = n(20) + n(41) + n(9)
If k(i) = 3 And k(i + 1) = 0 Then m = n(21)
If k(i) = 3 And k(i + 1) = 1 Then m = n(21) + n(41) + n(1)
If k(i) = 3 And k(i + 1) = 2 Then m = n(21) + n(41) + n(2)
If k(i) = 3 And k(i + 1) = 3 Then m = n(21) + n(41) + n(3)
If k(i) = 3 And k(i + 1) = 4 Then m = n(21) + n(41) + n(4)
If k(i) = 3 And k(i + 1) = 5 Then m = n(21) + n(41) + n(5)
If k(i) = 3 And k(i + 1) = 6 Then m = n(21) + n(41) + n(6)
If k(i) = 3 And k(i + 1) = 7 Then m = n(21) + n(41) + n(7)
If k(i) = 3 And k(i + 1) = 8 Then m = n(21) + n(41) + n(8 )
If k(i) = 3 And k(i + 1) = 9 Then m = n(21) + n(41) + n(9)
If k(i) = 4 And k(i + 1) = 0 Then m = n(22)
If k(i) = 4 And k(i + 1) = 1 Then m = n(22) + n(41) + n(1)
If k(i) = 4 And k(i + 1) = 2 Then m = n(22) + n(41) + n(2)
If k(i) = 4 And k(i + 1) = 3 Then m = n(22) + n(41) + n(3)
If k(i) = 4 And k(i + 1) = 4 Then m = n(22) + n(41) + n(4)
If k(i) = 5 And k(i + 1) = 5 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 6 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 7 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 8 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 9 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 0 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 1 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 2 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 3 Then m = n(21) + n(2)
If k(i) = 5 And k(i + 1) = 4 Then m = "девятнадцать"
If k(i) = 5 And k(i + 1) = 5 Then m = "девятнадцать"
If k(i) = 5 And k(i + 1) = 6 Then m = "девятнадцать"
If k(i) = 5 And k(i + 1) = 7 Then m = "девятнадцать"
If k(i) = 5 And k(i + 1) = 8 Then m = "девятнадцать"
If k(i) = 5 And k(i + 1) = 9 Then m = "девятнадцать"
If k(i) = 9 And k(i + 1) = 0 Then m = "девятнадцать"
Next i
GoTo dsdjl
сотни:
dsdjl:
Label1.Caption = m
End Sub

MCH

ivan-makeem1, Вы пошли каким то длинным путем, к тому же сотни даже не обработали
Возьмите готовую функцию "сумма прописью", которых достаточно много представлено в на форумах

Вот например моя "сумма прописью":
Function MSumProp$(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 = "ноль "
For i = 1 To Len(rub) Step 3
    If Mid(rub, i, 3) <> "000" Or i = Len(rub) - 2 Then
        m = m & sot(CInt(Mid(rub, i, 1))) & IIf(Mid(rub, i + 1, 1) = "1", nadc(CInt(Mid(rub, i + 2, 1))), _
                des(CInt(Mid(rub, i + 1, 1))) & ed(CInt(Mid(rub, i + 2, 1)) + IIf(i = Len(rub) - 5 And CInt(Mid(rub, i + 2, 1)) < 3, 10, 0))) & _
                IIf(Mid(rub, i + 1, 1) = "1" Or (Mid(rub, i + 2, 1) + 9) Mod 10 >= 4, razr(i + 1), IIf(Mid(rub, i + 2, 1) = "1", razr(i - 1), razr(i)))
    End If
Next i
MSumProp = UCase(Left(m, 1)) & Mid(m, 2) & kop & " копе" & IIf(kop \ 10 = 1 Or ((kop + 9) Mod 10) >= 4, "ек", IIf(kop Mod 10 = 1, "йка", "йки"))
End Function

Всего 20 строчек кода, работает до триллионов

У хозяина форума, также есть собственная функция в надстройке MyAddin:
http://www.excel-vba.ru/nadstrojka-myaddin/propis_summ_rus-chislo-ili-summa-propisyu/

ambasad

меня вот этот кусок порадовал
For i = 0 To c 
If k(i) = 0 And k(i + 1) = 0 Then m = n(0) 
If k(i) = 1 And k(i + 1) = 0 Then m = n(1) 
If k(i) = 2 And k(i + 1) = 0 Then m = n(2) 
If k(i) = 3 And k(i + 1) = 0 Then m = n(3) 
If k(i) = 4 And k(i + 1) = 0 Then m = n(4) 
If k(i) = 5 And k(i + 1) = 0 Then m = n(5) 
If k(i) = 6 And k(i + 1) = 0 Then m = n(6) 
If k(i) = 7 And k(i + 1) = 0 Then m = n(7) 
If k(i) = 8 And k(i + 1) = 0 Then m = n(8 ) 
If k(i) = 9 And k(i + 1) = 0 Then m = n(9) 
Next i 

вместо последовательного сравнивания разве нельзя было крутануть второй цикл?
For i = 0 To c 
For j=0 To 9
If k(i) = j And k(i + 1) = 0 Then m = n(j) 
Next j
Next i

Яндекс.Метрика Рейтинг@Mail.ru