Microsoft Excel

Herbers Excel/VBA-Archiv

Range leerenzeilenfrei neu ordnen | Herbers Excel-Forum


Betrifft: Range leerenzeilenfrei neu ordnen von: Johannes D.
Geschrieben am: 04.02.2010 19:18:29

Hallo xlGemeinde,

folgende Problemstellung:
Gegeben ist eine definierte Range, die mit Daten bestueckt ist. Es koennen auch "Leerzeilen" in dieser Range vorkommen. Ziel ist, die Range ueber VBA neu und leerzeilenfrei zu ordnen. Spezialfilter oder Zeilenloeschungen (EntireRow.Delete) kommen leider nicht in Frage.

Ausgangspunkt (links) - Ziel (rechts):


Ich haette mich jetzt durch die Zeilen der Range iteriert, nichtleere Zeilen in ein Array gelesen - anschliessend die komplette Range geloescht und neu aufgebaut ... aber das erscheint mir etwas aufwaendig fuer die Kleinigkeit?!

Ueber geistige Anstoesse waere ich sehr dankbar! :-)

Gruesse und vielen Dank vorab,
Johannes

  

Betrifft: warum nicht einfach sortieren? o.T. von: Josef Ehrensberger
Geschrieben am: 04.02.2010 19:24:22

Gruß Sepp



  

Betrifft: AW: warum nicht einfach sortieren? o.T. von: Johannes D.
Geschrieben am: 04.02.2010 19:38:30

Danke fuer die Antwort, Josef.
Tatsaechlich hab ich das Beispiel schlecht gewaehlt ... eine Sortierung wuerde ja bedeuten, dass ich alphabetisch die Reihenfolge aendere. Das will ich aber nicht!

Ich will weder die Reihenfolge aendern - noch Leerzeilen. :-)
Stellt euch einfach vor da wuerde nicht A - H stehen ... sondern zufaellige wirre Kombinationen.

Gruesse,
Johannes


  

Betrifft: AW: warum nicht einfach sortieren? o.T. von: Josef Ehrensberger
Geschrieben am: 04.02.2010 20:00:18

Hallo Johannes,


ich würde es trotzdem per sortieren machen.

Probier mal.



Sub leereWeg()
  Dim rng As Range, rngT As Range
  
  Set rng = Range("A2:A15")
  
  Columns(rng.Column + rng.Columns.Count).EntireColumn.Insert
  
  Set rngT = rng.Resize(, rng.Columns.Count + 1)
  
  rngT.Columns(rng.Columns.Count + 1).FormulaR1C1 = "=IF(COUNTA(RC[-" & _
    rng.Columns.Count & "]:RC[-1])<1,"""",ROW())"
  rngT.Columns(rng.Columns.Count + 1) = rngT.Columns(rng.Columns.Count + 1).Value
  rngT.Sort key1:=rngT.Cells(1, rng.Columns.Count + 1), order1:=xlAscending, Header:=xlNo
  
  rngT.Columns(rng.Columns.Count + 1).EntireColumn.Delete
  
  Set rngT = Nothing
  Set rng = Nothing
End Sub



Gruß Sepp



  

Betrifft: AW: warum nicht einfach sortieren? o.T. von: Johannes D.
Geschrieben am: 07.02.2010 17:24:11

Hallo Josef,

sorry fuer die Verspaetung.
Wollte dennoch Feedback geben, dass deine Loesung optimal arbeitet.

Vielen Dank dafuer! :-)

Gruesse und einen schoenen Restsonntag,
Johannes


Beiträge aus den Excel-Beispielen zum Thema "Range leerenzeilenfrei neu ordnen"