Excel'de Sayıyı Yazıyla Nasıl Yazılır: Formüller ve Makrolar
Rusça'da rakamları metne dönüştürmek (tutarı yazıyla yazmak) için Excel'de standart bir işlev bulunmamaktadır. En güvenilir ve hızlı yöntem, kelimeleri otomatik olarak çekimleyen ve para birimini ekleyen bir makro (VBA) tabanlı kullanıcı tanımlı işlev kullanmaktır. Eğer makro kullanımı güvenlik politikaları nedeniyle yasaklanmışsa, yardımcı tablolarla karmaşık formüller uygulanabilir; ancak bunlar yalnızca sınırlı sayı aralıkları için çalışır.
Neden Sayıları Kelimelerle Çıkarmak Gerekiyor?
Sayıların metin formatına dönüştürülmesi, finansal belgelerin düzenlenmesinde kritik öneme sahiptir:
- Faturalar ve tutanaklar: Yazıyla tutar, belirsizliği ortadan kaldırır ve rakamların tahrif edilmesini engeller.
- Sözleşmeler: Hukuki doğruluk, maliyetin harflerle de belirtilmesini gerektirir.
- Fişler ve irsaliyeler: Baskılı formların doldurulmasının otomatikleştirilmesi zaman kazandırır ve manuel hatalar riskini azaltır.
Önemli: Excel'in Rusça sürümünde SUMMPROPISYU gibi yerleşik bir işlev bulunmaz (bazı eklentilerde olduğu gibi). Çözüm, kendi aracınızı oluşturmayı gerektirir.
Yöntem 1: Makro (VBA) Kullanımı — Önerilen Seçenek
Bu yöntem, tüm çalışma kitabındaki hücrelerde çalışan, kelimeleri ("ruble", "rublenin", "rublerin") doğru şekilde çekimleyen ve kopekleri işleyen kendi işlevinizi oluşturmanıza olanak tanır.
Adım Adım Talimatlar
- Excel çalışma kitabını açın ve VBA düzenleyicisini açmak için Alt + F11 tuş kombinasyonuna basın.
- Menüden Insert > Module seçeneğini belirleyin.
- Aşağıdaki kodu kopyalayın ve modülün beyaz penceresine yapıştırın.
Function SumPropis(MyNumber As Double) As String
Dim Rubles As Integer, Kopecks As Integer
Dim Result As String
' Ruble ve kopekleri ayır
Rubles = Int(MyNumber)
Kopecks = Round((MyNumber - Rubles) * 100, 0)
' Tam kısmı dönüştürme işlevi (örnek için basitleştirilmiş mantık)
' Tam çalışma için büyük bir kelime dizisi gerekir.
' Aşağıda harici mantık çağrısı veya basitleştirilmiş bir varyant verilmiştir.
' Gerçek bir projede buraya tam çekim algoritması eklenir.
Result = GetWordGroup(Rubles, 0) & " rub. "
If Kopecks > 0 Then
Result = Result & GetWordGroup(Kopecks, 1) & " kop."
Else
Result = Result & "00 kop."
End If
SumPropis = Application.Proper(Result) ' İlk harf büyük
End Function
' Çekim için yardımcı işlev (kelime dizilerinin tam uygulanmasını gerektirir)
' Not: Tam kod çok fazla yer kaplar.
' Çalışması için "SumPropis" adlı hazır ve test edilmiş modülü güvenilir bir kaynaktan kopyalayın
' veya mantığı test etmek için aşağıdaki basitleştirilmiş sürümü kullanın.
Function GetWordGroup(ByVal Number As Long, ByVal CurrencyType As Integer) As String
' Bu bir yer tutucudur. Gerçek çalışma için birimler, onlar ve yüzler için tam kod gerekir
' cinsiyet (bir, bir, bir) ve haller dikkate alınarak.
' VBA için "Sayıların Yazımı" adlı hazır bir modül bulmanız önerilir.
GetWordGroup = CStr(Number)
End Function
Tam Kod Sorunu: Rusça sayı sıfatlarının tam çekim algoritması çok hacimlidir (yüzlerce satır kod). Bir makale çerçevesinde, kısaltma hataları olmadan tamamını vermek mümkün değildir.
Çözüm: Hazır ve test edilmiş SumPropis.bas modülünü Excel geliştiricilerinin açık depolarından indirin veya bu işlevi otomatik olarak ekleyen "Plexus" veya "VBA-Excel.ru" gibi eklentileri kullanın.
İşlev Nasıl Kullanılır?
Tam makro kodunu yaptıktan sonra:
- Excel'e geri dönün.
- Herhangi bir hücreye şu formülü girin:
=SumPropis(A1), burada A1 sayıyı içeren hücredir. - Dosya "Makro Destekli Excel Çalışma Kitabı (.xlsm)" formatında kaydedilmelidir.
Yöntem 2: Makrosuz Formüller (Küçük Sayılar İçin)
Güvenlik servisi makroları yasaklıyorsa, formüller kullanılabilir. Bu yöntem karmaşıktır çünkü kelimelerle başvuru tabloları oluşturmayı gerektirir.
Başvuru Verilerini Hazırlama
Yeni bir "Başvuru" sayfası oluşturun ve birimler, onlar ve yüzler için kelimeleri haller dikkate alınarak sütunlara doldurun.
Karmaşık Formül Örneği
999'a kadar olan sayılar için PROPER, CHOOSE ve MOD işlevlerine dayalı bir yapı kullanılabilir. Ancak formül hantal hale gelecektir.
Birimler için basitleştirilmiş mantık örneği (tüm haller dikkate alınmadan):
=CHOOSE(MOD(A1,10)+1; ""; "Bir"; "İki"; "Üç"; "Dört"; "Beş"; "Altı"; "Yedi"; "Sekiz"; "Dokuz")
Hayat Kurtaran İpucu: Devasa bir formülü manuel olarak yazmak yerine, "yazıyla sayı" çevrimiçi dönüştürücülerini kullanın. Metni orada oluşturun, kopyalayın ve Excel'e değer olarak yapıştırın. Bu, tek seferlik görevler için daha hızlı ve güvenilirdir.
Yöntemlerin Karşılaştırılması
| Kriter | Makro (VBA) | Karmaşık Formüller | Çevrimiçi Dönüştürücü |
|---|---|---|---|
| Esneklik | Yüksek (herhangi bir tutar) | Düşük (sınırlı aralık) | Orta |
| Güvenlik | Makro izni gerektirir | Tamamen güvenli | Veriler ağa gider |
| Uygulama Zorluğu | Orta (kod gerekir) | Yüksek (formüllerde hatalar) | Düşük |
| Otomasyon | Anında güncelleme | Anında güncelleme | Manuel çalışma |
Sık Yapılan Hatalar
- Dosya Formatı: Makro kullanılırken dosya
.xlsxolarak kaydedilirse, kod kaybolur. Her zaman .xlsm seçin. - Makroların Devre Dışı Bırakılması: Dosya açıldığında işlevler
#AD?hatası veriyorsa, "Dosya" > "Seçenekler" > "Güvenlik Merkezi"ne gidin ve makroların çalışmasına izin verin. - Yanlış Çekim: Kendi kendine yapılan formüller genellikle sayının cinsiyetini dikkate almaz (1 ruble, 2 ruble, 5 ruble). Makrolar bu sorunu otomatik olarak çözer.
- Kopekler: Kopeklerin yuvarlanması unutulur, bu da virgülden sonra uzun kuyruklara neden olur (örneğin, 10,0000001 rub). Sayıyı formüle aktarmadan önce
ROUNDişlevini kullanın.
SSS
İngilizce yazıyla tutar yapılabilir mi?
Evet, İngilizce sürüm Excel'de yerleşik SPELLDOLLARS() işlevi vardır, ancak yalnızca dolarlar ve İngilizce ile çalışır. Rusça için bir makro gerekir.
Neden işlev #AD? hatası döndürüyor? Bu, Excel'in işlev adını görmediği anlamına gelir. Ya makro modüle eklenmemiştir, ya da dosya makro desteği olmadan kaydedilmiştir, ya da formüldeki işlev adı yanlış yazılmıştır.
Kopek yoksa ondalık basamakları nasıl kaldırılır? Makro kodunda genellikle bir kontrol bulunur: eğer kopekler 0'a eşitse, "00 kop." veya "sıfır kopek" ifadesi eklenir. Bu, VBA prosedürü içinde yapılandırılır.