- Katılım
- 2 Mart 2005
- Mesajlar
- 2,960
- Excel Vers. ve Dili
-
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Merhaba Arkadaşlar Rakamı hücreye yazmak için aşağıdaki fonksiyonu kullanıyorum.ama Şimdi değişik bir hali lazım oldu Basamakta yer alan her kelimeyi diznin her elmanına ayrı atamak hususunda yardımlarınız bekliyoreum
Dizmiz YazOku() olsun
1 için YazOku(1) = "Bir"
11 için YazOku(1) = "On"
YazOku(2) = "Bir"
111 için YazOku(1) = "Yüz"
YazOku(2) = "On"
YazOku(3) = "Bir"
vs.... şeklinde yapabilirmiyiz.
Dizmiz YazOku() olsun
1 için YazOku(1) = "Bir"
11 için YazOku(1) = "On"
YazOku(2) = "Bir"
111 için YazOku(1) = "Yüz"
YazOku(2) = "On"
YazOku(3) = "Bir"
vs.... şeklinde yapabilirmiyiz.
Kod:
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 ", "") & 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 = "birbin") 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