Option
Explicit
Sub
Test()
Dim
SpaltenNummer&
Dim
Spalte
As
Range
Set
Spalte = Range(
"A1"
)
SpaltenNummer = Spalte.Column
SymetrieSpalte SpaltenNummer
End
Sub
Private
Sub
SymetrieSpalte(C
As
Long
)
Dim
R&, I&, E&
Dim
V, V2$()
V = Range(Cells(1, C), Cells(Rows.Count, C).
End
(xlUp)).Value
da V kein Range
Object
ist und das Erkennungsword
"set"
nicht verwendet wird erstellt VBA automatisch ein 2 dimensionales
Variant
-Array
E = UBound(V)
(Anzahl der Zeilen trifft in diesem Fall zu, muss aber nicht da ein Array von n-n dimensioniert werden kann, _
treffender wäre "E = UBound(V)-LBound(V) zu bestimmung der Anzahl der Zeilen)
ReDim
V2(E - 1)
nicht bei 1 wie bei V, muss die Obergrenze auch um 1 niedriger sein
For
R = 1
To
E
If
Not
IsError(V(R, 1))
Then
If
V(R, 1) <>
""
Then
V2(I) = V(R, 1)
I = I + 1
End
If
End
If
Next
E = I - 1
gefüllten Platz ausgelesen werden, ansonsten wird die Spalte fälschlich als nicht symetrisch aufgebaut erkannt
For
R = 0
To
E
If
V2(R) <> V2(E - R)
Then
Exit
For
ElseIf
R + 1 > (E - R) + 1
Then
Nach der Hälfte wurden alle Zellen bereits verglichen, Schleife kann beendet werden, Schleifenvariable wird auf E+1 gesetzt, _
um zu kennzeichnen, dass die Schleife erfolgreich beendet wurde
R = E + 1
Exit
For
End
If
Next
If
R > E
Then
MsgBox
"Die Spalte ist symetrisch aufgebaut."
, vbInformation
Else
MsgBox
"Die Spalte ist nicht symetrisch aufgebaut."
, vbCritical
End
If
End
Sub