Excel’de kullanıcıların en çok istedikleri olaylardan bir tanesi de bir hücrenin içindeki sayısal verinin başka bir hücreye metinsel olarak yazdırılmasıdır.
Bu olay en çok Excel üzerinde fatura şablonu oluşturulup basılması esnasında karşımıza çıkar.
Öncelikle şunu belirtmek istiyorum, bunu direk olarak yapan Excel’in bir özelliği yoktur. Bunu yapabilmek için Excel’in VBA tarafını kullanacağız. Yani Visual Basic Applications kullanarak Excel üzerinde bunu gerçekleştirecek fonksiyonu oluşturup, sayfamızda bu fonksiyonu kullanarak sonuca ulaşacağız.
1.adım: Öncelikle ALT+F11 tuş bileşenini kullanarak Excel VBA ara yüzünü açacağız.
2.adım: Menü çubuğundaki Insert seçeneğine tıklamak suretiyle açılan menüden Module seçeneğini seçiyoruz. Bunu yapmamızdaki amaç kullanacağımız VBA kodumuzun dosyamızdaki her sayfada kullanılabilir olmasını sağlatmaktır.
3.adım: Module seçeneğini ile boş bir module sayfası açmış olduk.
4.adım: Aşağıda yazmış olduğum VBA kodunu bu pencerenin içine kopyala-yapıştır metodu ile yapıştırınız.
Function ParaCevir(Para, Optional PBirim = “Lira”, Optional KBirim = “Kuruş”)
Dim ParaStr As String
Dim Lira As String, Kurus As String
If Not IsNumeric(Para) Then
ParaCevir = “GİRİLEN DEĞER SAYI DEĞİL!”
Exit Function
End If
ParaStr = Format(Abs(Para), “0.00”)
Lira = Left(ParaStr, Len(ParaStr) – 3)
Kurus = Right(ParaStr, 2)
ParaCevir = IIf(Para < 0, “Eksi “, “”) & Cevir(Lira) & ” ” & PBirim & ” ” & _
IIf(Val(Kurus) <> 0, Cevir(Kurus) & ” ” & KBirim & ” “, “”)
End Function
Private Function Cevir(SayiStr As String) As String
Dim Rakam(15)
Dim c(3), Sonuc, e
Birler = Array(“”, “bir”, “iki”, “üç”, “dört”, “beş”, “altı”, “yedi”, “sekiz”, “dokuz”)
Onlar = Array(“”, “on”, “yirmi”, “otuz”, “kırk”, “elli”, “altmış”, “yetmiş”, “seksen”, “doksan”)
Binler = Array(“trilyon”, “milyar”, “milyon”, “bin”, “”)
SayiStr = String(15 – Len(SayiStr), “0”) + SayiStr
For i = 1 To 15
Rakam(i) = Val(Mid$(SayiStr, i, 1))
Next i
Sonuc = “”
For i = 0 To 4
c(1) = Rakam(i * 3 + 1)
c(2) = Rakam(i * 3 + 2)
c(3) = Rakam(i * 3 + 3)
If c(1) = 0 Then
e = “”
ElseIf c(1) = 1 Then
e = “yüz”
Else
e = Birler(c(1)) + “yüz”
End If
e = e + Onlar(c(2)) + Birler(c(3))
If e <> “” Then e = e + Binler(i)
If (i = 3) And (e = “birbin”) Then e = “bin”
Sonuc = Sonuc + e
Next i
If Sonuc = “” Then Sonuc = “Sıfır”
Cevir = UCase(Mid(Sonuc, 1, 1)) + Mid(Sonuc, 2, Len(Sonuc) – 1)
End Function
Yapıştırma işlemi bittikten sonra aşağıdaki görüntüyü elde etmiş olmalısınız.
5.adım: Sıra geldi Excel üzerinde kod le oluşturulan fonksiyonu kullanmaya. Sayımızı metine çevirmek istediğimiz hücrenin içine “=paracevir(hücre adresi)” şeklinde fonksiyonumuzu yazıyoruz. Hücre adresi olarak metine çevirmek istediğimiz hücrenin adresini yazıyoruz.
Böylece istediğimiz sayıyı metine çevirmiş oluyoruz. Eğer elimizdeki sayı hem tamsayı hem de ondalık sayı içeriyorsa Lira ve Kuruş olarakta ayrımı yaparak yazımı sağlatmış oluyoruz.
Bir başka makalemizde oluşturduğumuz fonksiyonun diğer tüm Excel kitaplarında çalışmasını nasıl sağlatırız ondan bahsedeceğiz.
Elinize sağlık
Teşekkürler elinize sağlık
Kopyalarken sanirim tirnaklar farkli bir karakter (standart tirnak degil) oldugu icin “Constant expresson required” hatasi aldim. Ondan sonra tirnaklar normal (“) tirnakla degistirdim “Syntax error” hatasi aldim.
excel 2016 “Constant expresson required” diye hata veriyor. bilginize
Merhaba,
Önce formülü word ‘e veya not defterine alıp ctrl+h komutu ile tırnak simgelerini düzeltin.
11. ve 12. Satırı aşağıdaki şekilde tek satır halinde yazdığınızda düzeliyor. sanırım alt satıra geçmek için kullanılan _ simgesi 32bit excelde veya office sürümünden dolayı çalışmıyor. (Yazılan sayılar bitişik yazılır. Ayrı isterseniz && arası tırnaklar arasına boşluk koymanız yeterli oluyor.)
ParaCevir = IIf(Para < 0, "Eksi ", "") & Cevir(Lira) & "" & PBirim & "" & IIf(Val(Kurus) 0, Cevir(Kurus) & “” & KBirim & “”, “”)
bu şekilde düzenlediğinizde oluyor.
Elinize emeğinize sağlık çok güzel olmuş. Rakamların arasına boşluk bırakmayı yapabilseydim mükemmel olacaktı. Bilgim yetersiz olduğu için çözümlemesini yapamadım. Bu kadar az satırla kodlamayı yapmış olmanız övgüyü hak ediyor. Başarılar dileklerim.