EXCEL VBA TEMİZ KOD

OfisData6 dk okuma
Excel yeşil logosu yanında düzenli kod bloklarını simgeleyen sade görsel

Çalışan kod ile temiz kod aynı şey değildir — pek çok VBA kullanıcısı makro "çalıştığı an" işin bittiğini düşünür. Oysa makronun gerçek ömrü altı ay sonra başlar: KDV oranı değişir, sütun kayar, dosyayı başkası devralır. O gün kodu açan kişinin ne bulacağı, bugün yazarken verilen küçük kararlara bağlıdır. Bu sayfada aynı makronun kötü ve temiz hâli gerçek VBA editöründe yan yana; indirilebilir .xlsm'de ikisi de çalışır durumda.

Çalışma dosyasını indir (.xlsm) — aynı işin kötü ve temiz makrosu bir arada

Dosyayı açarken "İçeriği Etkinleştir" deyin; Alt+F11 ile iki sürümü karşılaştırabilirsiniz.

1. Kötü Örnek: Çalışıyor Ama Konuşmuyor

VBA editöründe tek harfli değişkenler ve gömülü çarpanlarla yazılmış kısa isimsiz makro

Dört satır ve hepsi sorunlu: makronun adı x — Alt+F8 listesinde ne yaptığına dair sıfır ipucu. Değişkenler a ve b. En pahalısı da şu satır: b = a * 0.9 * 1.2. Bu 0.9 nedir? 1.2 nedir? Yazan kişi bugün biliyor: %10 iskonto ve %20 KDV. Altı ay sonra kimse bilmeyecek — KDV %18'e döndüğünde hangi sayının değişeceği artık bir arkeoloji sorusudur. Kod çalışıyor; ama bilgiyi yazanın hafızasında saklıyor, dosyada değil.

2. Temiz Örnek: Kendini Anlatan Kod

VBA editöründe açıklama satırı, Const sabitleri ve anlamlı değişken adıyla yazılmış temiz makro

Aynı iş, bu kez kendini anlatıyor. Ad NetTutarYaz — listede görüldüğü an anlaşılır. Yeşil açıklama satırı makronun amacını tek cümleyle söylüyor. Sihirli sayılar Const ISKONTO As Double = 0.1 ve Const KDV As Double = 0.2 olarak tepede isimlendirilmiş: KDV değişince dokunulacak yer belli ve tek. Dim listeFiyat As Double bildirimi değişkenin ne taşıdığını türüyle birlikte ilan ediyor. Hesap satırı da artık okunuyor: listeFiyat * (1 - ISKONTO) * (1 + KDV) — formül, iş kuralının kendisi gibi.

3. Beş Temiz Kod İlkesi

  • İsim, işi söyler: makro adı fiil içerir (RaporuGuncelle, BasligiBicimlendir), değişken adı içeriği söyler (listeFiyat, sonSatir). "x", "deneme2", "makro7" yasak bölgedir.
  • Sihirli sayı yok: kodda geçen her sabit (oran, limit, satır numarası) Const olarak tepede isimlenir. Değişiklik tek noktaya iner — mantığın Excel formülü tarafındaki karşılığı formül mimarisi sayfasındadır.
  • Option Explicit açık: modülün başına yazılan bu satır, bildirimsiz değişkeni derleme hatasına çevirir — "topalm" gibi bir yazım hatasının sessizce yeni değişken olmasını engeller. VBE'de Tools > Options > Require Variable Declaration işaretiyle kalıcılaşır.
  • Bir makro bir iş yapar: hem biçimleyen hem hesaplayan hem kaydeden dev Sub, üç küçük Sub'a bölünür; ana makro üçünü sırayla çağırır. Küçük parça test edilir, dev blok edilemez.
  • Açıklama "neden"i yazar: kodun ne yaptığını kod söyler; açıklama satırı gerekçeyi söyler ("iade satırları toplam dışı — muhasebe kuralı"). Her satıra yorum yazmak temizlik değil gürültüdür.

4. Kayıt Makrosunu Temizlemek

Makro Kaydedici'nin ürettiği kod, temiz kodun ham maddesidir: çalışır ama Select/Activate tekrarları ve gereksiz ayrıntılarla doludur. Temizleme rutini üç dokunuştur: Range("A1").Select + Selection.Font.Bold = True çiftlerini Range("A1").Font.Bold = True tekine indirin, kaydedicinin verdiği "Makro1" adını işi anlatan bir adla değiştirin, tekrarlanan değerleri Const'a çıkarın. Bu rutini alışkanlık yapan biri, kaydediciyi kod üreticisi değil taslak üreticisi olarak kullanır — VBA öğrenmenin en verimli döngüsü de budur. Sistemli ilerlemek isteyenler için Excel VBA eğitimi bu disiplini temelden kurar.

Özetle

Temiz VBA kodu beş alışkanlıktır: anlatan isimler, Const'a çıkarılmış sabitler, Option Explicit, tek işlik makrolar ve "neden" yazan açıklamalar. İndirdiğiniz dosyadaki iki sürümü yan yana okuyun — dört satırlık makroda bile fark çarpıcıysa, dört yüz satırlık gerçek projede fark hayatta kalmakla eş anlamlıdır. Kötü kodu çalışırken temizlemeye üşenmeyin: kodun ilk okuyucusu her zaman altı ay sonraki sizsinizdir.

Sıkça Sorulan Sorular

Option Explicit ne işe yarar, neden herkes öneriyor?

Modülün başına yazılan bu satır, Dim ile bildirilmemiş her değişkeni hataya çevirir. Faydası yazım hatalarını yakalamasıdır: 'toplam' yerine 'topalm' yazarsanız normalde VBA sessizce yeni bir boş değişken oluşturur ve sonuç sinsice yanlış çıkar; Option Explicit bunu daha çalıştırmadan gösterir.

Değişken adları Türkçe mi İngilizce mi olmalı?

İkisi de çalışır; önemli olan tutarlılık ve anlamdır. Türkçe ekipler için listeFiyat, sonSatir gibi Türkçe adlar okumayı hızlandırır — yalnızca Türkçe karakter (ş, ğ, ı) kullanmamak taşınabilirlik açısından güvenlidir. Kötü olan dil seçimi değil, a/b/x gibi anlamsız adlardır.

Const ile normal değişken (Dim) arasındaki fark nedir?

Const, çalışma boyunca değişmeyen değerdir ve tanımda değer alır (Const KDV As Double = 0.2); sonradan değiştirilmeye çalışılırsa hata verir. Dim ise akış içinde değer alan değişkendir. Oran, limit gibi iş sabitleri Const olmalı — hem niyeti ilan eder hem yanlışlıkla değişmeyi engeller.

Select ve Activate kullanmak neden kötü sayılıyor?

İkisi de ekrandaki seçimi değiştirerek çalışır: yavaştır, ekranı titretir ve kullanıcı çalışırken araya tıklarsa yanlış hücreye yazabilir. Range('A1').Value gibi doğrudan başvuru aynı işi seçim yapmadan görür. Kayıt makrolarındaki Select/Selection çiftlerini teke indirmek ilk temizlik adımıdır.

Uzun makroyu bölmek performansı etkiler mi?

Ölçülebilir bir maliyeti yoktur — Sub çağrısı mikrosaniyeler düzeyindedir. Kazanç ise büyüktür: küçük makrolar tek tek test edilir, hata ayıklanır ve başka işlerde yeniden kullanılır. Performans sorunu yaşıyorsanız suçlu bölünme değil, genellikle döngü içinde hücreye tek tek yazmaktır.

Mevcut eski makrolarımı temizlemeye değer mi?

Aktif kullanılanları evet, ama tek seferde değil: her dokunuşta küçük iyileştirme kuralı işler — makroya bir iş için girdiğinizde adını düzeltin, bir sihirli sayıyı Const'a çıkarın. Çalışan kodu yalnızca temizlik için baştan yazmak riskli ve gereksizdir; dokunduğunu temizle yaklaşımı güvenlidir.