- Katılım
- 2 Mart 2005
- Mesajlar
- 2,960
- Excel Vers. ve Dili
-
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Esenlikler Arkadaşlar;
Aşağıdaki fonksiyonlarla girilen rakamı yazıya çeviriyorum
Yalnız ikinci fonkisyonu, birin fonkisyona ilave edip
Örnek yazımlar
=Yazıyla_Rakam(C19)
=Yazıyla_Rakam(E19;"kg";"gram";3;"false")
=Yazıyla_Rakam(G19;"kg";"gram";5;"true")
Aşağıdaki fonksiyonlarla girilen rakamı yazıya çeviriyorum
Yalnız ikinci fonkisyonu, birin fonkisyona ilave edip
şeklinde kullanmak istiyorum ama mantığını anlamadığım için yapamadım yardımlarınızı esirgemezseniz sevinirim.Function Yazıyla_Rakam
Go sub cevir (tamsayı)
..........
Go sub cevir (ondalık)
Exit Function
cevir:
............
Retun
End sub
Örnek yazımlar
=Yazıyla_Rakam(C19)
=Yazıyla_Rakam(E19;"kg";"gram";3;"false")
=Yazıyla_Rakam(G19;"kg";"gram";5;"true")
Function Yazıyla_Rakam(Sayı, Optional TBirim = "YTL", Optional ABirim = "YKR", _
Optional OnUzun = 2, Optional OnSis As Boolean = False)
'###################################################################################################
'######### Bir rakamı yazı ile yazar. #########
'######### İster para, ister metre veya ondalık sistemde #########
'######### yazabilmeniz için yeniden düzenlenmiştir. #########
'######### Hsayar - 03/03/2008 #########
'###################################################################################################
'Sayı : Bir Sayı Giriniz
'TBirim : Virgülden önceki kısmın Ölçü cinsi (Ytl, Kg, Metre... vs)
'ABirim : Virgülden sonraki kısmın Ölçü cinsi (Ykr, g, cm... vs)
'OnUzun : Virgülden sonra dikkate alınacak rakam sayısı _
(Paralar için = 2, kilolar için = 3 vs...)
'OnSis : Eğer Onluk sistemdeki gibi yazacaksanız "True" veya 1 _
mesala 15,25 = "Onbeş tam yüzde yirmibeş" gibi.
Dim ParaStr$, OnFrm$, Lira$, Kurus$
Dim ArrOran() As Variant
Dim i&
If Not IsNumeric(Sayı) Then
Yazıyla_Rakam = "GİRİLEN DEĞER SAYI DEĞİL!"
Exit Function
End If
OnFrm = "0."
For i = 1 To OnUzun: OnFrm = OnFrm & "0": Next i
ParaStr = Format(Abs(Sayı), OnFrm)
Lira = Left(ParaStr, Len(ParaStr) - (OnUzun + 1)): Kurus = Right(ParaStr, OnUzun)
If OnSis = True Then
ArrOran = Array("", ", Onda ", ", Yüzde ", ", Binde ", _
", Onbinde ", ", Yüzbinde ", ", Milyonda ", _
", OnMilyonda ", ", YüzMilyonda ", ", Milyarda ", _
", OnMilyarda ", ", YüzMilyarda ", ", Trilyonda ", _
", OnTrilyonda ", ", YüzTrilyonda ")
TBirim = "Tam"
If Val(Kurus) <> 0 Then TBirim = TBirim & ArrOran(OnUzun)
ABirim = ""
Erase ArrOran
End If
Yazıyla_Rakam = IIf(Sayı < 0, "Eksi ", "") & Trim(cevir(Lira)) & " " & TBirim & " " & _
IIf(Val(Kurus) <> 0, cevir(Kurus) & " " & ABirim & " ", "")
ParaStr = "": OnFrm = "": Lira = "": Kurus = "": i = 0
Erase ArrOran()
End Function
Private Function cevir(SayiStr As String) As String
Dim Rakam(15) As Variant, c(3) As Variant
Dim Birler() As Variant, onlar() As Variant, Binler() As Variant
Dim Sonuc$, e$, i&
Birler = Array("", "bir ", "iki ", "üç ", "dört ", "beş ", "altı ", "yedi ", "sekiz ", "dokuz ")
onlar = Array("", "on ", "yirmi ", "otuz ", "kırk ", "elli ", "altmış ", "yetmiş ", "seksen ", "doksan ")
Binler = Array("trilyon ", "milyar ", "milyon ", "bin ", "")
SayiStr = String(15 - Len(SayiStr), "0") + SayiStr
For i = 1 To 15
Rakam(i) = Val(Mid$(SayiStr, i, 1))
Next i
Sonuc = ""
For i = 0 To 4
c(1) = Rakam(i * 3 + 1)
c(2) = Rakam(i * 3 + 2)
c(3) = Rakam(i * 3 + 3)
If c(1) = 0 Then
e = ""
ElseIf c(1) = 1 Then
e = "yüz "
Else
e = Birler(c(1)) + "yüz "
End If
e = e + onlar(c(2)) + Birler(c(3))
If e <> "" Then e = e + Binler(i)
If (i = 3) And (e = "bir bin ") Then e = "bin "
Sonuc = Sonuc + e
Next i
If Sonuc = "" Then Sonuc = "00"
cevir = UpperTr(Mid(Sonuc, 1, 1)) + Mid(Sonuc, 2, Len(Sonuc) - 1)
Erase Rakam(): Erase c()
Erase Birler(): Erase onlar(): Erase Binler()
Sonuc = "": e = "": i = 0
End Function