Zastanawiam się, dlaczego następująca składnia nie działa tak, jak myślałem w VBA, i co powinienem zrobić, aby to zrobić;Dlaczego wiele kolejnych nierównych warunków nie działa w vba?
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
To jest uproszczony przykład, który można jeszcze ręcznie uzyskane z:
if a<>b and b<>c and c<>a then
Ale mój rzeczywisty kod zamierzonym posiada 10 takie zmienne wiele razy, co sprawia, że jest niewykonalne z 55 nierównych warunkach lub prawdopodobnie dla mnie by zrobić literówkę. Myślę, że jest bardziej skuteczny sposób, ale nie znalazłem go.
Ps. Moim celem jest wyświetlenie tylko okna komunikatu, jeśli wszystkie zmienne są unikalne.
Ja osiągnąłem swój cel, choć może to prawdopodobnie zrobić dużo bardziej wydajny niż:
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
Co do dlaczego - Excel rozwiąże dwa ostatnie do wartości logicznej Prawda/Fałsz. Następnie spróbuj dopasować to do A, więc jeśli B <> C, to spróbuje sprawdzić, czy A nie jest Prawda. –
Nie można łączyć takich operatorów. Patrz [Operatory porównania] (http://stackoverflow.com/documentation/vba/5813/operators/20479/comparison-operators#t=201610201857403512149). – Comintern
Jeśli chcesz 'If a <> b And b <> c And c <> a Then', następnie napisz' If a <> b And b <> c And c <> a Then'. –