Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Zeilen nur in einem bestimmten Bereich löschen

Begonnen von Carlos_C, September 19, 2011, 10:21:52

⏪ vorheriges - nächstes ⏩

Carlos_C

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
Gruß,

Carlos
  •  

Hondo

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

Carlos_C

Danke, Hondo! Hat sehr gut funktioniert!

LG

Carlos
Gruß,

Carlos
  •