Durch ein VBA Makro nur Zeilen mit Inhalt in eine neue Tabelle kopieren?

3 Antworten

es geht auch ganz ohne Makro(aller guten Dinge sind 8, hab Acht!):

  1. Füge davor zwei Hilfsspalten ein (werden am Ende wieder gelöscht):
  2. Schreibe in B1 die Formel: =Anzahl2(E1:P1),   in A1 =Zeile(A1)
  3. Erst in B1, dann in A1 Doppelklick aufs Ausfüllkästchen: Die Formeln werden bis zum Ende der Liste runterkopiert.
  4. Spalten A&B (NUR DIESE! am Spaltenkopf) markieren, kopieren, in A1 ALS WERTE wieder einfügen
  5. Ganzes Blatt sortieren nach Spalte B: egal, ob steigend oder fallend.
  6. Alle Zeilen mit 0 Einträgen In E:P (ursprünglich C:N) stehen jetzt zusammen und können gesammelt gelöscht werden.
  7. Ganze Tabelle nach Spalte A (steigend) sortieren: Die Einträge stehen in der alten Reihenfolge da, ohne die aussortierten.
  8. Spalten A&B löschen, fertig.

Mach das auf einer Kopie des Originalblattes, falls Du einen Fehler machst.

'Quelltabelle ist das Worksheet, in dem die Daten stehen,
'Zieltabelle ist das Worksheet, in das die Daten übertragen werden sollen

Dim Quellzeile As Integer, Zielzeile As Integer

Zieltabelle.Cells.Clear 'erst mal die Zieltabelle leeren, damit keine Reste übrig bleiben
Zielzeile = 1 'Startwert zum Eintragen
For Quellzeile = 1 To Quelltabelle.Cells.SpecialCells(xlLastCell)
'Nachprüfen, ob genügend Werte eingetragen sind - mindestens einer oder alle, je nachdem
' -- hier der Code der Prüfung --
'das Ergebnis der Prüfung steht im Boolean zeileOK
If zeileOK Then
Quelltabelle.Rows(Quellzeile).Copy(Zieltabelle.Rows(Zielzeile))
Zielzeile = Zielzeile + 1
End If 'zeileOK
Next Quellzeile '= 1 To Quelltabelle.Cells.SpecialCells(xlLastCell)

Wie wäre es mit einer hybriden Lösung?

Füge in Spalte O die Formel ein 

=SUMMENPRODUKT(ABS(C2:N2))>0

oder

=ZÄHLENWENN(C2:N2;">0")>0

Damit sind alle zu kopierenden Zeilen markiert. In VBA kopierst du dann mit

Sub Kopieren()
  Dim i, j As Integer
  j = 2
  For i = 2 To Range("A:A").End(xlDown).Row
    If Range("O" & i).Value Then
      Range(i & ":" & i).Copy Tabelle2.Range("A" & j)
      j = j + 1
    End If
  Next
End Sub
59

In VBA sähe die ZÄHLENWENN-Funktion so aus:

If WorksheetFunction.CountIf(Range("C" & i & ":N" & i), ">0") > 0 Then
0

Excel-VBA (Farb)Sortierung nach mehreren Kriterien

Hallo zusammen,ich bins nochmal. Habe schon wieder eine Aufgabe mit Excel-VBA blekommen. Man kann ja solche Buttons programmieren um sich 10 Minuten "auswählen,filtern kopieren,sortieren,einfügen,usw." ersparen kann. Jetzt die Frage,wer kann mir zu meiner Aufgabe solch einen Button kreieren?

Als erstes soll die Tabelle mit ca 400 Zeilen (Zeilen müssen zusammenbleiben) so sortiert werden,dass die gelben Zeilen ganz oben sind,dann die grünen,dann die blauen mit grüner Markierung und ganz unten die ganz blauen.

Dazu ist eine Sortierung nach 2 Spalten nötig,in meinem Fall zuerst nach Spalte A (gelb,grün,blau) und dann nach Spalte D (wieder gelb,grün,blau,aber der Spalte A untergeordnet).

Allerdings sind die ersten 3 Zeilen Überschrift,weswegen das Makro erst ab Zeile 4 arbeiten sollte.

Danach sollen als drittes Kriterium die nach Farben geordneten Zeilen diesmal alphabetisch nach Zeile D geordnet werden.

bevor das alles stattfindet sollte aber eigentlich auch alphabetisch nach spalte K sortiert werden,aber das brauche ich im moment noch nicht,da die spalte k noch ausgefüllt und mit anderen listen ab geglichen werden muss (siehe meine vorige frage)

ich weiß,dass das alles auch ganz einfach mit dem button "sortieren und filtern" gehen würde,aber meine lösung soll so aussehen,dass man nur das makro aktiviert und dann alles getan ist und man nicht erst die ganzen spalten 10mal auswählen muss.

ich bitte um hilfe. mfg raider

...zur Frage

Excel: Mit SVerweis nicht nur die Werte, sondern auch die Hintergrundfarben auslesen?

Hallo Excel-Profis!

Meine grundsätzliche Frage: Kann man per SVerweis - oder auf andere Weise - auch Hintergrundfarben übertragen?


Zunächst einmal der Aufbau der Seite - falls notwendig.

In Tabelle1 befindet sich eine Liste von A1 bis B44.

Tabelle1/Spalte A enthält Zahlen zwischen 1 und 44, ohne doppelte, nicht auf-/absteigend, sondern durcheinander, und darf auch nicht sortiert werden.

Tabelle1/Spalte B enthält Text, der teilweise farblich hinterlegt ist (insgesamt 9 Farben oder keine Hintergrundfarbe).

In Tabelle2 habe ich in Spalten A1 - A44 Zufallszahlen generiert, die >0 aber <1 sind.

=ZUFALLSZAHL() =>runterkopiert bis A44

Entsprechend der Zufallszahlen habe ich in Spalte B1 bis B44 Zahlen generiert, die im Zahlenbereich 1-44 jeweils nur einmal vorkommen.

=RANG.GLEICH($A1;$A$1:$A$44) =>runterkopiert bis B44

In Tabelle2/SpalteC habe ich diese generierte Zahl aus Tabelle2/SpalteB per SVerweis in Tabelle1/SpalteA gesucht und mit den Wert aus Tabelle1/SpalteB ausgeben lassen.


=SVERWEIS(B1;Tabelle1!$A$1:$B$44;2) =>runterkopiert bis C44

Soweit funktioniert das gut, allerdings hätte ich gerne die farbliche Hinterlegung der Zellen aus Tabelle1/SpalteB ebenfalls übertragen.

Wer kann mir helfen?

Geht das überhaupt und geht das idealerweise auch ohne VBA?

Vielleicht mit einer Hilfsspalte?

Vielen Dank für hilfreiche Antworten! Anita

...zur Frage

Was möchtest Du wissen?