ich habe eine Liste mit Daten in Sheet "Gesamt", die ich nach dem Eintrag "_verändert" in Spalte C filtern will und dann die gefilterten Daten auf das Sheet "Differenzliste" kopieren.
Code:
With Sheets("Gesamt") loLetzteA = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) 'letzte belegte Zeile in Spalte A (1) If loLetzteA = 6 Then loLetzteA = 7
'Spalte C filtern auf "_verändert" .Range("$A$6:$G" & loLetzteA).AutoFilter Field:=3, Criteria1:="_verändert" .Range("A7:B" & loLetzteA).Copy Sheets("Differenzliste").Range("A7") Application.CutCopyMode = False .Range("$A$6:$G" & loLetzteA).AutoFilter Field:=3 End With
Wenn es nun in der gesamten Spalte C aber keine Zelle mit "_verändert" gibt, werden alle Zeilen kopiert. Wie kann ich das verhindern? Denn dann soll nichts kopiert werden.
28.11.2016, 18:16 (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2016, 18:16 von snb.)
Code:
sub M_snb() with sheet1 .cells(1,8).resize(2)=application.transpose(array(.cells(1,3),"_verändert")) .cells(1,16).resize(,2)=.cells(1).resize(,2).value .cells(1).currentregion.advancedfilter 2,.cells(1,8).currentregion,.cells(1,16).resize(,2) end with end sub
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 19.08 einschl. 64 Bit
Habe ich das Makro richtig verstanden? So geht es jedenfalls nicht mit den drei weiteren Spalten:
Code:
Sub M_snb() With Sheet1 .Cells(1, 8).Resize(2) = Application.Transpose(Array(.Cells(1, 3), "_verändert")) 'Eintrag des Suchkriteriums in Spalte 8 (H) mit Überschrift .Cells(1, 10).Resize(, 2) = .Cells(1).Resize(, 2).Value 'Eintrag der Überschriften in Spalte 10 und 11 (J und K) .Cells(1).CurrentRegion.AdvancedFilter 2, .Cells(1, 8).CurrentRegion, .Cells(1, 10).Resize(, 2) 'Filtern und übertragen der gefilterten Daten
.Cells(1, 9).Resize(2) = Application.Transpose(Array(.Cells(4, 6), "_verändert")) 'Eintrag des Suchkriteriums in Spalte 9 (I) mit Überschrift .Cells(1, 12).Resize(, 2) = .Cells(4).Resize(, 2).Value 'Eintrag der Überschriften in Spalte 10 und 11 (J und K) .Cells(1).CurrentRegion.AdvancedFilter 2, .Cells(1, 8).CurrentRegion, .Cells(1, 12).Resize(, 2) 'Filtern und übertragen der gefilterten Daten End With End Sub
Wie mache ich es nun, damit die Daten ohne die Überschriften auf ein zweites Sheet kopiert werden, in die Spalten A und B sowie E und F jeweils ab Zeile 7. Die Quelldaten beginnen ebenfalls in Zeile 7 der Spalte A-C und E-G. Ich habe ein bißchen mit den Cells-Zahlen gespielt, bin aber auf keine Lösung gekommen. Ich glaube, ich verstehe das mit dem "Resize" nicht.
Wenn du die ganze 'currentregion' mitkopiieren willst, geht's eben einfacher:
Code:
sub M_snb() with sheet1 .cells(1,8).resize(2)=application.transpose(array(.cells(1,3).Value,"_verändert")) .cells(1).currentregion.advancedfilter 2,.cells(1,8).currentregion,sheet2.cells(1) end with end sub
(01.12.2016, 16:02)snb schrieb: Wenn du die ganze 'currentregion' mitkopiieren willst, geht's eben einfacher:
ich habe es nun geschafft, daß die beiden Bereiche getrennt voneinander gefiltert und kopiert werden.
Code:
Sub M_snb() With Sheet1 .Cells(1, 12).Resize(2) = Application.Transpose(Array(.Cells(1, 3), "_verändert")) 'Eintrag des Suchkriteriums in Spalte 12 (L) mit Überschrift 'Range.AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique) .Cells(1).CurrentRegion.AdvancedFilter 2, .Cells(1, 12).CurrentRegion, Sheet2.Cells(6, 1).Resize(, 2) 'Filtern und übertragen der gefilterten Daten
.Cells(1, 12).Resize(2) = Application.Transpose(Array(.Cells(1, 7).Value, "_verändert")) 'Eintrag des Suchkriteriums in Spalte 10 (J) mit Überschrift 'Filtern und kopieren der gefilterten Daten .Cells(5).CurrentRegion.AdvancedFilter 2, .Cells(1, 12).CurrentRegion, Sheet2.Cells(6, 5).Resize(, 2) 'Filtern und übertragen der gefilterten Daten
.Cells(1, 12).CurrentRegion.ClearContents End With End Sub
nun fehlt es mir nur noch, daß es auch erst in Zeile 6 der Quelle startet und nicht schon in Zeile 1 (siehe die beiden Blätter Gesamt und Gesamt (2)).
.Cells(1, 12).CurrentRegion.ClearContents End With End Sub
Wenn die überschirften von Spalte C und Spalt G identisch sind, geht's einfacher. Dann reicht das Filter in L1:L2 für beide Filteraktionen. Schreibe nicht im Gebiet das für das Filter benützt wird: .Cells(1, 12).currentregion.
NB. Advanced filter ist keine einfache Methode, doch 'advanced'
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28 • Rabe