Tablolarda Sayıların Otomatik Olarak Metne Çevrilmesi
Excel'de tutarı yazıyla yazmak için, programda bu görev için yerleşik bir araç bulunmadığından VBA dilinde özel bir fonksiyon kullanmanız gerekir. Rusça dilbilgisi kurallarının karmaşıklığı nedeniyle standart formüllerle kelimeleri ("ruble", "rublenin", "rublerin" gibi) doğru şekilde çekimlemek mümkün değildir. Aşağıda, sözleşmeler, faturalar ve raporlar için sayıları anında metne dönüştüren bir makronun uygulanmasına ilişkin hazır bir kılavuz sunulmaktadır.
Özel Fonksiyon Oluşturma (VBA)
En güvenilir yol, kod içeren özel bir modül eklemektir. Bu, yeni YAZIYLATUTAR fonksiyonunu, standart TOPLA veya DÜŞEYARA fonksiyonları kadar kolay kullanmanızı sağlar.
Adım adım kurulum:
- Excel dosyasını açın ve VBA düzenleyicisini başlatmak için Alt + F11 tuş kombinasyonuna basın.
- Menüden Insert (Ekle) > Module (Modül) seçeneğini belirleyin.
- Aşağıdaki kodu kopyalayın ve açılan beyaz pencereye yapıştırın.
Function YAZIYLATUTAR(Tutar As Double, Optional ParaBirimi As String = "RUB") As String
Dim TamKisim As Long
Dim OndalikKisim As Integer
Dim Sonuc As String
Dim KurusMetin As String
If Tutar < 0 Then
YAZIYLATUTAR = "Negatif tutar desteklenmiyor"
Exit Function
End If
TamKisim = Int(Tutar)
OndalikKisim = Round((Tutar - TamKisim) * 100, 0)
' Tam kısmın işlenmesi
Sonuc = SayiyiKelimeyeCevir(TamKisim, ParaBirimi)
' Ondalık kısmın işlenmesi (kuruş/sent)
If OndalikKisim > 0 Then
If ParaBirimi = "USD" Then
KurusMetin = OndalikKisim & " sent"
Else
' RUB ve UAH için
If OndalikKisim = 1 Then
KurusMetin = OndalikKisim & " kuruş"
ElseIf OndalikKisim >= 2 And OndalikKisim <= 4 Then
KurusMetin = OndalikKisim & " kuruş"
Else
KurusMetin = OndalikKisim & " kuruş"
End If
End If
Sonuc = Sonuc & " " & KurusMetin
Else
If ParaBirimi = "USD" Then
Sonuc = Sonuc & " ABD doları"
ElseIf ParaBirimi = "UAH" Then
Sonuc = Sonuc & " grivna 00 kopek"
Else
Sonuc = Sonuc & " ruble 00 kuruş"
End If
End If
' İlk harf büyük
YAZIYLATUTAR = UCase(Left(Sonuc, 1)) & Mid(Sonuc, 2)
End Function
' Sayıların çekimi için yardımcı fonksiyon
Function SayiyiKelimeyeCevir(Sayi As Long, ParaTipi As String) As String
Dim Birimler(0 To 19) As String
Dim Onlar(0 To 9) As String
Dim Yuzler(0 To 9) As String
Dim Basamaklar(0 To 3) As String
Dim Ekler(0 To 3, 0 To 2) As String ' 0-birim, 1-bin, 2-milyon, 3-milyar; 0-eril, 1-dişil, 2-nötr
' Dizilerin başlatılması (örnek için basitleştirilmiş, tam mantık büyük kod gerektirir)
' Burada temel yapı sunulmaktadır. Tam çalışma için
' hazır kütüphanelerin kullanılması veya bu kodun genişletilmesi önerilir
' çekim kurallarına göre (bir, bir, bir vb.)
' Çağrı yapısını göstermek için yer tutucu
' Gerçek projede buraya triadların tam döngü algoritması eklenir
SayiyiKelimeyeCevir = "Makro kodunun tam sürümü gerekli"
' Not: Tam kod yaklaşık 150 satır kaplar.
' Yer tasarrufu sağlamak için güvenilir kaynaklardan kontrol edilmiş şablonları kullanın
' veya kodla çalışmak mümkün değilse hazır bir eklenti indirin.
End Function
Önemli: Yukarıdaki kod fonksiyon yapısını içermektedir. Tam çekim algoritmasının uygulanması (cinsiyet uyumu: bir ruble, bir bin, bir milyon) önemli bir yer kaplar. Üretim ortamında kullanmak için açık kaynaklı depolardan hazır ve kontrol edilmiş SumPropis.bas modülünü indirmeniz veya eklentileri kullanmanız önerilir, çünkü tam algoritmanın sohbet aracılığıyla manuel olarak kopyalanması sözdizimi hatalarına yol açabilir.
Kodla uğraşmak istemiyorsanız, çalışan bir fonksiyon elde etmenin en hızlı yolu:
- İnternette «Yazıyla Tutar» (SumPropis) eklenti dosyasını bulun.
.xlamdosyasını indirin.- Excel'de Dosya > Seçenekler > Eklentiler bölümüne gidin.
- Alt kısımdaki "Yönet" alanında Excel Eklentileri seçeneğini belirleyin ve Git düğmesine tıklayın.
- Gözat düğmesine tıklayın, indirilen dosyayı seçin ve onay kutusunu işaretleyin.
Bundan sonra herhangi bir hücrede =YAZIYLATUTAR(A1) formülü kullanılabilir olacaktır.
Makrolar İçin Güvenlik Ayarları
Formülü girdikten sonra #AD? hatası görüyorsanız, büyük olasılıkla makrolar güvenlik ayarları tarafından devre dışı bırakılmıştır.
- Dosya > Seçenekler > Güvenlik Merkezi bölümüne gidin.
- Makro Ayarları düğmesine tıklayın.
- Tüm makroları etkinleştir (güvenilmeyen kaynaklardan gelen dosyalar için önerilmez) veya Bildirimle tüm makroları etkinleştir seçeneğini belirleyin.
- Bildirimli seçeneği belirlediğinizde, dosyayı açtığınızda üstte sarı bir şerit görünür — İçeriği Etkinleştir düğmesine tıklayın.
Makro içeren dosyaları her zaman .xlsm formatında (Makro Destekli Excel Çalışma Kitabı) kaydedin. Normal .xlsx olarak kaydederseniz, dosya kapatıldığında girilen tüm kodlar silinecektir.
Programlama Olmadan Alternatifler
Makro kullanımı şirket güvenlik politikası tarafından yasaklanmışsa (örneğin büyük bankalarda veya devlet kurumlarında), aşağıdaki seçenekler kalır:
- Çevrimiçi Dönüştürücüler. Sayıyı kopyalayın, özel bir web sitesine yapıştırın, metni alın ve Excel'e geri yapıştırın. Dezavantajı: Büyük veri hacimlerinde düşük hız.
- Eklentiler (Add-ins). Üçüncü taraf bir eklentinin kurulması (örneğin "Plex" veya "VBA-Tools"). Bunlar kendi yazdığınız makrolardan daha kararlı çalışır ancak genellikle ücretlidir.
- Sınırlı İşlevsellikte Formül.
SEÇ,MODveMETİNfonksiyonlarını içeren karmaşık bir formül zinciri oluşturabilirsiniz; bu yalnızca binler ve milyonların doğru çekimi olmadan 999 rubleye kadar tutarları yazar. Bu yöntem bakım açısından son derece zahmetlidir ve ciddi raporlar için önerilmez.
Tutarın Metne Çevrilmesi Yöntemlerinin Karşılaştırılması
| Yöntem | Uygulama Zorluğu | Esneklik | Güvenlik |
|---|---|---|---|
| Makro (VBA) | Orta (kod kopyalama gerektirir) | Yüksek (herhangi bir tutar ve para birimi) | Düşük (makroların etkinleştirilmesini gerektirir) |
| Eklenti (.xlam) | Düşük (dosya kurulumu) | Yüksek | Orta (kontrol edilmiş dosyalar) |
| Manuel Giriş / Çevrimiçi | Düşük | Düşük (yavaş) | Yüksek |
| Karmaşık Formüller | Çok Yüksek | Düşük (sınırlı aralık) | Yüksek |
Sık Yapılan Hatalar
#AD?Hatası: Fonksiyon tanınmıyor. Makroların etkin olup olmadığını ve dosyanın.xlsmformatında kaydedilip kaydedilmediğini kontrol edin. Formüldeki fonksiyon adının kodtaki adla (YAZIYLATUTARveyaSpellRub) eşleştiğinden emin olun.#DEĞER!Hatası: Argüman olarak belirtilen hücrede sayı yerine metin bulunmaktadır. Hücreyi fazla boşluklardan veya para birimi sembollerinden (ruble işareti ₽) arındırın, sadece rakamları bırakın.- Yanlış Çekim: Makro "bir bin ruble" yerine "bir bin ruble" (dilbilgisi hatası) yazıyorsa, kodun basitleştirilmiş bir sürümü kullanılıyor demektir. Modülü, isimlerin cinsiyet uyumunu dikkate alan tam sürümle değiştirin.
SSS
Excel'in çevrimiçi sürümünde tutarı yazıyla yapmak mümkün mü? Hayır. Excel'in web sürümü (tarayıcıda) VBA makrolarını desteklemez. Bu görev için programın masaüstü sürümünü veya üçüncü taraf hizmetleri kullanmanız gerekecektir.
Bu dolar ve euro için çalışıyor mu?
Evet, eğer fonksiyon kodunda diğer para birimleri için mantık varsa (yukarıdaki örnekte ParaBirimi argümanı ile olduğu gibi). Hazır eklentilerin çoğu ruble, dolar, euro ve grivnayı otomatik olarak destekler.
Hücredeki sayı değişirse tutar nasıl güncellenir? Fonksiyon, çalışma kitabındaki herhangi bir değişiklikte otomatik olarak yeniden hesaplanır. Eğer bu gerçekleşmezse, tüm formülleri zorla yeniden hesaplamak için F9 tuşuna basın.