Sayıları okuma (Yazıyla)

Cevapla
Kullanıcı avatarı
Hamurcu
Mesajlar: 265
Kayıt: 06 Ağu 2012, 00:14
İşletim Sisteminiz: Windows 10/11 - Pardus Linux
LibreOffice Sürümü: 7.x

Sayıları okuma (Yazıyla)

Mesaj gönderen Hamurcu »

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ı
fortran
Mesajlar: 264
Kayıt: 01 Ağu 2012, 12:58
İşletim Sisteminiz: GNU/Linux
LibreOffice Sürümü: 7.4.4.2

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

Mesaj gönderen fortran »

Teşekkürler Hamurcu.
Cevapla