Sayıları okuma (Yazıyla)

Sayıları okuma (Yazıyla)

#1223 İleti | Hamurcu | 17 Mar 2014, 15:05

Merhaba,

Özellikle muhasebe ile ilgilenen arkadaşlarımızın çok sık sordukları soruların başında sayıları yazıyla okumak gelir.

Örneğin;

123 --> YüzYirmiÜç

Bu sebeple, uzun zaman önce yazdığım SAYIOKU makrosunu bir kez de buradan paylaşmak istedim.

Aşağıdaki makroyu tablonuza ekleyin ve kullanmaya başlayın.

Kullanımı oldukça basittir;

Herhangi bir hücreye =SAYIOKU(123) veya =SAYIOKU(A15) gibi.

Kolay gelsin.

Programın sınırları

1. Okunabilecek en büyük sayı 999 Trilyon 999 Milyar 999 Milyon 999 Bin 999
2. Negatif Sayıları okuyabilir
3. Ondalık hanesini okur (Siz değiştirmediğiniz sürece virgülden sonra 2 hane) Ondalık hane sayısını değiştirmek için makrodaki Const OndalikHaneSayisi=2 satırını değiştirmeniz yeterli olacaktır.

Kod: Tümünü seç
Function SAYIOKU( ByVal Sayi As Double ) As String
   
   Const OndalikHaneSayisi=2
   
   Yazi = ""
   
   If Sayi < 0 Then
     Yazi = "Eksi " + SAYIOKU( -1 * Sayi )
   
   ElseIf Sayi <> Int( Sayi ) Then
     Yazi = SAYIOKU( Int( Sayi ) ) + " Nokta "
     OndalikKisim = Sayi - Int( Sayi )
     OndalikKisim = Int(OndalikKisim * 10^OndalikHaneSayisi ) / 10^OndalikHaneSayisi
     Do
       OndalikKisim = OndalikKisim * 10^OndalikHaneSayisi
      HaneDegeri = Int(OndalikKisim)
       OndalikKisim = OndalikKisim - HaneDegeri
       If HaneDegeri > 0 Then
         HaneYazisi = SAYIOKU(HaneDegeri)
         Yazi = Yazi + HaneYazisi
       Else Exit Do
      EndIf
     Loop
                                      
    ElseIf Sayi < 10 Then
      Select Case Sayi
       Case 0: Yazi = ""
       Case 1: Yazi = "Bir"
       Case 2: Yazi = "İki"
       Case 3: Yazi = "Üç"
       Case 4: Yazi = "Dört"
       Case 5: Yazi = "Beş"
       Case 6: Yazi = "Altı"
       Case 7: Yazi = "Yedi"
       Case 8: Yazi = "Sekiz"
       Case 9: Yazi = "Dokuz"
     End Select
   
    ElseIf Sayi < 100 Then
      Onluk = Int( Sayi / 10 )
     Birlik = Sayi Mod 10
     Select Case Onluk * 10
       Case 10: Yazi = "On"
       Case 20: Yazi = "Yirmi"
       Case 30: Yazi = "Otuz"
       Case 40: Yazi = "Kırk"
       Case 50: Yazi = "Elli"
       Case 60: Yazi = "Altmış"
       Case 70: Yazi = "Yetmiş"
       Case 80: Yazi = "Seksen"
       Case 90: Yazi = "Doksan"
       End Select
     If Birlik > 0 Then
       Yazi = Yazi + SAYIOKU( Birlik )
      EndIf
                             
    ElseIf Sayi < 1E+3 Then
      Yuzluk = Int( Sayi / 1E+2 )
     HaneDegeri = Sayi Mod 1E+2
     If Yuzluk=1 Then
       Yazi = "Yüz"
      Else
        Yazi = SAYIOKU( Yuzluk ) + "Yüz"
      EndIf
      Yazi = Yazi + SAYIOKU( HaneDegeri )
                              
   
    ElseIf Sayi < 1E+6 Then
      Binlik = Int( Sayi / 1E+3 )
     HaneDegeri = Sayi Mod 1E+3
     If Binlik=1 Then
       Yazi="Bin"
     Else
       Yazi = SAYIOKU( Binlik ) + "Bin"
     EndIf 
     If HaneDegeri > 0 Then
       Yazi = Yazi + SAYIOKU( HaneDegeri )
      EndIf
                          
    ElseIf Sayi < 1E+9 Then
      Milyonluk = Int( Sayi / 1E+6 )
     HaneDegeri =  Int( Sayi-( Int( Sayi / 1E+6 ) * 1E+6 ) )
     Yazi = SAYIOKU( Milyonluk ) + "Milyon"
     If HaneDegeri > 0 Then
       Yazi = Yazi + SAYIOKU( HaneDegeri )
      EndIf
                                   
    ElseIf Sayi < 1E+12 Then
      Milyarlik = Int( Sayi / 1E+9 )
     HaneDegeri =  Int( Sayi-( Int( Sayi / 1E+9 ) * 1E+9 ) )
     Yazi = SAYIOKU( Milyarlik ) + "Milyar"
     If HaneDegeri > 0 Then
       Yazi = Yazi + SAYIOKU( HaneDegeri )
      EndIf
                                    
    ElseIf Sayi < 1E+15 Then
      Trilyonluk = Int( Sayi / 1E+12 )
     HaneDegeri = Int( Sayi-( Int( Sayi / 1E+12 ) * 1E+12 ) )
     Yazi = SAYIOKU( Trilyonluk ) + "Trilyon"
     If HaneDegeri > 0 Then
       Yazi = Yazi + SAYIOKU( HaneDegeri )
       EndIf

    EndIf

   SAYIOKU() = Yazi

End Function
Kullanıcı avatarı
Hamurcu
 
İleti: 88
Kayıt: 06 Ağu 2012, 00:14
Konum: İstanbul
İşletim Sisteminiz: Windows 10
LibreOffice Sürümü: 5.x

Re: Sayıları okuma (Yazıyla)

#1228 İleti | fortran | 21 Mar 2014, 23:33

Teşekkürler Hamurcu.
Kullanıcı avatarı
fortran
 
İleti: 592
Kayıt: 01 Ağu 2012, 12:58
İşletim Sisteminiz: GNU/Linux
LibreOffice Sürümü: 5.3.3.2


Calc - Hesap Tablosu

Kimler çevrimiçi

Kayıtlı kullanıcılar: Yahoo [Bot]