Belgelerde para tutarının yazıyla gösterilmesi
Excel'de bir sayıyı yazıyla yazdırmak için (örneğin, "Yüz yirmi beş ruble 00 kopiyka"), standart bir fonksiyon bulunmamaktadır. En güvenilir yöntem, makro düzenleyicisi (VBA) aracılığıyla kullanıcı tanımlı bir fonksiyon oluşturmaktır. Bu, "ruble" ve "kopiyka" kelimelerini otomatik olarak çekimlemeye ve sayı basamaklarını dikkate almaya olanak tanır. Makro kullanımı güvenlik politikaları nedeniyle yasaklanmışsa, hazır eklentiler veya eşleme tabloları içeren karmaşık formüller kullanılabilir.
Neden Excel'de "Yazıyla" düğmesi yok?
İngilizce sürümde bazen SPELLDOLLARS fonksiyonu bulunur, ancak Rusça yerelleştirmede bu fonksiyon mevcut değildir. Bunun nedeni Rusça dilbilgisinin karmaşıklığıdır: son rakama bağlı olarak eklerin değiştirilmesi gerekir (1 ruble, 2 ruble, 5 ruble) ve sayının cinsiyeti dikkate alınmalıdır. Bu nedenle otomasyon için üç yöntemden biri kullanılmalıdır: makrolar, eklentiler veya yardımcı tablolar.
Hızlı çözüm: Bunu yalnızca bir kez yapmanız gerekiyorsa, çevrimiçi rakam-yazı dönüştürücüyü kullanmak ve sonucu metin olarak hücreye kopyalamak daha kolaydır. Sürekli kullanım için dosyayı VBA aracılığıyla bir kez ayarlamak daha iyidir.
Yöntem 1: Kendi fonksiyonunuzu oluşturma (VBA)
Bu yöntem maksimum kontrol sağlar ve Excel'in tüm sürümlerinde çalışır. Normal bir formül gibi davranan, örneğin SumPropis adında kendi fonksiyonunuzu oluşturacaksınız.
Adım adım talimatlar
- Excel çalışma kitabını açın ve VBA düzenleyicisini başlatmak için Alt + F11 tuş kombinasyonuna basın.
- Menüde Insert > Module seçeneğini belirleyin. Kod için boş bir pencere açılacaktır.
- Aşağıdaki kodu kopyalayın ve modül penceresine yapıştırın. Bu kod, Rusça dilbilgisi kurallarına göre kelimeleri çekimleyerek ruble ve kopiykaları doğru şekilde işler.
Function SumPropis(ByVal Amount As Double) As String
Dim Rubles As Long
Dim Kopecks As Integer
Dim Result As String
' Ruble ve kopiykaları ayır
Rubles = Int(Amount)
Kopecks = Round((Amount - Rubles) * 100, 0)
' Ruble için yazılı ifadeyi al
Result = GetWords(Rubles, True)
' "Ruble" kelimesini doğru ek ile ekle
Result = Result & " " & GetCurrencyEnding(Rubles, "рубль", "рубля", "рублей")
' Kopiykaları işle
If Kopecks > 0 Then
Result = Result & " " & GetWords(Kopecks, False) & " " & _
GetCurrencyEnding(Kopecks, "копейка", "копейки", "копеек")
Else
Result = Result & " 00 копеек"
End If
' İlk harfi büyük yap
SumPropis = UCase(Left(Result, 1)) & Mid(Result, 2)
End Function
' Ek seçimini yapan yardımcı fonksiyon
Function GetCurrencyEnding(ByVal Num As Long, ByVal S1 As String, ByVal S2 As String, ByVal S5 As String) As String
Dim LastDigit As Integer
Dim LastTwoDigits As Integer
LastDigit = Num Mod 10
LastTwoDigits = Num Mod 100
If LastTwoDigits >= 11 And LastTwoDigits <= 19 Then
GetCurrencyEnding = S5
ElseIf LastDigit = 1 Then
GetCurrencyEnding = S1
ElseIf LastDigit >= 2 And LastDigit <= 4 Then
GetCurrencyEnding = S2
Else
GetCurrencyEnding = S5
End If
End Function
' Sayıları kelimelere çevirme ana mantığı (örnek için milyonlara kadar basitleştirilmiş)
Function GetWords(ByVal Num As Long, ByVal IsMale As Boolean) As String
If Num = 0 Then Exit Function
Dim Ones(0 To 9) As String
Dim Teens(0 To 9) As String
Dim Tens(2 To 9) As String
Dim Hundreds(1 To 9) As String
' Dizileri başlat (temel)
Ones(1) = "один": Ones(2) = "два": Ones(3) = "три": Ones(4) = "четыре": Ones(5) = "пять"
Ones(6) = "шесть": Ones(7) = "семь": Ones(8) = "восемь": Ones(9) = "девять"
If Not IsMale Then Ones(1) = "одна": Ones(2) = "две"
Teens(0) = "десять": Teens(1) = "одиннадцать": Teens(2) = "двенадцать": Teens(3) = "тринадцать"
Teens(4) = "четырнадцать": Teens(5) = "пятнадцать": Teens(6) = "шестнадцать"
Teens(7) = "семнадцать": Teens(8) = "восемнадцать": Teens(9) = "девятнадцать"
Tens(2) = "двадцать": Tens(3) = "тридцать": Tens(4) = "сорок": Tens(5) = "пятьдесят"
Tens(6) = "шестьдесят": Tens(7) = "семьдесят": Tens(8) = "восемьдесят": Tens(9) = "девяносто"
Hundreds(1) = "сто": Hundreds(2) = "двести": Hundreds(3) = "триста": Hundreds(4) = "четыреста"
Hundreds(5) = "пятьсот": Hundreds(6) = "шестьсот": Hundreds(7) = "семьсот"
Hundreds(8) = "восемьсот": Hundreds(9) = "девятьсот"
' Dize birleştirme mantığı (tam çalışma için binler ve milyonların yinelemeli taraması gerekir)
' Burada temel yapı verilmiştir. Üretim ortamı için, binler/milyonlar kodu çok yer kapladığından
' güvenilir kaynaklardan tam 'Num2Text' modülünü indirmeniz önerilir.
' Fonksiyonun çalışma prensibini göstermek için yer tutucu
If Num < 1000 Then
' ... yüzler, onlar ve birlerin uygulanması ...
GetWords = CStr(Num) ' Gerçek kodda burada metin birleştirme olacaktır
Else
GetWords = "...тысяч..." ' Tam uygulama gerektirir
End If
End Function
Önemli: Yukarıdaki kod bir iskelettir. Binler, milyonlar ve milyarların tam çekimlemesi yaklaşık 200–300 satır kod kaplar. Manuel olarak yazmamak için internette "VBA сумма прописью русский язык полный код" aramasıyla hazır bir modül bulun ve aynı modüle yapıştırın. Dosyayı kaydettikten sonra .xlsm (makro destekli çalışma kitabı) formatını seçin.
Fonksiyon nasıl kullanılır?
Kodu yapıştırdıktan sonra Excel'e geri dönün. Herhangi bir hücreye aşağıdaki formülü girin:
=СуммаПрописью(A1)
Burada A1, sayısal değeri içeren hücredir. Fonksiyon anında yazılı metni döndürecektir.
Yöntem 2: Eklentilerin (Add-ins) kullanılması
Kodla uğraşmak istemiyorsanız, hazır bir eklenti yükleyebilirsiniz. Ücretsiz eklentiler mevcuttur (örneğin, "Plexus" veya meraklılar tarafından geliştirilen özel yardımcı programlar), bunlar fonksiyon sihirbazına "Matematiksel" veya "Metin" kategorisi altında ЧислоПрописью fonksiyonunu ekler.
- Eklenti dosyasını indirin (genellikle
.xlam). - Dosya > Seçenekler > Eklentiler menüsüne gidin.
- Alt kısımdaki yönetimde "Excel Eklentileri"ni seçin ve Git düğmesine basın.
- Gözat düğmesine basın, indirilen dosyayı seçin ve kurulumu onaylayın.
Bundan sonra fonksiyon tüm çalışma kitaplarınızda otomatik olarak kullanılabilir hale gelecektir.
Güvenlik: Eklentileri yalnızca geliştiricilerin resmi web sitelerinden veya güvenilir portallardan indirin. Üçüncü taraf makrolar kötü amaçlı kod içerebilir.
Makrosuz formüller (sıkı kısıtlamalar için)
Kuruluşunuzda makrolar tamamen engellenmişse, tek seçenek ВПР (VLOOKUP) fonksiyonları ve yardımcı tablolar içeren hantal formüller kullanmaktır.
- Ayrı bir sayfada referans tabloları oluşturun:
- Cinsiyet dikkate alınarak birimler (0–9).
- Onlar (10–90).
- Yüzler (100–900).
- Çekimleme varyantlarıyla "bin", "milyon" kelimeleri.
- Kaynak sayıyı matematiksel işlemler (
ЦЕЛОЕ,ОСТАТ) kullanarak basamaklarına ayırın. - Referanslardan gerekli kelimeleri çekerek
СЦЕПИТЬ(veya&) fonksiyonuyla nihai dizeyi oluşturun.
Bu yöntem güvenilir değildir, bakımı zordur ve hücre formatı değiştirildiğinde sıkça bozulur, bu nedenle yalnızca son çare olarak önerilir.
Sık yapılan hatalar
- Hücre formatı: Fonksiyon uygulandıktan sonra sonuç metin olarak görüntülenmelidir. Sonuç yerine formül görüyorsanız, makroların etkin olup olmadığını kontrol edin ve dosyayı
.xlsmformatında kaydedin. - #AD? hatası: Formüldeki fonksiyon adı VBA kodundaki adla eşleşmediğinde oluşur (büyük/küçük harf ve dili dikkate alın, fonksiyonu Latin alfabesiyle adlandırmak, örneğin
SumPropis, ve aynı şekilde çağırmak daha iyidir). - Yanlış çekimleme: Genellikle 11 ile 19 arasındaki sayılar için istisnalar unutulur (on bir ruble, on bir ruble değil). İyi bir kod bu koşulu ayrı olarak işlemelidir.
- Kopiykalar: Para birimiyle çalışırken, dönüştürmeden önce ondalık kısmı iki basamağa yuvarlamak önemlidir, aksi takdirde "99.99999 kopiyka" gibi hatalar ortaya çıkabilir.
SSS
Tutarı İngilizce olarak yazıyla yazdırabilir miyim? Evet, mantık aynıdır. VBA kodundaki kelime dizilerini İngilizce olanlarla ("one", "two", "dollar", "cents") değiştirmeniz ve karmaşık çekimleme mantığını kaldırmanız gerekir, çünkü İngilizcede ekler daha basittir.
Bu Google E-Tablolar'da çalışır mı? Doğrudan VBA kodu Google E-Tablolar'da çalışmaz. Orada Apps Script dili kullanılır. Mantık benzerdir, ancak sözdizimi farklıdır. Ayrıca Google E-Tablolar'da uzantı mağazasında üçüncü taraf eklentiler mevcuttur.
Sonucu makrolara bağımlı olmayacak şekilde nasıl sabitlerim? Dosyayı makroları devre dışı bırakılmış bir kişiye gönderirseniz, hata görecektir. Bunu önlemek için, formüllü hücreleri seçin, kopyalayın ve "Özel Yapıştır" > "Değerler" aracılığıyla geri yapıştırın. Metin kalır, ancak otomatik olarak güncellenmez.