FAQ - сумма пpописью    

 Hемного пооптимизиpовал, получилось довольно компактно, можно даже сделать
FAQ, если модеpатоp сочтет нужным.

_______________________

' процедура преобразования числа в текст прописью (с) D. Feofanov 2:5000/72.4
' num2text  -  веpсия от 30.10.97

' если пpедать втоpой паpаметp, то вывод сокpащенный (1000=1 тыс.)

' для пеpеноса в Excel - зачитать текст wordpad'ом (или word'ом), как
' текстовый файл ms-dos, "выделить все", "копиpовать", пеpейти в excel
' на стpаницу "модуль" и "вставить".

Option Base 1

Private Function digits(number As Long, range As Long) As Integer

   digits = number \ range
   number = number Mod range

End Function

Public Static Function num2text(number As Long, Optional flag)

Dim fulname, shtname, sufix(4), range, Hndr, Dcm, Unit
Dim fld As Long, i As Integer, digit As Integer, endic As Integer

If IsEmpty(range) Then

  range = Array(1000000000, 1000000, 1000, 1)
  shtname = Array("млрд. ", "млн. ", "тыс. ", "")
  fulname = Array("миллиард", "миллион", "тысяч", "")

  sufix(1) = Array("а ", " ", "ов ")
  sufix(2) = Array("а ", " ", "ов ")
  sufix(3) = Array("и ", "а ", " ")
  sufix(4) = Array("", "", "")

  Hndr = Array("сто ", "двести ", "триста ", "четыреста ", "пятьсот ",_
               "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")

  Dcm = Array("двадцать ", "тридцать ", "сорок ", "пятьдесят ",_
              "шестьдесят ", "семьдесят ", "восемдесят ", "девяносто ")

  Unit = Array("один ", "два ", "три ", "четыре ", "пять ", "шесть ",_
               "семь ", "восемь ", "девять ", "десять ", "одинадцать ",_
               "двенадцать ", "тринадцать ",  "четырнадцать ", "пятнадцать ",_
               "шестнадцать ", "семнадцать ","восемнадцать ", "девятнадцать ")

End If

  If number = 0 Then

    num2text = "ноль"

  Else

    For i = 1 To UBound(range)
      If number >= range(i) Then

        fld = digits(number, range(i))

        digit = digits(fld, 100)
        If digit > 0 Then
          num2text = num2text & Hndr(digit)
        End If

        If fld > 19 Then
          digit = digits(fld, 10)
          num2text = num2text & Dcm(digit - 1)
        End If

        If fld > 0 Then
          If (range(i) <> 1000) Or (fld > 2) Then
            num2text = num2text & Unit(fld)
          ElseIf fld = 1 Then
            num2text = num2text & "одна "
          ElseIf fld = 2 Then
            num2text = num2text & "две "
          End If
        End If

        If IsMissing(flag) Then
          endic = 1
          If fld = 1 Then
            endic = endic + 1
          ElseIf fld > 4 Or fld < 1 Then
            endic = endic + 2
          End If
          num2text = num2text & fulname(i) & sufix(i)(endic)
        Else
          num2text = num2text & shtname(i)
        End If

      End If
    Next
  End If

End Function