İleri Ders 6: EĞERHATA ve EĞERYOKSA ile Hata Yönetimi
Yayın: · Son güncelleme:
Bu derste
Bu derste formül hatalarını EĞERHATA ve EĞERYOKSA ile yakalamayı, ikisi arasındaki farkı ve hangi hatayı gizlemenin raporu yanıltacağını öğrenirsiniz. Sıfıra bölme ve bulunamayan kod örnekleriyle doğru fonksiyonu seçmeyi pratik edersiniz.
Ders sonunda şunları yapabileceksiniz
- EĞERHATA'nın hangi hata türlerini yakaladığını bilmek
- EĞERYOKSA'nın yalnızca #YOK hatasını yakaladığını görmek
- Arama formüllerinde EĞERYOKSA'yı tercih etme nedenini açıklamak
- Hata yerine gösterilecek değeri (0, boş, metin) bilinçli seçmek
İçindekiler
Hata yakalamak neden gerekir?
Bir raporda tek bir #SAYI/0! hücresi, o hücreye bağlı bütün toplamları da hataya çevirir. Bir maliyet tablosunda adedi henüz girilmemiş ürün için birim maliyet hesaplanınca tablonun alt toplamı da okunmaz hâle gelir. Hata yakalama fonksiyonları, hatanın yerine sizin belirlediğiniz bir değeri koyar ve hesap zincirinin geri kalanını korur.
Excel'de bu iş için iki fonksiyon vardır. EĞERHATA her türlü hatayı yakalar. EĞERYOKSA yalnızca #YOK hatasını yakalar ve Excel 2013'ten beri bulunur.
EĞERHATA ile her hatayı karşılamak
EĞERHATA iki argüman alır: =EĞERHATA(değer; eğer_hataysa_değer). Birinci argüman hesaplanır. Sonuç bir hataysa ikinci argüman, değilse hesabın kendisi döner.
Toplam maliyeti 3.200 TL, adedi 0 olan Tabak için =B3/C3 #SAYI/0! verir. =EĞERHATA(B3/C3;"Adet girilmedi") aynı hücrede açıklayıcı bir mesaj gösterir. Kupa için ise formül normal çalışır ve 4.500 / 150 = 30 TL döner.
Hata yerine ne yazacağınız, hücreye bağlı hesapları etkiler. Metin yazarsanız ORTALAMA o hücreyi yok sayar, 0 yazarsanız ortalamaya katılır ve sonucu düşürür.
Birim maliyet gibi bir değerde 0, gerçek bir maliyetmiş gibi okunabilir. Bu yüzden çoğu durumda açıklayıcı metin ya da boş metin ("") daha dürüsttür.
EĞERYOKSA ile yalnız bulunamayanı yakalamak
EĞERYOKSA'nın yapısı aynıdır: =EĞERYOKSA(değer; eğer_yoksa_değer). Fark, yalnızca #YOK hatasında devreye girmesidir. #YOK, arama fonksiyonlarının "bu değer listede yok" deme biçimidir.
Fiyat listesinde olmayan A900 kodunu arayan =EĞERYOKSA(DÜŞEYARA("A900";A2:B4;2;YANLIŞ);"Listede yok") formülü "Listede yok" döndürür. Kod listede varsa fiyat gelir. Bu davranış, arama formüllerinde beklenen tek hatayı karşılar.
Hatayı gizlemek ne zaman zararlıdır?
EĞERHATA, formüldeki gerçek hataları da sessizce örter. Fiyat listesi iki sütunken DÜŞEYARA'ya sütun numarası olarak 3 yazdığınızı düşünün. Formül #BAŞV! verir, çünkü üçüncü sütun yoktur.
Bu formülü EĞERHATA ile sararsanız her satırda "Listede yok" yazar ve hatayı fark etmezsiniz. Kodlar listede olduğu hâlde müşteriye fiyat yok dersiniz. EĞERYOKSA ile sarılmış aynı formül ise #BAŞV! hatasını olduğu gibi gösterir, siz de sütun numarasını düzeltirsiniz.
Aynı durum veri hatalarında da geçerlidir. Bu dersin üçüncü örneğinde fiyat listesindeki bir değer "45 TL" diye metin olarak girilmiş. Bulunan fiyatı %10 zamla çarpan formül #DEĞER! verir ve EĞERYOKSA bu hatayı gizlemez; sorunlu hücreyi hemen fark edersiniz.
Pratik kural şudur: arama sonucunu korumak için EĞERYOKSA, bölme gibi hatanın nedenini bildiğiniz hesaplarda EĞERHATA. Nedenini bilmediğiniz bir hatayı gizlemeden önce hatanın kaynağını bulun.
Hata yakalama formülün neresine yazılır?
Hata yakalama fonksiyonunu, hatanın beklendiği en küçük parçanın çevresine yazmak en güvenli yoldur. =EĞERHATA(DÜŞEYARA(D2;A:B;2;YANLIŞ)*E2;0) formülü hem aramanın bulunamamasını hem de E2'deki adedin metin olmasını aynı 0 ile örter. =EĞERYOKSA(DÜŞEYARA(D2;A:B;2;YANLIŞ);0)*E2 ise yalnızca aramayı korur, adetteki sorunu görünür bırakır.
Grafiklerde durum tersine döner. Çizgi grafikte #YOK değeri olan nokta çizilmez, 0 ise grafikte sıfıra düşen bir çukur olarak görünür. Eksik ay verisi olan bir satış grafiğinde hatayı 0'a çevirmek yerine #YOK bırakmak, grafiği daha doğru okutur.
Bir satış ekibinin aylık hedef gerçekleşme grafiğini düşünün. Ekim verisi henüz girilmediyse 0 değeri, ekimde satışın çöktüğü izlenimini verir. #YOK ise çizgiyi eylülde bitirir ve okur verinin eksik olduğunu anlar. Rapor tablosunda ise aynı hücreyi açıklayıcı bir metinle göstermek okuru rahatlatır. Hangi değeri seçeceğiniz, hücreyi kimin ve nasıl okuyacağına bağlıdır.
Sıfıra bölmeyi önceden engellemek
Bazı durumlarda hatayı yakalamak yerine hiç oluşmamasını sağlamak daha açıktır. =EĞER(C3=0;"";B3/C3) adedin sıfır olduğu satırı önceden ayırır. Sonuç EĞERHATA ile aynıdır, ama formülü okuyan kişi neyin kontrol edildiğini doğrudan görür.
Bu yaklaşım, sıfır dışındaki hataların (örneğin C3'e yanlışlıkla metin girilmesi) görünür kalmasını da sağlar. #DEĞER! hatası, veri girişindeki sorunu size haber verir.
Sıradaki adım
Alıştırmada sipariş kodlarının fiyatını DÜŞEYARA ile bulup listede olmayanlar için EĞERYOKSA ile "Fiyat yok" yazdıracaksınız. Çözdükten sonra sütun numarasını bilerek 3 yapın ve EĞERYOKSA'nın #BAŞV! hatasını gizlemediğini kendiniz görün. Aynı denemeyi EĞERHATA ile tekrarlayıp iki fonksiyonun bu durumda nasıl ayrıştığını karşılaştırın.
Örnekler
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Toplam maliyet | Adet | ||
| 2 | Kupa | 4.500 | 150 | Adet girilmedi | |
| 3 | Tabak | 3.200 | 0 | ||
| 4 | Kase | 2.400 | 80 |
=EĞERHATA(B3/C3;"Adet girilmedi")=IFERROR(B3/C3,"Adet girilmedi")Türkçe Excel'de bağımsız değişkenler noktalı virgülle (;), İngilizce Excel'de virgülle (,) ayrılır.
E2 hücresinin sonucu: Adet girilmedi
Tabak'ın adedi 0 olduğu için B3/C3 #SAYI/0! verir. EĞERHATA bu hatayı yakalar ve ikinci argümandaki metni gösterir.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Kod | Fiyat | ||
| 2 | A100 | 12,5 | Listede yok | |
| 3 | A200 | 45 | ||
| 4 | A300 | 8 |
=EĞERYOKSA(DÜŞEYARA("A900";A2:B4;2;YANLIŞ);"Listede yok")=IFNA(VLOOKUP("A900",A2:B4,2,FALSE),"Listede yok")Türkçe Excel'de bağımsız değişkenler noktalı virgülle (;), İngilizce Excel'de virgülle (,) ayrılır.
D2 hücresinin sonucu: Listede yok
A900 fiyat listesinde yok. DÜŞEYARA #YOK verir, EĞERYOKSA bunu "Listede yok" metnine çevirir.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Kod | Fiyat | ||
| 2 | A100 | 12,5 | #VALUE! | |
| 3 | A200 | 45 TL | ||
| 4 | A300 | 8 |
=EĞERYOKSA(DÜŞEYARA("A200";A2:B4;2;YANLIŞ)*1,1;"Listede yok")=IFNA(VLOOKUP("A200",A2:B4,2,FALSE)*1.1,"Listede yok")Türkçe Excel'de bağımsız değişkenler noktalı virgülle (;), İngilizce Excel'de virgülle (,) ayrılır.
D2 hücresinin sonucu: #VALUE!
A200 listede var, ama fiyatı "45 TL" diye metin olarak girilmiş. Metni 1,1 ile çarpmak #DEĞER! hatası verir ve EĞERYOKSA bu hatayı geçirir. EĞERHATA kullanılsaydı sorun "Listede yok" diye gizlenirdi.
Sıkça Sorulan Sorular
EĞERHATA hangi hataları yakalar?
#YOK, #DEĞER!, #BAŞV!, #SAYI/0!, #SAYI!, #AD? ve #BOŞ! dahil bütün hata türlerini yakalar. Bu geniş kapsam, yanlış yazılmış formülleri de gizleyebileceği anlamına gelir.
Hata yerine boş hücre göstermek için ne yazmalıyım?
İkinci argümana iki tırnak yazın: =EĞERHATA(B3/C3;""). Hücre boş görünür, ama içinde boş metin vardır; BOŞLUKSAY bu hücreyi sayar, EBOŞSA ise YANLIŞ döndürür.
ÇAPRAZARA kullanıyorsam EĞERYOKSA'ya gerek var mı?
Genellikle yoktur. ÇAPRAZARA'nın dördüncü argümanı bulunamayan değer için gösterilecek sonucu zaten alır ve yalnızca bulunamama durumunu karşılar.