Asked By:
kıymet
in
Bilgisayar & İnternet
-
554 days ago
Enver bey's Answer
selam necoper bu tür bilgileri öğrenmek için sitenin derslerine ve soru cevaplarına göz atmanı öneririm çünkü o zaman istediğin bilgiye daha kısa zamanda ulaşabilirsin.Aşağıda verdiğim kodu bende bu siteden bir arkadaştan aldım,exel de bir modül e eklersen sorun çözülecektir.Saygılar...
Public Function Sayiyi_Metne_Cevir(Sayi As Double) As String
On Error GoTo Hata_Olustu_Satiri
'Bu fonksiyon rakkam kullanilarak yazilan sayiyi metne cevirir.
'Sonuc Sayiyi_Metne_Cevir fonksiyonunun degeri olarak geri doner.
'Bu fonksiyon kesirli sayilari, yuvarladiktan sonra isleme sokar.
Dim S_Metin As String, Isaret As String
Dim S_Rakkam As Double, M_Rakkam As Double
Dim Sayac As Byte
'Fonksiyon tam sayilar icin calistigindan
'Sayi yuvarlanarak tam sayiya cevriliyor
Sayi = Round(Sayi)
Select Case Sayi
Case 0:
'Sayi sifir. Fonksiyon degerini sifir dondur, fonksiyondan cik
Sayiyi_Metne_Cevir = "sıfır"
GoTo Cikis_Satiri
Case Is < 0:
'Sayi negatif. Isareti degerini eksi yap. Sayiyi pozitife cevir, isleme devam et
Isaret = "eksi"
Sayi = -1 * Sayi
Case Is > 0:
'Sayi pozitif. Isleme devam et
Isaret = ""
End Select
'Islemlerde mod fonksiyonu kullanilacaginda overflow u engellemek icin
'Sayi 9 haneli sayilara bolunerek isleme sokuluyor
S_Rakkam = Sayi - 1000000000 * Round(0.000000001 * Sayi, 0)
If S_Rakkam < 0 Then
S_Rakkam = S_Rakkam + 1000000000
End If
M_Rakkam = S_Rakkam
'Donguye baslamadan once Sayac degerini 1'e esitle
'Sayac, sagdan itibaren kacinci 3 hanenin isleme girdigini gosterir.
Sayac = 1
Do While Sayi > 0
If (S_Rakkam Mod 1000) > 0 Then
Select Case Sayac
Case 1: S_Metin = UcHane(S_Rakkam Mod 1000)
Case 2:
'Binler bolumunde ozel bir durum var. Eger bu uc hane 001 seklinde olursa
'birbin ifadesi kullanilmadigi icin bu durumda sadece bin yazdiracagiz
If (S_Rakkam Mod 1000) = 1 Then
S_Metin = "bin" & S_Metin
Else
S_Metin = UcHane(S_Rakkam Mod 1000) & "bin" & S_Metin
End If
Case 3: S_Metin = UcHane(S_Rakkam Mod 1000) & "milyon" & S_Metin
Case 4: S_Metin = UcHane(S_Rakkam Mod 1000) & "milyar" & S_Metin
Case 5: S_Metin = UcHane(S_Rakkam Mod 1000) & "trilyon" & S_Metin
Case 6: S_Metin = UcHane(S_Rakkam Mod 1000) & "katrilyon" & S_Metin
'Bu bolumu ayni mantikla devam ettitmek mumkun ama Access
'15 haneden buyuk sayilarda yuvarlama yapacagi icin sonuc dogru olmaz
'Bu bolum algoritma olarak dogrudur.
Case Else
End Select
End If
'Isi biten sagdaki uc hane siliniyor
S_Rakkam = (S_Rakkam - (S_Rakkam Mod 1000)) / 1000
'Eger sag taraftaki dokuz hanenin islemi bittiyse
'sonraki dokuz hane S_Rakkam degerine esitleniyor
If Sayac Mod 3 = 0 Then
Sayi = (Sayi - M_Rakkam) / 1000000000
S_Rakkam = Sayi - 1000000000 * Round(0.000000001 * Sayi, 0)
If S_Rakkam < 0 Then
S_Rakkam = S_Rakkam + 1000000000
End If
M_Rakkam = S_Rakkam
End If
Sayac = Sayac + 1
Loop
Sayiyi_Metne_Cevir = Isaret & S_Metin
Cikis_Satiri:
Exit Function
Hata_Olustu_Satiri:
MsgBox Error$
Resume Cikis_Satiri
End Function
Public Function UcHane(UcHaneSayi As Integer) As String
On Error GoTo Hata_Olustu_Satiri
'Bu fonksiyon rakkam kullanilarak yazilan 3 haneli sayiyi
'metne cevirir. Sonuc UcHane fonksiyonunun degeri
'olarak geri doner
Dim UcHaneMetin As String
Select Case UcHaneSayi Mod 10
Case 1: UcHaneMetin = "bir"
Case 2: UcHaneMetin = "iki"
Case 3: UcHaneMetin = "üç"
Case 4: UcHaneMetin = "dört"
Case 5: UcHaneMetin = "beş"
Case 6: UcHaneMetin = "altı"
Case 7: UcHaneMetin = "yedi"
Case 8: UcHaneMetin = "sekiz"
Case 9: UcHaneMetin = "dokuz"
Case Else
End Select
'Sagdaki rakkam atiliyor. Sayi iki haneye dusuyor.
UcHaneSayi = (UcHaneSayi - (UcHaneSayi Mod 10)) / 10
Select Case UcHaneSayi Mod 10
Case 1: UcHaneMetin = "on" & UcHaneMetin
Case 2: UcHaneMetin = "yirmi" & UcHaneMetin
Case 3: UcHaneMetin = "otuz" & UcHaneMetin
Case 4: UcHaneMetin = "kırk" & UcHaneMetin
Case 5: UcHaneMetin = "elli" & UcHaneMetin
Case 6: UcHaneMetin = "altmış" & UcHaneMetin
Case 7: UcHaneMetin = "yetmiş" & UcHaneMetin
Case 8: UcHaneMetin = "seksen" & UcHaneMetin
Case 9: UcHaneMetin = "doksan" & UcHaneMetin
Case Else
End Select
'Sagdaki rakkam atiliyor. Sayi bir haneye dusuyor.
UcHaneSayi = (UcHaneSayi - (UcHaneSayi Mod 10)) / 10
Select Case UcHaneSayi
Case 1: UcHaneMetin = "yüz" & UcHaneMetin
Case 2: UcHaneMetin = "ikiyüz" & UcHaneMetin
Case 3: UcHaneMetin = "üçyüz" & UcHaneMetin
Case 4: UcHaneMetin = "dörtyüz" & UcHaneMetin
Case 5: UcHaneMetin = "besyüz" & UcHaneMetin
Case 6: UcHaneMetin = "altıyüz" & UcHaneMetin
Case 7: UcHaneMetin = "yediyüz" & UcHaneMetin
Case 8: UcHaneMetin = "sekizyüz" & UcHaneMetin
Case 9: UcHaneMetin = "dokuzyüz" & UcHaneMetin
Case Else
End Select
UcHane = UcHaneMetin
Cikis_Satiri:
Exit Function
Hata_Olustu_Satiri:
MsgBox Error$
Resume Cikis_Satiri
End Function
Answered
554 days ago |
Read Comments (9)
Read answer