Excel uygulamasında özellikle para gibi verileri yazıya çevirmek isteriz. Bunun için makrolu ve makrosuz yöntemler bulunmaktadır. Bu yazı içeriğinde betik kullanarak excel’de sayıyı yazıya çevirme işleminden bahsedeceğim.

Excel’de Sayıyı Yazıya Çevirme

Ben bu işlem için excel betik işlemini kullanacağım. Bunun için makro işlemi de kullanılmakta. Ancak bir rakamı metne çevirmek için makro kullandığınızda bazı sorunlar olabiliyor. Bu dokümanı başka biriyle paylaştığınızda o kişiye güvenlik sebebiyle sürekli bir uyarı veriliyor. Kullanıcı bu uyarıları kabul etmeden makrolar çalışmıyor. Uyarı sebebiyle tedirgin olan kullanıcılar bu işleme onay vermeyebiliyor.

Aşağıdaki verdiğim kod sayıları metne çeviren bir betiktir. A1 hücresinden sayıyı alır ve bu sayıları üçer parça halinde böler. Daha sonra basamak basamak rakamları metne çevirir. Fonksiyon tüm işlemleri bitirince metni döndürür ve B1 hücresine yazar. Ben para birimi çevirdiğim için metinin sonuna da “TL” yazdırdım.

function main(workbook: ExcelScript.Workbook) {
  let selectedSheet = workbook.getActiveWorksheet();
  let sayiIndex = selectedSheet.getRange("A1");
  let metinIndex = selectedSheet.getRange("B1");

  let sayi = sayiIndex.getValue();
  let metin = SayıyıYazıyaÇevir(parseFloat(sayi.toString())) + " TL";

  metinIndex.setValue(metin);
}


function SayıyıYazıyaÇevir(sayi: number): string {

  let birler = ["", "bir", "iki", "üç", "dört", "beş", "altı", "yedi", "sekiz", "dokuz"];
  let onlar = ["", "on", "yirmi", "otuz", "kırk", "elli", "altmış", "yetmiş", "seksen", "doksan"];
  let yüzler = ["", "yüz", "iki yüz", "üç yüz", "dört yüz", "beş yüz", "altı yüz", "yedi yüz", "sekiz yüz", "dokuz yüz"];
  let binler = ["", "bin", "milyon", "milyar", "trilyon", "katrilyon"]; // Binlik basamağı

  let metin = "";

  if (sayi === 0) {
    return "sıfır";
  }


  for (let i = 5; i >= 0; i--) {
    let basamak = Math.floor(sayi / Math.pow(10, i * 3)); // 3 basamaklı bloklar halinde sayıyı böler
    if (basamak > 0) {
      if (basamak >= 100 && basamak % 100 === 0) {
        metin += yüzler[Math.floor(basamak / 100)] + " " + binler[i] + " ";
      } else {
        if (i === 1 && basamak < 100 && basamak >= 10) {
          metin += onlar[Math.floor(basamak / 10)] + " " + birler[basamak % 10] + " " + binler[i] + " ";
        } else {
          metin += yüzler[Math.floor(basamak / 100)] + " ";
          if (basamak % 100 >= 10 && basamak % 100 < 20) {
            metin += onlar[basamak % 10] + " on " + binler[i] + " ";
          } else {
            metin += onlar[Math.floor((basamak % 100) / 10)] + " " + birler[basamak % 10] + " " + binler[i] + " ";
          }
        }
      }
      sayi %= Math.pow(10, i * 3);
    }
  }

  if (sayi > 0) {
    if (metin !== "") {
      metin += " ";
    }
    if (sayi < 10) {
      metin += birler[sayi];
    } else if (sayi < 20) {
      metin += onlar[sayi % 10] + " on";
    } else {
      metin += onlar[Math.floor(sayi / 10)] + " " + birler[sayi % 10];
    }
  }

  return metin.trim(); 
}

Bu kodu excel’i açtığınızda “Otomatikleştir” alanı içerisindeki betiklere yazacaksınız. Bu betiğin çalışması için betiğe sağ tık yaparak çalışma kitabına buton ekleyebilirsiniz. Ancak en doğrusu bu betiği otomatikleştirmek olacaktır. Ben Power Automate üzerinden bu excel’e veri atıyorum ve daha sonra bu betiği otomatik olarak çalıştırarak sayıyı yazıya çeviriyorum.

Bu kod sadece tam sayıları çevirmektedir. Eğer ondalıklı sayı yazarsanız virgülden sonraki kısmı çevirmez. Eğer böyle bir sayıyı metne çevirecekseniz kodu güncellemeniz gerekmektedir. Excel’de betik kavramına yabancı iseniz ilk başta kodu uygulamakta zorlanabilirsiniz. Zorlandığınız aşamayı aşağıdan yorum yaparak iletebilirsiniz.

Not: Kodları uzun süre farklı sayılarla test ettim. Gözden kaçan bir sayı olduğunda kod güncellenebilir.

Excel betiklerle birçok farklı işlem yapılabilmektedir. Özellikle aktif olarak office365 kullanıyorsanız denemenizi tavsiye ederim.

Bir sonraki yazı içeriğinde görüşmek üzere…