Mantıksal fonksiyonlar, ya sonucu ya da içeriği TRUE/FALSE olan fonksiyonlardır.
Bunlar öyle komplike fonksiyonlar değillerdir. Zaten tak başlarına kullanımları olmayıp birçok formülün içine girerler. Şimdi kısa kısa bunları inceleyelim.
IF
IF ile bir koşul sağlandığında veya sağlanmadığında hangi sonucu göstereceğimizi belirleriz. Genel Syntax'ı IF(kontrol;DOĞUYSA ŞU, YANLIŞSA ŞU) şeklindedir.
Örneğin, A kolonunda kişilerin yaşları var ve bu yaşlara göre kişilerin reşit olup olmadığını B kolonuna yazdıralım.
=IF(A2>=18;"Reşit";"Reşit Değil")
İçiçe IF
IF'in bir de içiçe kullanımı vardır ve içiçe en fazla 64 IF yazabilirsiniz(Excel 2007den önce bu sayı 7 idi). Ancak herhalde 8-10 IF dışında çok fazla IF'e ihtiyacınız olmayacaktır. Gerçekten ihtiyaç varsa, geçici bir yere Lookup tablosu yapıp orada Vlookup formülünü kullanmak daha pratik olacaktır. Burada bunu nasıl yapacağınızı bulabilirsiniz.
=IF(A2>=65;"Yaşlı";IF(A2>=40;"Orta Yaşlı";IF(A2>18;"Genç";"Çocuk")))
İçiçe IF yazarken dikkat edilmesi gereken bir husus var. Excel'de Between diye bir operatör olmadığı için bu amacı < ve > işaretlerini AND operatörü ile birlikte kullanarak veya sorgulamaya önce en büyük değerden başlayıp aşağı doğru inerek veya < işaretini kullanıp yukarı doğru çıkarak yapabiliriz. Bu yukardaki örnekte ben önce en büyük değerden başlayıp aşağıda doğru inme yolunu seçtim.
Yine farkettiyseniz son değer olan Çocuk için ayrı bi IF yazmadım, zira bu, önceki şartlar sağlanmadığında otomatik olarak yazdırılacak kısımdır.
Bir diğer önerim de şu olacaktır ALT+Enter tuş kombinasyonuna basarak kodunuzun okunurluğunu artırabilirsiniz
=IF(A2>=65;"Yaşlı";
IF(A2>=40;"Orta Yaşlı";
IF(A2>18;"Genç";
"Çocuk")))
Son bir önerim daha var, o da, içiçe IF'leri yazarken her IF'ten sonra açtığınız parantezi önce kapatın, sonra ilk olarak True kısmın formülünü yazın, sonra da kalan kısma geçici olarak FALSE yazın. Yukarıdaki örnek üzerinden gidecek olursak, önce şöyle yazın, IF(), sonra IF(A2>=60;"Yaşlı";FALSE), sonra FALSE'ı silip içini dolurun, ve son FALSE'a kadar bunu yapın, yani sırayla şöyle olsun:
IF()
=IF(A2>=60;"Yaşlı";FALSE)
=IF(A2>=60;"Yaşlı";IF())
=IF(A2>=60;"Yaşlı";IF(A2>=40;"Orta Yaşlı";FALSE))
=IF(A2>=60;"Yaşlı";IF(A2>=40;"Orta Yaşlı";IF()))
=IF(A2>=60;"Yaşlı";IF(A2>=40;"Orta Yaşlı";IF(A2>=18;"Genç";FALSE)))
=IF(A2>=60;"Yaşlı";IF(A2>=40;"Orta Yaşlı";IF(A2>=18;"Genç";"Çocuk")))
IFS(2016)
IFS ile yukardaki gibi içiçe birsürü IF dizmekten kurtulmuş oluyorsunuz.
Syntax'ı şöyledir:
=IFS(Sorgu1, Sorgu1DoğruysaDeğer1, Sorgu2, Sorgu2DoğruysaDeğer2,.......Sorgu127, Sorgu127DoğruysaDeğer127)
Hiçbir koşul TRUE döndürmezse N/A görünür. O yüzden en son koşulu 1=1;"hiçbirkoşul sağlanmadı" gibi bir çift ile bitirmekte fayda var, veya TRUE;"hiçbirkoşul sağlanmadı"
Bir örnek verelim.
=IFS(A2>65;"Yaşlı";A2>40;"Orta Yaşlı";A2>18;"Genç";TRUE;"Çocuk")
Bunu şu şekilde yapmak belki biraz daha uygun olur, zira olur da, hatalı bir giriş varsa bunları da ele almış olursunuz. Mesela yaş bilgisi boş ise, negatif ise veya sayısal olmayan bir değer ise uyarı mesajı çıkar.
=IFS(A2>65;"Yaşlı";A2>40;"Orta Yaşlı";A2>18;"Genç";A2>0;"Çocuk";TRUE;"Uygun bir yaş değildir")
IFS fonksiyonu her ne kadar 127 adet sorgulama yapma imkanı verse de, çok adetli sorgulamalarda yukarda bahsettiğim Lookup yöntemini kullanmak daha mantıklı olacaktır.
IFERROR
IFERROR'u, yazdığımız bir formül hatalı sonuç döndürdüğünde hata değil de başka birşey görünsün istediğimizde kullanırız. Mesela bi Vlookup işlemi yaptığımız ve aradığımız değeri bulamadığımızda normalde N/A döndürür, ama bi de en altta diptoplam aldırdığımızı düşünün, o kolonda bi N/A varsa diptoplam da hata çıkacaktır, o yüzden hata durumunda N/A yerine 0 görünmesini isteyebiliriz. Ör:
=IFERROR(VLOOKUP(A2;D:E;2;0);0)
Yine normal IF'te olduğuğ gibi bunu da aşama aşama aşağıdaki gibi yazarız
=IFERROR(TRUE;FALSE)
=IFERROR(VLOOKUP();0)
=IFERROR(VLOOKUP(A2;D:E;2;0);0)
NOT:2007 öncesi günlerde bunu aşağıdaki gibi uzun bir yolla yapardık.
IF(ISERROR(VLOOKUP(A2;D:E;2;0));0;VLOOKUP(A2;D:E;2;0))
IFNA(2013)
IFERROR'dan farklı olarak IFNA ile, sadece N/A hatası oluştuğunda başka bir değer gösterilir, diğer hata sonuçları olduğu gibi kalır.
Şimdi diyelim ki yine Vlookup yapacaksınız, sadece N/A'ların yani lookup yaptığınız yerde bulunmayan değerlerin gelmemesini istiyorsunuz. Diğer hatalar gelsinki, o hatalara özgü duruma müdahale edesiniz. Mesela Lookup listesinde kişilerin hedef gerçekleştirme oranlarını(HGO) getirmek istiyorsunuz, kişin hedefi 0 ise HGO sıfıra bölme hatası olan #DIV/0! verir. Bunu sıfırlamak demek, bu hatayı baskılamak demektir, halbuki siz N/A dışındaki hataları baskılamak yerine onları düzeltmek istersiniz. Mesela 0 hedefli kişiler kimse bunları alıp hedefleme ekibinden bunlara hedef vermesini isteyebilirsiniz.
AND
Bu fonksiyon sıklıkla IF'li formüllerde kullanılır. Aynı anda birden fazla(255e kadar) koşulun doğru olması durumunda TRUE kısmın değeri döner, koşullardan biri sağlanmazsa FALSE kısmın değeri döner. Mesela bir hücreye hem A1 hücresinin 1 olduğu hem de C2'nin boş olduğu durumda 100, aksi halde 0 yazdırmak istersek şu formülü yazarız.
=IF(AND(A1=1;ISBLANK(C2));100;0)
Aşağıda ise daha uzun bir formül örneği görüyoruz. Burada belki dikkatinizi çekmiştir. Formül içinde Named Range(özel isimli hücre) kullanmışım. Mesela bugünayno diye bir Name var, bunun içeriği şöyle: =DAY(TODAY()), yani ayın kaçıncı günü olduğunu veriyor. Bir diğer Name olan hftno var, onun da içeriği şu:=WEEKDAY(TODAY();2), yani bugün haftanın kaçıncı günü onu veriyor. Bu tür Name'ler kullanmak hem formülümüzü daha kısaltır hem de daha anlaşılır hale getirir. Formüle geri dönecek olursam, önce ne yapmaya çalıştığımı belirteyim. Bu, erken kredi kapanmalarını öngören bir formülün bir parçası ve kendisi de başka bir hücredeki Vlookup formülünün ilk paramteresi olarak iş görüyüor. Bunun da şöyle bir hikayesi var:Ayın belli günlerinde kredi kapanmaları daha yüksek oluyor. Aşağıdaki tabloda temisili rakamları görüyorsunuz. Şimdi görüldüğü gibi ayın 15'inde kamu kurumları banka aracılığı ile maaş ödemelerini yaparlar ve çalışanların eline para geçtiği için de bunların bazısı kredilerini erken kapatır, yani vadesini beklemez. Ayrıca ayın ilk ve son günleri de özel kurumlar maaş ödmesi yaptığı için bu günlerde de ortalamaya göre bir miktar daha fazla kapama olur. Gelelim formüle: Bazen ayın 15'i veya 1'i haftasonuna denk gelebilir ve maaş ödemesi 1 veya 2 gün sarkabilir. O yüzden diyoruz ki, Eğer Bugün ayın 2 veya 3'ü ise ve aynı zamanda Pazartesi ise 1 yazsın yani bugünü ayın 1'i gibi düşünelim, bu şart sağlanmazsa(Ör:Çarşamba olup ayın 4'üdür, Pazartesi olabilir ama ayın 5idir, veya ayın 2sidir ama Salıdır) şu şarta bakalım:Bugün ayın 16 ve 17si ise ve aynı zamanda Pazartesi ise 15i gibi düşünelim, bu şart da sağlanmazsa bugün 28/29 Şubatsa 31'i gibi düşünelim, diğer tüm durumlarda bugün ayın kaçıysa onu yazalım
=IF(AND(bugünayno<=3;hftno=1);1;IF(AND(bugünayno>15;bugünayno<18;hftno=1);15;IF(AND(MONTH(TODAY())=2;bugünayno>=28);31;bugünayno)))
Bir diğer kullanım alanı da IF'siz olup, sonucun TRUE/FALSE olmasını sağlar,
ve mesala sadece TRUE olanları filtrelemek isteyebilirsiniz.
OR
OR'un kullanımı da AND'e çok benzer. Bunda koşullardan herhangi biri doğruysa TRUE döndürür, hiçbiri sağlanmıyorsa FALSE döndürür. Aşağıda küçük bir örnek bulunmkatadır. A2 bugünden daha büyükse veya B2 0 ise TRUE, diğer durumlarda FALSE döner.
=OR(A2>TODAY();B2=0)
NOT
TRUE/FALSE döndüren bir formülün sonucunu tersine döndürmek için kullanılır. Genel kullanım yeri, günlük konuşma diline yakın bir anlam çıkarması sayesinde bir hücrenin DOLUMU olduğunu göstermek amacıyla ISBLANK iledir.
=NOT(ISBLANK(A2))
İstediğimiz şeyi, tabiki ISBLANK yazıp FALSE olanları filtrelemek şeklinde de yapabilirdiniz ama dediğim gibi konuşma diline yakın olması adına bu şekilde kullanımı daha uygundur. Bu arada bu sorgulama şeklini IF(A2<>"";TRUE;FALSE) veya IF(LEN(A2)>0;TRUE;FALSE) şeklinde de yapabilirdik. Excel'de bir sonuca ulaşmanın birden çok şekli olduğunu hep aklınızda bulundurun.