Aşağıdaki sözdiziminin neden VBA'da olacağını düşündüğüm şekilde çalışmadığını ve bunu sağlamak için ne yapmam gerektiğini merak ettim;Neden çoklu ardışık olmayan eşit koşullar vba'da çalışmıyor?
For a = 1 To 10
For b = 1 To 10
For c = 1 To 10
If a <> b <> c Then
MsgBox (a & " " & b & " " & c)
End If
Next c
Next b
Next a
Bu hala manuel ile elde edilebilir basitleştirilmiş bir örnektir, geçerli: 55 eşitsiz koşullarda olanaksız kılan
if a<>b and b<>c and c<>a then
Ama benim asıl amaçlanan kod 10 gibi değişkenleri sahip birden çok kez, ya da yazım hatası yazmam mümkün. Bence daha verimli bir yol var ama onu bulamadım.
Ps. Amacım, tüm değişkenler benzersiz olduğunda yalnızca bir mesaj kutusu açmaktır.
muhtemelen çok daha verimli daha yapılabilir ama benim hedefe almış:
For a = 1 To 10
check(a) = True
For b = 1 To 10
If check(b) = False Then
check(b) = True
For c = 1 To 10
If check(c) = False Then
check(c) = True
For d = 1 To 10
If check(d) = False Then
check(d) = True
For e = 1 To 10
If check(e) = False Then
check(e) = True
MsgBox (a & " " & b & " " & c & " " & d & " " & e)
End If
check(e) = False
check(a) = True
check(b) = True
check(c) = True
check(d) = True
Next e
End If
check(d) = False
check(a) = True
check(b) = True
check(c) = True
Next d
End If
check(c) = False
check(a) = True
check(b) = True
Next c
End If
check(b) = False
check(a) = True
Next b
Next a
neden değiştirdiğini - Excel Boolean değeri olarak son iki Doğru/Yanlış çözecektir. Daha sonra bunu A'ya eşitlemeye çalışın. Eğer B <> C ise, A'nın Doğru olup olmadığını görmeye çalışacaktır. –
Operatörleri bu şekilde zincirleyemezsiniz. Bkz. [Karşılaştırma İşleçleri] (http://stackoverflow.com/documentation/vba/5813/operators/20479/comparison-operators#t=201610201857403512149). – Comintern
İsterseniz, eğer bir <> b Ve b <> c ve c <> a Sonra ', sonra yazın. Eğer bir <> b ve b <> c ve c <> a Sonra'. –