Özellik ikonu

IIf

İndirme izni yok

Genel Bakış

IIf (Immediate If), verilen koşulu değerlendirip koşul Doğru (True) ise bir değeri, Yanlış (False) ise başka bir değeri döndüren VBA işlevidir. Bir değişkene ya da hücreye atanacak değeri tek satırda seçmenizi sağlar; If...Then...Else bloğunun kısa bir alternatifidir.

Söz dizimi​

IIf işlevi üç bağımsız değişkenle çağrılır:
VBA
IIf(Expression, TruePart, FalsePart)
  • Expression: Değerlendirilecek koşul. Sonucu Doğru ya da Yanlış olmalıdır. Zorunludur.
  • TruePart: Koşul Doğru ise döndürülecek değer ya da ifade. Zorunludur.
  • FalsePart: Koşul Yanlış ise döndürülecek değer ya da ifade. Zorunludur.
Üç bağımsız değişkenin de verilmesi gerekir; isteğe bağlı parametre yoktur, dolayısıyla varsayılan değer de yoktur.

Dönüş değeri ve çalışma biçimi​

IIf, Variant türünde bir değer döndürür. Koşul Doğru ise TruePart, Yanlış ise FalsePart sonucu döner. Sonucu bir sayı değişkenine ya da hücreye atayabilir, bir metinle birleştirebilir veya başka bir işlevin bağımsız değişkeni olarak kullanabilirsiniz.

Önemli bir ayrıntı: IIf her çağrıldığında TruePart ve FalsePart ifadelerinin ikisini de hesaplar. Koşul hangi sonucu seçerse seçsin diğer ifade de çalıştırılır. Bu nedenle ifadelerden biri hata üretiyorsa (örneğin sıfıra bölme ya da var olmayan bir nesneye erişim) koşul o dalı seçmese bile çalışma zamanı hatası oluşur.

IIf ile If...Then...Else karşılaştırması​

  • IIf: Bir değer seçip onu doğrudan atamak ya da başka bir ifadenin içinde kullanmak için uygundur. Kısa ve okunaklıdır.
  • If...Then...Else: Dallardan yalnızca biri çalışır. Birden çok satırlık işlem yapılacaksa, dallardan biri hata verebiliyorsa ya da yan etkisi olan bir çağrı varsa bunu tercih edin.
  • Select Case: İki değil, çok sayıda seçenek arasından seçim yapılacaksa iç içe IIf kullanmaktan daha okunaklıdır.
Çalışma sayfası formüllerindeki EĞER işlevi ile VBA'daki IIf benzer işi yapar; ancak IIf yalnızca VBA kodunda kullanılır.

1. Satış hedefini kontrol etme​

Sayfada personelin satışları ve hedefleri var. Makro, her satırda satışı hedefle karşılaştırıp D sütununa durum metnini yazar. Kodu standart bir modüle (Ekle > Modül) yapıştırın ve örnek sayfa etkinken çalıştırın.
VBA 16 satır
Option Explicit

' Her personelin satışını hedefiyle karşılaştırır
Sub HedefDurumuYaz()
    Dim ws As Worksheet
    Dim i As Long
    Dim sonSatir As Long

    Set ws = ActiveSheet
    sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To sonSatir
        ' Satış hedefe eşit ya da büyükse ilk metin, değilse ikinci metin yazılır
        ws.Cells(i, 4).Value = IIf(ws.Cells(i, 2).Value >= ws.Cells(i, 3).Value, "Hedef tamam", "Hedef altında")
    Next i
End Sub
IIf
Formülünü incelemek için bir hücre seçin.
ABCD
1PersonelSatışHedefSonuç
2Ayşe Yılmaz48.50045.000Hedef tamam
3Mehmet Kaya39.20040.000Hedef altında
4Zeynep Demir52.75050.000Hedef tamam
5Can Öztürk41.00041.000Hedef tamam
6Elif Şahin36.80038.000Hedef altında
7Burak Aydın47.30045.000Hedef tamam
Hedef KontrolExcelDepo v1.0.0
Makro her satırda koşulu sınar. Ayşe Yılmaz için D2 hücresine Hedef tamam, Mehmet Kaya için D3 hücresine Hedef altında yazılır. Satış ile hedefin eşit olduğu Can Öztürk satırında (D5) sonuç Hedef tamam olur, çünkü koşulda büyük eşit işleci kullanılmıştır.

2. İç içe IIf ile kademeli iskonto​

Satış tutarı 10.000 ve üzerindeyse yüzde 10, 5.000 ve üzerindeyse yüzde 5, diğer durumlarda iskonto yok. İki kademeyi iç içe IIf ile kuran makro, oranı C sütununa, net tutarı D sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA 24 satır
Option Explicit

' Tutara göre kademeli iskonto oranını ve net tutarı hesaplar
Sub IskontoUygula()
    Dim ws As Worksheet
    Dim i As Long
    Dim sonSatir As Long
    Dim tutar As Double
    Dim oran As Double

    Set ws = ActiveSheet
    sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ws.Range("C2:C" & sonSatir).NumberFormat = "0%"
    ws.Range("D2:D" & sonSatir).NumberFormat = "#,##0.00"

    For i = 2 To sonSatir
        tutar = ws.Cells(i, 2).Value
        ' İç içe IIf: önce 10.000 sınırı, sonra 5.000 sınırı sınanır
        oran = IIf(tutar >= 10000, 0.1, IIf(tutar >= 5000, 0.05, 0))
        ws.Cells(i, 3).Value = oran
        ws.Cells(i, 4).Value = tutar * (1 - oran)
    Next i
End Sub
IIf
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünTutarİskontoNet Tutar
2Dizüstü Bilgisayar18.500,0010%16.650,00
3Monitör6.200,005%5.890,00
4Klavye850,000%850,00
5Yazıcı4.300,000%4.300,00
6Tablet9.800,005%9.310,00
7Ofis Koltuğu5.400,005%5.130,00
8Masa Lambası320,000%320,00
İskonto HesabıExcelDepo v1.0.0
Dizüstü Bilgisayar satırında iskonto oranı C2 hücresinde 10%, net tutar D2 hücresinde 16.650,00 olur. Klavye satırında hiçbir kademe sağlanmadığı için C4 hücresi 0% değerini alır ve net tutar D4 hücresinde 850,00 çıkar. İç içe IIf, iki kademe için yeterince okunaklıdır; kademe sayısı arttıkça Select Case kullanmak daha uygundur.

3. IIf tuzağı: sıfıra bölme​

IIf her iki dalı da hesapladığı için, adedin sıfır olduğu satırlarda birim fiyatı IIf ile hesaplamak hataya yol açar. Bu örnekte bölme işlemi güvenli biçimde If...Then...Else ile, durum metni ise IIf ile yazılır. Kodu standart bir modüle yapıştırın.
VBA 25 satır
Option Explicit

' Birim fiyatı hesaplar; adet sıfırsa bölme yapmaz
Sub BirimFiyatHesapla()
    Dim ws As Worksheet
    Dim i As Long
    Dim sonSatir As Long

    Set ws = ActiveSheet
    sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ws.Range("D2:D" & sonSatir).NumberFormat = "#,##0.00"

    For i = 2 To sonSatir
        ' IIf burada kullanılsaydı bölme her durumda hesaplanır ve 11 numaralı hata oluşurdu
        If ws.Cells(i, 3).Value = 0 Then
            ws.Cells(i, 4).Value = 0
        Else
            ws.Cells(i, 4).Value = ws.Cells(i, 2).Value / ws.Cells(i, 3).Value
        End If

        ' Yan etkisi ve hata riski olmayan basit bir metin seçimi için IIf uygundur
        ws.Cells(i, 5).Value = IIf(ws.Cells(i, 3).Value = 0, "Stokta yok", "Stokta var")
    Next i
End Sub
IIf
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünTutarAdetBirim FiyatDurum
2Kalem Seti1.260,0012105,00Stokta var
3Defter840,002830,00Stokta var
4Dosya Klasörü0,0000,00Stokta yok
5Zımba375,00575,00Stokta var
6Kağıt A41.980,0018110,00Stokta var
7Silgi0,0000,00Stokta yok
Birim FiyatExcelDepo v1.0.0
Kalem Seti için birim fiyat D2 hücresinde 105,00, durum E2 hücresinde Stokta var olur. Adedi sıfır olan Dosya Klasörü satırında bölme hiç yapılmaz; D4 hücresi 0,00, E4 hücresi Stokta yok değerini alır. Aynı bölmeyi IIf içine koysaydınız, koşul Doğru olsa bile bölme ifadesi de hesaplanacağı için makro hata vererek dururdu.

Kullanırken dikkat edin​

  • İki dal da hesaplanır: IIf, TruePart ve FalsePart ifadelerini her zaman birlikte değerlendirir. Sıfıra bölme, geçersiz dizin ya da Nothing nesnesine erişim gibi hata üretebilecek ifadeleri IIf içine koymayın; bu durumda If...Then...Else kullanın.
  • Yan etkisi olan çağrılardan kaçının: IIf içinde bir Function çağırıyorsanız, işlev koşuldan bağımsız olarak iki dalda da çalışır. İşlev hücre değiştiriyor ya da sayaç artırıyorsa beklenmeyen sonuçlar doğar.
  • Dönüş değeri Variant'tır: Sonuç Variant olarak döner. Dallardan biri metin, diğeri sayı ise atadığınız değişkenin türüne dikkat edin; uyumsuz atamalar tür uyuşmazlığı (Type mismatch) hatasına yol açabilir.
  • İç içe kullanımı sınırlı tutun: İki ya da üç kademeden fazla iç içe IIf kodu okumayı ve bakımını zorlaştırır. Çok sayıda seçenek varsa Select Case deyimini ya da Switch ve Choose işlevlerini düşünün.
  • Karşılaştırma türlerine dikkat edin: Hücre değerlerini karşılaştırırken metin biçimindeki sayılar beklenmeyen sonuç verebilir. Gerekirse koşulda sayısal dönüştürme yapın ve boş hücreleri ayrıca denetleyin.
  • İlgili konular:
    • If...Then...Else deyimi
    • Select Case deyimi
    • Choose ve Switch işlevleri
    • IsEmpty, IsNumeric ve IsError işlevleri
    • EĞER, ÇOKEĞER ve EĞERHATA çalışma sayfası işlevleri
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst