Eğer if içinde And, Or gibi operatörlerle çok fazla koşul girmek gerekiyorsa buna alternatif olarak ne yapılabilir sorusuna alternatif bir cevap hazırladım.
Option Explicit
Sub CokFazlaKosulaGoreIslemYap()
Dim dizi As Variant
Dim d As Variant
Dim kontrol As Boolean
dizi = Array( _
1, 2, 3, 4, 5, 6, 7, 8, 10, _
11, 12, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30)
kontrol = False
For Each d In dizi
devamEt:
If (d = 15) Then
kontrol = True
MsgBox "Koşula uyan değer bulundu: 15"
ElseIf (d = 13) Then
kontrol = True
MsgBox "Koşula uyan değer bulundu: 13"
ElseIf (d = 56) Then
kontrol = True
MsgBox "Koşula uyan değer bulundu: 56"
Else
On Error GoTo devamEt
End If
Next
If (kontrol = False) Then
MsgBox "Koşula uyan hiçbir değer bulunamadı."
End If
End Sub
Option Explicit
Sub CokFazlaKosulaGoreIslemYap()
'--------------------------------------------------
'Koşul sonuçlarımızı yazdıracağımız değişken.
'--------------------------------------------------
Dim dizi As Variant
'--------------------------------------------------
'For Each döngüsünde kullanacağımız dizi
'elemanını temsil edecek olan değişken.
'--------------------------------------------------
Dim d As Variant
'--------------------------------------------------
'Koşulun sağlanıp sağlanmadığını kontrol
'etmek için kullanacağımız değişken.
'Eğer hiçbir koşul sağlanmamışsa işimize
'yarayacak.
'--------------------------------------------------
Dim kontrol As Boolean
'--------------------------------------------------
'Burada If bloklarında kullanacağımız değerleri
'yazdık. Ben 30 değerlik bir dizi oluşturdum.
'--------------------------------------------------
dizi = Array( _
1, 2, 3, 4, 5, 6, 7, 8, 10, _
11, 12, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30)
'--------------------------------------------------
'Değişkene başlangıç değeri atadık.
'--------------------------------------------------
kontrol = False
'--------------------------------------------------
'Şimdi koşulları For Each yardımıyla
'tek tek kontrol edeceğiz. Burada Select Case
'alternatifi eminim bir çoğunuzun aklına geldi
'ama asıl amaç if içindeki kalabalığı azaltmaktı.
'Dizi yerine Collection vs. de kullanılabilir.
'--------------------------------------------------
For Each d In dizi
devamEt:
If (d = 15) Then
kontrol = True
MsgBox "Koşula uyan değer bulundu: 15"
ElseIf (d = 13) Then
kontrol = True
MsgBox "Koşula uyan değer bulundu: 13"
ElseIf (d = 56) Then
kontrol = True
MsgBox "Koşula uyan değer bulundu: 56"
Else
On Error GoTo devamEt
End If
Next
'--------------------------------------------------
'Eğer 30 koşulumuzdan hiçbiri sağlanmadıysa
'kontrol isimli değişkenimiz false olarak
'kalacağından dolayı bu kısım çalışacak.
'--------------------------------------------------
If (kontrol = False) Then
MsgBox "Koşula uyan hiçbir değer bulunamadı."
End If
End Sub