TopSladur.com - Кой е най-големия?
Помогни ни да направим Uroci.net по - богат! Добави урок
Категории Други уроци Adobe Photoshop Adobe Illustrator Adobe Flash Adobe Fireworks DreamWeaver CSS и HTML Corel Draw Image Ready PHP SEO CMS Microsoft Windows Microsoft Word Microsoft Excel
PowerPoint Microsoft Access Microsoft Publisher Linux Visual basic JavaScript Ajax 3ds Max Maya 3D C++ Sound Forge Gimp SWiSH

Изписване на число с думи

hginov   трудност:    видян: 19919

Отворете нов Book.


Извикайте Visual Basic Editor - Alt+F11.

Добавете Module.

уроци - Add Module.JPG

Маркирайте и копирайте следния код:

Function Spell(NumStr, i)
Static Units(20) As String, Decim(9) As String, Hundr(11) As String, Thous(5) As String, Thous1(5) As String
Static Units1(20) As String
Units(0) = ""
Units(1) = "един "
Units(2) = "два "
Units(3) = "три "
Units(4) = "четири "
Units(5) = "пет "
Units(6) = "шест "
Units(7) = "седем "
Units(8) = "осем "
Units(9) = "девет "
Units(10) = "десет "
Units(11) = "единадесет "
Units(12) = "дванадесет "
Units(13) = "тринадесет "
Units(14) = "четиринадесет "
Units(15) = "петнадесет "
Units(16) = "шестнадесет "
Units(17) = "седемнадесет "
Units(18) = "осемнадесет "
Units(19) = "деветнадесет "

Units1(0) = ""
Units1(1) = "една "
Units1(2) = "две "
Units1(3) = "три "
Units1(4) = "четири "
Units1(5) = "пет "
Units1(6) = "шест "
Units1(7) = "седем "
Units1(8) = "осем "
Units1(9) = "девет "
Units1(10) = "десет "
Units1(11) = "единадесет "
Units1(12) = "дванадесет "
Units1(13) = "тринадесет "
Units1(14) = "четиринадесет "
Units1(15) = "петнадесет "
Units1(16) = "шестнадесет "
Units1(17) = "седемнадесет "
Units1(18) = "осемнадесет "
Units1(19) = "деветнадесет "

Decim(0) = ""
Decim(1) = "двадесет "
Decim(2) = "тридесет "
Decim(3) = "четиридесет "
Decim(4) = "петдесет "
Decim(5) = "шестдесет "
Decim(6) = "седемдесет "
Decim(7) = "осемдесет "
Decim(8) = "деведесет "

Hundr(0) = ""
Hundr(1) = ""
Hundr(2) = "сто "
Hundr(3) = "двеста "
Hundr(4) = "триста "
Hundr(5) = "четиристотин "
Hundr(6) = "петстотин "
Hundr(7) = "шестстотин "
Hundr(8) = "седемстотин "
Hundr(9) = "осмстотин "
Hundr(10) = "деветстотин "

Thous(0) = ""
Thous(1) = ""
Thous(2) = "хиляди "
Thous(3) = "милиона "
Thous(4) = "милиарда "

Thous1(0) = ""
Thous1(1) = ""
Thous1(2) = "хиляда "
Thous1(3) = "милион "
Thous1(4) = "милиард "
Dim Num, RetStr
RetStr = ""
Num = CInt(NumStr)
If Num = 0 Then
Spell = RetStr
Exit Function
End If

If Num = 1 Then
Select Case i
Case 1
RetStr = "и " & Units(1) & Thous1(1)
Case 2
RetStr = Thous1(2)
Case Else
RetStr = Units(1) & Thous1(i)
End Select
Spell = RetStr
Exit Function
End If

RetStr = RetStr & "и " & Hundr(CInt(Left(NumStr, 1)) + 1)
If CInt(Right(NumStr, 2)) = 0 Then
Spell = RetStr & Thous(i)
Exit Function
End If

If Mid(NumStr, 2, 1) = "0" Or Mid(NumStr, 2, 1) = "1" Then

If i = 2 Then
Spell = RetStr & "и " & Units1(CInt(Mid(NumStr, 2, 2))) & Thous(i)
Else
Spell = RetStr & "и " & Units(CInt(Mid(NumStr, 2, 2))) & Thous(i)
End If
Exit Function
End If

If Right(NumStr, 1) = "0" Then
RetStr = RetStr & Decim(CInt(Mid(NumStr, 2, 1)) - 1)
Else
If i = 2 Then
RetStr = RetStr & Decim(CInt(Mid(NumStr, 2, 1)) - 1) & "и " & Units1(CInt(Right(NumStr, 1)))
Else
RetStr = RetStr & Decim(CInt(Mid(NumStr, 2, 1)) - 1) & "и " & Units(CInt(Right(NumStr, 1)))
End If
End If

Spell = RetStr & Thous(i)

End Function

Function Slov(ByVal Num As Currency)
Static c(5)
Dim NumStr, NumStr1, i, k
If Not IsNull(Num) Then
NumStr = Trim(CStr(Num))
If Num = 0 Then
Slov = "нула"
Exit Function
End If

Dim Buf As String:
If (Num < 0@) Then Buf = "минус " Else Buf = ""
Dim Frac As Currency: Frac = Abs(Num - Fix(Num))
If (Num < 0@ Or Frac <> 0@) Then Num = Abs(Fix(Num))
Dim AtLeastOne As Integer: AtLeastOne = Num >= 1

i = 1
NumStr = Num
Do
If Len(NumStr) > 3 Then
c(i) = Right$(NumStr, 3)
NumStr = Left$(NumStr, Len(NumStr) - 3)
i = i + 1
Else
c(i) = String(3 - Len(NumStr), "0") & NumStr
Exit Do
End If
Loop
NumStr = ""
For k = i To 1 Step -1
NumStr = NumStr & Spell(c(k), k)
Next k
Debug.Print NumStr
If Left(NumStr, 2) = "и " Then
NumStr = Right$(NumStr, Len(NumStr) - 2)
End If
If Left(NumStr, 2) = "и " Then
NumStr = Right$(NumStr, Len(NumStr) - 2)
End If
'стотинки
If (Frac = 0@) Then
Buf = Buf
ElseIf (Int(Frac * 100@) = Frac * 100@) Then
If AtLeastOne Then Buf = Buf & "и "
Buf = Buf & Format$(Frac * 100@, "00")
Else
If AtLeastOne Then Buf = Buf & "и "
Buf = Buf & Format$(Frac * 10000@, "0000")
End If
Slov = NumStr & Buf ' "лв. "
End If
End Function


Върнете се в работния лист и въведете формулата в клетката, в която искате да се изпише числото с думи.

уроци - Add Formula.JPG

Натиснете Enter.

Въведете числото.

уроци - Enter Number.JPG



Коментари (27)

iordan_93 на 29.05 2007 в 16:57ч.
Не стана при мен :(
hginov на 31.05 2007 в 06:39ч.
В Module1 копирай само чевения текст /по-горе/. Постарай се да е само той, иначе ще получаваш съобщение за грешки!
kikoko на 31.05 2007 в 09:43ч.
Функцията работи , не е тествана 101% .
Някакъв коментар за Функцията Spell ?
Ако може да се напишат някакви препоръки как да се ползва Функцията във всеки друг файл , и потенциално на друг компютър с MSExcel ?
P.S.
По-горните писания не са критика !
Може някъде из Уроците за Excel да има отговори на въпросите ми , но не съм видял .
hginov на 31.05 2007 в 19:17ч.
Spell е подфункция на функцията Slov, която връща обработените /разделените на стотни, хилядни, милионни/ части от въведеното число в А1, като добавя в края на съставения стринг числото след десетичната запетая.
Може да се ползва във фсички видове Visual Basic базирани продукти - MS Acces, например.
Що се отнася до ползването на функцията от друг компютър потърси връзки между файлове.
Пример:
=Slov('\192.168.5.13Downloads[Book2.xls]Sheet1'!$A$1)
където \192.168.5.13Downloads е пътя до файла на другия компютър
hginov на 31.05 2007 в 19:20ч.
за формула на A3 се въвежда '=Slov('\192.168.5.13Downloads[Book2.xls]Sheet1'!$A$1)'
kikoko на 02.06 2007 в 18:30ч.
Благодаря за отговора !
Причината за по-горните въпроси беше , че така и не ми стана ясно с времето , човек ако събира такъв набор от потребителски функции , как да ги управлява така , че да му са подръка ... xla ли в STARTUP ли или и пр.
Мисля , че ТУК не му е мястото да се дискутира това , няма смисъл да ми отговаряш . Но един Урок в тази насока , както и за '\192.168.5.13Downloads[Book2.xls]Sheet1'!$A$1 ще е интересен .
Поздрави !
bobi97 на 18.06 2007 в 14:29ч.
БРАВО!!!Благодаря! :)
plam на 23.06 2007 в 12:25ч.
Хубава функция,благодаря и аз!С цели числа се получава,но с десетични не.Например 0.005 го изписва като 0050,0.150 като 15, 0.800 като 80,3.500 като три и 50.Имаш ли вариант за числа с цифри след деситичната запетая.Благодаря!
hginov на 24.06 2007 в 15:11ч.
kikoko, аз съм си направил папка "VB" и подпапки с текстови файлчета на функциите с малки примерчета. Може и да не е най-доброто, но върши работа!
Naskobk на 24.06 2007 в 23:51ч.
малко съм преработил накрая кода за да може да се използва
във фактури със функцията словом
ето така мисля че е по добре закръгля до втория знак и пише лева и стотинки

'стотинки
If (Frac = 0@) Then
Buf = Buf
ElseIf (Int(Frac * 100@) = Frac * 100@) Then
If AtLeastOne Then Buf = Buf & "и "
Buf = Buf & Format$(Frac * 100@, "00") & " стотинки"
Else
If AtLeastOne Then Buf = Buf & "и "
Buf = Buf & Format$(Frac * 100@, "00") & " стотинки"
End If
Slov = NumStr & "лева " & Buf ' "лв. "
End If
End Function
Naskobk на 24.06 2007 в 23:59ч.
просто сменете накрая стария код
'стотинки
If (Frac = 0@) Then
Buf = Buf
ElseIf (Int(Frac * 100@) = Frac * 100@) Then
If AtLeastOne Then Buf = Buf & "и "
Buf = Buf & Format$(Frac * 100@, "00")
Else
If AtLeastOne Then Buf = Buf & "и "
Buf = Buf & Format$(Frac * 10000@, "0000")
End If
Slov = NumStr & Buf ' "лв. "
End If
End Function

със този

'стотинки
If (Frac = 0@) Then
Buf = Buf
ElseIf (Int(Frac * 100@) = Frac * 100@) Then
If AtLeastOne Then Buf = Buf & "и "
Buf = Buf & Format$(Frac * 100@, "00") & " стотинки"
Else
If AtLeastOne Then Buf = Buf & "и "
Buf = Buf & Format$(Frac * 100@, "00") & " стотинки"
End If
Slov = NumStr & "лева " & Buf ' "лв. "
End If
End Function
kiskin на 15.08 2007 в 12:19ч.
От доста време търся такава формула, защото ми се налага много често да изписвам стойности с думи.
Да си жив и здрав!!!
Ако имаш някоя друга подобна 'хитринка' сподели я.
P.S. Как мога да ти се отблагодаря за формулата ?
kiskin на 15.08 2007 в 12:54ч.
Копирам формулата с твоето допълнение и работи перфектно!
Когато обаче го запиша като файл, при повторно отваряне функцията не приема аргументи!
Помогни ?!?
kiskin на 15.08 2007 в 13:18ч.
Знам, че прекалявам, но опитай с 250, 380 или друго подобно число.
Изписва двеста петдесет лева - вместо двеста и петдесет лева
Изписва триста осемдесет лева - вместо триста и осемдесет лева и т.н.
Можеш да ми отговориш и на e-mail: kiskin@abv.bg
Naskobk на 17.08 2007 в 07:40ч.
ето това направи
замени този ред
If Right(NumStr, 1) = "0" Then
RetStr = RetStr & Decim(CInt(Mid(NumStr, 2, 1)) - 1)
със този
If Right(NumStr, 1) = "0" Then
RetStr = RetStr & "и " & Decim(CInt(Mid(NumStr, 2, 1)) - 1)
Else

и си готов.....
kiskin на 17.08 2007 в 12:06ч.
Като въведа 250 - двеста ипетдесет лева(няма интервал), а с голямо число 1 250 135,48 - един милион И двеста Ипетдесет хиляди И сто тридесет и пет лева и 48 стотинки (първото и третото главно И трябва да ги няма, а след второто няма интервал). Моля те помогни ?!? Нищо не разбирам?
Naskobk на 17.08 2007 в 14:56ч.
между кавичките кадето RetStr & "и " & има интервал а ти си писал
без интервал ето така е грешно RetStr & "и" & а така верно RetStr & "и " &
видя ли разликата има интервал между кавичките и буквата и този интервал е много важен за да ти работи правилно програмата ето толкова трябва да е интервала " и " а не толкова "и"
пробвай така
kiskin на 17.08 2007 в 22:13ч.
Слагах интервали къде ли не, само там не се сетих.
Сега вече мисля, че всичко стана ?!!
Много съм ти благодарен за съдействието и за помощта !!
Не разбрах само за какво служи Spell ??
(Spell е подфункция на функцията Slov, която връща обработените /разделените на стотни, хилядни, милионни/ части от въведеното число в А1, като добавя в края на съставения стринг числото след десетичната запетая.) Нищо, ама нищо не разбирам ???
Все пак БЛАГОДАРЯ !!!
oldharry на 18.09 2007 в 22:09ч.
За сажаление екселските обекти ги няма в ОО и не мога да го ползвам. Намерих от чужди сайтове подобни кодове, но са за други валути и нестават за български. Мисля че му трябва много малка преработка, но бейсика ми приключи с правец 16 :

БЛАГОДАРЯ ПРЕДВАРИТЕЛНО
Tamara на 20.09 2007 в 11:43ч.
Защо не използвате тази функцията lookup за фактури. Наистина иска малко повече писане в началото, но действа идеално.
sunivo на 03.12 2007 в 13:32ч.
На моя ексел, такава икона няма.....Визирам съвсем в началото обяснението
yaskawa на 26.01 2008 в 20:04ч.
Работи и съм много доволен от резултата.Но незнам защо, като сейфам и затворя файла,след повторно стартиране на същия файл, вече не работи.Излиза " #Name? " на мястото на функцията "Slov".Модула с кода си стои във файла, но не работи.Някой да има идея защо?Ползвам Office 2007
hotris на 28.01 2008 в 20:44ч.
Това е защото не са ти разрешени макроси. Сигурно виждаш над таблицата в дясно следното съобщение: Security Warning Macros have been .... натисни
option и разреши макроси.
Може да стане още чрез натискане на Office button/Excel option/trust center/Trust center settings.../Macro Settings/Enable all macros
yaskawa на 29.01 2008 в 11:52ч.
Много ти благодаря!Намаше съобщение,но след като разреших всички макроси-всичко е ОК.
te0d0ra на 03.02 2008 в 11:05ч.
Когато копирам кода и го добавя в Module всичкия текст на кирилица ми се изписва с ???. Съответно и в таблицата срещу числото има съответният брой ???....... Какво да ги правя тези шрифтове?:)
argiroff на 07.03 2008 в 12:28ч.
всичко е добре, работи, но явно не знам това module как да го запазя. правя го, отивам в Excel всичко изписва, записвам файла някъде /като формуляр/ и след това като го от отворя функцията slov и module ги няма и дори в същата клетка, ако пишеш цифра вече не я изписва, а излиза " #Name? "
nevvenna на 10.06 2008 в 20:45ч.
Тази функция е меню Tools-Macro,пиша за тези които като мен се чудят къде се намира,клавишната комбинация пи мен не се получи нещо.Иначе като открих в кое меню е стана много лесно.Добър урок,благодаря.

Регистрирайте се, за да добавите коментар

реклама

© Всички права запазени. 2006-2008. Created by: Site.bg
Препоръчваме: IT Новини | Кино и игри | Диплома.бг | Paparak.bg | Тунинг Портал | uchenik.com | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | AnimeS-bg.com | Фото Форум | Запознанства | Мрежа от приятели | IT Light | Spodeli.net | Фото-Култ | Dalavera.net | IDG.BG | Teenproblem.net | mucunki.com | Блог - Образование | Fresh-BG.com | Hanovete.com | Bulfleet.com | Mythlands.com | Ohoboho.com | News24 | Казанлък.Com | Atol.bg | Elmaz.com | MobileBulgaria.com | Setcom.bg