Excel VBA'da IF Then Else ifadesi, bir koşulu kontrol etmenize ve buna göre bir eylem gerçekleştirmenize olanak tanır.
Bu öğreticide daha sonra örneklerde göreceğimiz gibi, bu birçok durumda son derece değerlidir.
Size basit bir örnek vermek gerekirse, Excel'de bir not listeniz olduğunu ve A notu alan tüm öğrencileri vurgulamak istediğinizi varsayalım. Şimdi, bunu manuel olarak yapmanızı istersem, her öğrencinin notunu kontrol edeceksiniz. bir A, onu vurgulayacaksınız ve değilse, olduğu gibi bırakacaksınız.
Aynı mantık, VBA'da aşağıdakiler kullanılarak oluşturulabilir: Eğer öyleyse (ve elbette notları vurgulamaktan çok daha fazlasını yapın).
Bu eğitimde, Excel VBA'da 'If Then Else' yapısının kullanılabileceği farklı yolları ve bazı pratik örnekleri iş başında göstereceğim.
Ancak ayrıntılara girmeden önce, size 'IF Then Else' ifadesinin sözdizimini vereyim.
VBA'yı kolay yoldan öğrenmekle ilgileniyorsanız, Çevrimiçi Excel VBA Eğitimi.
Sözdizimi - IF Sonra Else
VBA'da If Then Else yapısının genel sözdizimi aşağıdadır.
EĞER koşulu Sonra true_code [Else false_code]
Veya
EĞER koşulu Sonra true_code Else false_code IF'yi sonlandır
Bu ifadenin Else bölümünün isteğe bağlı olduğunu unutmayın.
Şimdi, iki sözdizimi arasındaki farkın ne olduğunu merak ediyorsanız, açıklığa kavuşturmama izin verin.
İlk sözdizimi, END IF deyimini kullanmanız gerekmeyen tek satırlık IF THEN ELSE deyimidir.
Ancak ikinci sözdiziminde true_code kısmı ikinci satırdadır. Bu, EĞER koşulunun doğru olması durumunda çalıştırmanız gereken kodun uzun olması ve birden çok satırdan oluşması durumunda yararlıdır.
IF ifadesini birden çok satıra böldüğünüzde, VBA'ya IF Then yapısının nerede bittiğini söylemeniz gerekir.
Bu nedenle End IF ifadesini kullanmanız gerekir.
Gerektiğinde End IF kullanmazsanız, VBA size bir hata gösterecektir - “END IF olmadan Blok EĞER”
VBA'da IF Sonra İfadesini Kullanma Örnekleri
VBA'da IF-THEN ifadesinin nasıl çalıştığı hakkında size bir fikir vermek için, bazı temel örneklerle başlamama izin verin (bazı pratik ve daha kullanışlı örnekler bu eğitimde daha sonra ele alınacaktır).
A1 hücresinde bir öğrencinin puanı olduğunu ve öğrencinin sınavı geçip geçmediğini kontrol etmek istediğinizi varsayalım (geçme notu eşiği 35'tir).
Ardından aşağıdaki kodu kullanabilirsiniz:
Sub CheckScore() If Range("A1").Value >=35 Then MsgBox "Pass" End Sub
Yukarıdaki kod, A1 hücresindeki değeri kontrol eden tek bir EĞER ifadesi satırına sahiptir.
35'ten fazlaysa, "Geçti" mesajını gösterir.
35'in altındaysa hiçbir şey olmaz.
Ama ya bir öğrencinin sınavı geçip geçmediğine bakılmaksızın, her iki durumda da bir mesaj göstermek istiyorsanız.
Aşağıdaki kod bunu yapardı:
Sub CheckScore() If Range("A1").Value >= 35 Then MsgBox "Geçti" Else MsgBox "Başarısız" End If End Sub
Yukarıdaki kod, iki farklı koşulu yürütmek için IF ve ELSE ifadesini kullanır. Puan 35'ten büyük (veya eşit) olduğunda, EĞER koşulu doğrudur ve hemen altındaki kod çalıştırılır (Else ifadesinden önceki her şey).
Ancak EĞER koşulu YANLIŞ olduğunda, kod Else kısmına atlar ve içindeki kod bloğunu yürütür.
Tek bir IF Then ifadesi kullandığımızda, End IF kullanmamıza gerek olmadığını unutmayın. Fakat birden fazla satıra böldüğümüzde End If ifadesini kullanmamız gerekiyor.
Sonra İç İçe EĞER (Birden Çok EĞER O zaman ifadeleri)
Şimdiye kadar tek bir IF Then ifadesi kullandık.
Kontrol etmeniz gereken birden fazla koşul varsa, şunları kullanabilirsiniz:
- Çoklu EĞER koşulları
- If Then Else ifadesi
- IF Then ElseIf Else yapı
Bunların nasıl farklı olduğunu ve bunu Excel VBA'da nasıl kullanacağınızı göstereyim.
Çoklu IF Then İfadeleri
Bir öğrencinin puanını kullanma örneğini ele alalım.
Öğrencinin puanı 35'in altındaysa görüntülenecek mesaj 'Başarısız', puan 35'e eşit veya üzerindeyse görüntülenecek mesaj 'Geçti' dir.
Bunu yapmak için aşağıdaki kodu kullanabiliriz:
Sub CheckScore() If Range("A1").Value = 35 Then MsgBox "Pass" End Sub
Yukarıda gösterildiği gibi birden fazla IF Then ifadesi kullanabilirsiniz. Bu işe yarasa da, iyi bir kodlama örneği değil (alternatifleri aşağıda göreceğiniz gibi).
Bunu kullanmaya karar verirseniz, bu ifadelerin ya bağımsız ya da birbirini dışlayan olması gerektiğini unutmayın. Burada bilinmesi gereken, yukarıdaki yapıda tüm IF deyimlerinin değerlendirildiği ve koşulun doğru olduğu durumlarda kodun çalıştırıldığıdır.
Bu nedenle, ilk IF ifadesi doğru olsa bile, ikincisi yine de değerlendirilecektir.
IF O Zaman Else İfadesi
Diyelim ki bu sefer sadece Başarılı/Başarısız mesajını göstermek yerine bir şartımız daha var.
Öğrencinin puanı 35'in altındaysa 'Başarısız', puan 35'e eşit veya üzerinde ise 'Geçti', puan 80'den fazla ise görüntülenecek mesaj gösterilir. 'Ayrımla Geçti'.
Bunu yapmak için aşağıdaki kodu kullanabiliriz:
Sub CheckScore() If Range("A1").Value < 35 O zaman MsgBox "Fail" Else If Range("A1").Value < 80 Then MsgBox "Geçti" Başka MsgBox "Başarılı, Farkıyla" Bitirse Bitirse Bitir Alt
Yukarıdaki kodda, Else yardımıyla birden fazla IF deyimi (iç içe IF Then) kullandık.
Yani bir 'IF Then Else' yapısı içinde bir 'IF Then Else' yapısı vardır. Bu tür yuvalama, birden çok koşulu kontrol etmenize ve ilgili kod bloğunu çalıştırmanıza olanak tanır.
IF O zaman ElseIf Else İfadesi
Yukarıdaki kod (önceki bölümde gördüğümüz), ElseIf ifadesi kullanılarak daha da optimize edilebilir.
İşte yapmaya çalıştığımız şey - Öğrenci 35'ten az puan alırsa görüntülenecek mesaj 'Başarısız', puan 35'e eşit veya daha fazlaysa görüntülenecek mesaj 'Geçti' ve eğer puan 80'den fazlaysa, görüntülenecek mesaj 'Başarılı Geçti'.
Sub CheckScore() If Range("A1").Value < 35 Then MsgBox "Fail" ElseIf Range("A1").Value < 80 Then MsgBox "Geçti" Başka MsgBox "Başarılı, Farkıyla" End If End Sub
Yukarıdaki kod, tüm koşulları tek bir IF Then ifadesinde tutmamıza izin veren ElseIf'i kullanır.
IF Then Else'de AND ve OR Kullanımı
Şimdiye kadar bu öğreticide, bir seferde yalnızca tek bir koşulu kontrol ettik.
Ancak, birden çok bağımlı koşula sahip olduğunuzda, EĞER koşullarıyla AND veya OR deyimini kullanabilirsiniz.
Aşağıda, AND/OR koşulunu IF Then deyimiyle kullanmanın sözdizimi verilmiştir.
EĞER Koşul1 VE Koşul2 Sonra true_code Else false_code IF'yi sonlandır
Yukarıdaki kodda, yalnızca Koşul1 ve Koşul2 karşılandığında, true_code yürütülür. Koşullardan biri yanlış olsa bile, yanlış_kodu çalıştırır.
VEYA ile, koşullardan biri doğru olsa bile, true_code'u çalıştırır. Yalnızca tüm koşullar yanlış olduğunda, false_code'u çalıştırır.
Şimdi AND ve OR ifadesinin IF Then Else yapısıyla nasıl çalıştığını görelim.
Bir yerine iki ders için puanlarınız olduğunu ve aşağıdaki koşulları kontrol etmek istediğinizi varsayalım:
- Başarısız - Herhangi bir konuda puan 35'in altında olduğunda.
- Geçmek - Her iki konuda da puan 35'e eşit veya daha fazla, ancak 80'den az olduğunda.
- Fark ile geçmek - Her iki konuda da puan 35'in üzerinde ve deneklerden birinde veya her ikisinde 80'e eşit veya daha fazla olduğunda.
İşte bunu yapacak kod:
Sub CheckScore() If Range("A1").Value < 35 Veya Range("B1").Value < 35 Then MsgBox "Fail" ElseIf Range("A1").Value < 80 And Range("B1"). Değer < 80 Sonra MsgBox "Geçti" Else MsgBox "Başarılı, Ayrımlı" End If End Sub
Yukarıdaki kod hem OR hem de AND deyimlerini kullanır.
Aynı kodu küçük bir değişiklikle de yazabilirsiniz (VE yerine VEYA kullanarak).
Sub CheckScore() If Range("A1").Value < 35 Or Range("B1").Value 80 Or Range("B1").Value > 80 Sonra MsgBox "Başarılı, Farkıyla" Diğer MsgBox "Geçti" End End Sub ise
Yukarıdaki VBA kodlarının her ikisi de size aynı sonucu verecektir. Şahsen, puanları kontrol etmenin mantıklı bir akışı olduğu için ilkini tercih ederim (ama bu sadece benim).
If Then'de Not Equal to kullanma
Yukarıdaki tüm örneklerde, bir değerin belirli bir değere eşit olup olmadığını kontrol eden koşulları kullandık.
Değerin VBA kodunda belirtilen bir değere eşit olmadığını kontrol ederken de benzer kodları kullanabilirsiniz. Excel VBA tarafından temsil edilene eşit değil.
Kullanımının pratik bir örneğini görmek için aşağıdaki Örnek 1'e bakın.
VBA'da Döngülerle If Then Else Kullanma
Şimdiye kadar, VBA'da 'IF-THEN' ifadelerinin nasıl çalıştığını anlamak için iyi olan bazı örnekleri inceledik, ancak pratik dünyada kullanışlı değil.
Öğrencilere not vermem gerekirse, bunu Excel işlevlerini kullanarak kolayca yapabilirim.
Öyleyse, bazı şeyleri otomatikleştirmenize ve daha verimli olmanıza yardımcı olabilecek bazı faydalı ve pratik örneklere bir göz atalım.
Örnek 1 - Etkin Çalışma Kitabı Dışındaki Tüm Çalışma Kitaplarını Kaydet ve Kapat
Çok sayıda açık çalışma kitabınız varsa ve etkin çalışma kitabı hariç hepsini hızlıca kapatmak istiyorsanız aşağıdaki kodu kullanabilirsiniz,
Sub SaveCloseAllWorkbooks() Dim wb Çalışma Kitaplarındaki Her wb İçin Çalışma Kitabı Olarak On error devam sonraki If wb.Name ActiveWorkbook.Name Then wb.Save wb.Close End If Next wb End Sub
Yukarıdaki kod, tüm çalışma kitaplarını kaydeder ve kapatır (etkin olan hariç).
Tüm açık çalışma kitaplarının koleksiyonunu gözden geçirmek için Sonraki Döngüsünü kullanır ve EĞER koşulunu kullanarak adı kontrol eder.
Ad, Etkin çalışma kitabınınkiyle aynı değilse, onu kaydeder ve kapatır.
Çalışma kitaplarından herhangi birinde bir VBA kodu varsa ve bunu .xls veya .xlsm olarak kaydetmediyseniz, bir uyarı görürsünüz (çünkü vba kodları .xlsx biçiminde kaydettiğinizde kaybolur).
Örnek 2 - Negatif Değerleri Olan Hücreleri Vurgulayın
Diyelim ki sayılarla dolu bir sütununuz var ve tüm hücreleri hızlı bir şekilde kırmızı ile negatif değerlerle vurgulamak istiyorsunuz, bunu aşağıdaki kodu kullanarak yapabilirsiniz.
Sub HighlightNegativeCells() Dim Cll As Range As Cll.Value < 0 ise Seçimdeki Her Cll İçin Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub
Yukarıdaki kod For Her döngüsünü kullanır ve yaptığınız seçimdeki her hücreyi kontrol eder. Hücre negatif bir değere sahipse, beyaz yazı tipi rengiyle kırmızıyla vurgulanır.
Örnek 3 - Geçerli Çalışma Sayfası Hariç Tüm Çalışma Sayfasını Gizle
Aktif olan hariç tüm çalışma sayfalarını hızlıca gizlemek isterseniz aşağıdaki kodu kullanabilirsiniz:
Sub HideAllExceptActiveSheet() Dim ws ThisWorkbook.Worksheets'teki Her ws için Çalışma Sayfası Olarak ws.Name ActiveSheet.Name ise ws.Visible = xlSheetHidden Sonraki ws End Sub
Yukarıdaki kod, bir çalışma sayfası koleksiyonundan geçmek için For Her döngüsünü kullanır. Her çalışma sayfasının adını kontrol eder ve etkin çalışma sayfası değilse onu gizler.
Örnek 4 - Bir Alfanümerik Dizeden Sayısal Parçayı Çıkarın
Hücrelerde alfasayısal dizeleriniz varsa ve sayısal kısmı ondan çıkarmak istiyorsanız, bunu aşağıdaki kodu kullanarak yapabilirsiniz:
İşlev GetNumeric(CellRef As String) Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Sonraki i GetNumeric = Sonuç Bitiş İşlevi
Bu kod, Excel'de çalışma sayfasında kullanılabilecek özel bir işlev yaratacaktır (tıpkı normal bir işlev gibi).
VBA Kodunu Nereye Koymalı?
Excel çalışma kitabınızda VBA kodunun nereye gittiğini merak mı ediyorsunuz?
Excel'in VB düzenleyicisi adı verilen bir VBA arka ucu vardır. VB Editor modülü kod penceresine kodu kopyalayıp yapıştırmanız gerekir.
İşte bunu yapmak için adımlar:
- Geliştirici sekmesine gidin.
- Visual Basic seçeneğine tıklayın. Bu, arka uçta VB düzenleyicisini açacaktır.
- VB Düzenleyicisi'ndeki Proje Gezgini bölmesinde, kodu eklemek istediğiniz çalışma kitabı için herhangi bir nesneye sağ tıklayın. Proje Gezgini'ni görmüyorsanız, Görünüm sekmesine gidin ve Proje Gezgini'ne tıklayın.
- Ekle'ye gidin ve Modül'e tıklayın. Bu, çalışma kitabınız için bir modül nesnesi ekleyecektir.
- Modül penceresindeki kodu kopyalayıp yapıştırın.