Guten Morgen, liebes Forum
Ich habe eine Frage bzgl. VBA-Programmierung bei Excel.
Ich habe eine Excel-Tabelle mit Daten im Bereich der Zellen A4:F30. Wenn ich möchte, dass die Zeilen, deren Zellen in den Spalten C, D und E den Wert 1 haben, gelöscht werden, kann ich folgende Prozedur hinter einer Befehlschaltfläche schreiben:
Private Sub CommandButton2_Click()
Dim iRow As Integer, iRowL As Integer
iRowL = Cells(Rows.Count, 1).End(xlUp).Row
For iRow = iRowL To 1 Step -1
If Cells(iRow, 3) = 1 And _
Cells(iRow, 4) = 1 And _
Cells(iRow, 5) = 1 Then
Rows(iRow).Delete
End If
Next iRow
End Sub
Funktioniert wunderbar. Aber nun möchte ich was anderes machen:
Also:
Ich möchte eine VBA-Prozedur hinter einem Button haben, die alle Zellen in den Spalten C, D und E löscht, die den Wert 1 haben und, ohne die Zeilen an den Spalten A, B und F (also die restlichen Spalten) anzufassen, die Zeilen in den Spalten C, D und E nach oben hebt. Z.B.:
Die Tabelle vor dem Anklicken des Buttons sieht so aus
A B C D E F (Spalten)
X X X X X X
Y Y 1 1 1 Y
Z Z Z Z Z Z
V V V V V V
W W W W W W
Und nach dem anklicken des Buttons würde so aussehen:
A B C D E F (Spalten)
X X X X X X
Y Y Z Z Z Y
Z Z V V V Z
V V W W W V
W W W
Meint Ihr, dass das mit VBA möglich ist?
Ich freue mich seeehr auf Eure Vorschläge!
Liebe Grüße,
Carlos
Hallo,
nach intensivem Betrachten der beiden Tabellen habe ich nun verstanden was du möchtest.
Wenn die Anzahl der Zeilen begrenzt ist, ist das machbar.
Ich würde zuerst ein Array(n,5) definieren und in einer Schleife alle Werte der Spalten A bis F einlesen.
Der Algorithmus zum Vertauschen lautet dann so:
Schleife über alle Zeilen, Zähler x
IF ein Element einer Zeile eine 1 dann:
Schleife von x bis letzte Zeile, Zähler y
Vertausche Element x mit Element x + 1
Ende Schleife
Ende IF
x = x + 1
Ende Schleife
Wenn die äußere Schleife fertig ist sind alle Werte nach Vorschrift vertauscht.
Gruß Andreas
Danke, Hondo! Hat sehr gut funktioniert!
LG
Carlos