Hallo,
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.
Hallo,
(28.11.2016, 17:16)snb schrieb: [ -> ]Code:
.cells(1,8).resize(2)=application.transpose(array(.cells(1,3),"_verändert"))
da kommt in der Zeile ein
Laufzeitfehler 13: Typen unverträglich
Hi,
(29.11.2016, 16:23)snb schrieb: [ -> ]Alternativ:
ok, so hat es jetzt geklappt, das ist ganz schön schnell!
Ich konnte es aber nicht erweitern auf die anderen 3 Spalten (D-F):
Sheet1 | A | B | C | D | E | F |
1 | ArtNr1 | Bezeichnung1 | Änderung1 | ArtNr2 | Bezeichnung2 | Änderung2 |
2 | ff1 | gg1 | hh1 | kk1 | mm1 | pp1 |
3 | ff2 | gg2 | hh2 | kk2 | mm2 | _verändert |
4 | ff3 | gg3 | _verändert | kk3 | mm3 | pp3 |
5 | ff4 | gg4 | hh4 | kk4 | mm4 | pp4 |
6 | ff5 | gg5 | hh5 | kk5 | mm5 | _verändert |
7 | ff6 | gg6 | _verändert | kk6 | mm6 | pp6 |
8 | ff7 | gg7 | hh7 | kk7 | mm7 | pp7 |
9 | ff8 | gg8 | hh8 | kk8 | mm8 | pp8 |
10 | ff9 | gg9 | _verändert | kk9 | mm9 | pp9 |
11 | ff10 | gg10 | hh10 | kk10 | mm10 | pp10 |
12 | ff11 | gg11 | hh11 | kk11 | mm11 | _verändert |
13 | ff12 | gg12 | hh12 | kk12 | mm12 | pp12 |
14 | ff13 | gg13 | hh13 | kk13 | mm13 | pp13 |
15 | ff14 | gg14 | _verändert | kk14 | mm14 | pp14 |
Excel-Inn.de |
Hajo-Excel.de |
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.
Sheet1 | A | B | C | D | E | F | G |
6 | ArtNr1 | Bezeichnung1 | Änderung1 | | ArtNr2 | Bezeichnung2 | Änderung2 |
7 | ff1 | gg1 | hh1 | | kk1 | mm1 | pp1 |
8 | ff2 | gg2 | hh2 | | kk2 | mm2 | _verändert |
9 | ff3 | gg3 | _verändert | | kk3 | mm3 | pp3 |
10 | ff4 | gg4 | hh4 | | kk4 | mm4 | pp4 |
11 | ff5 | gg5 | hh5 | | kk5 | mm5 | _verändert |
12 | ff6 | gg6 | _verändert | | kk6 | mm6 | pp6 |
13 | ff7 | gg7 | hh7 | | kk7 | mm7 | pp7 |
14 | ff8 | gg8 | hh8 | | kk8 | mm8 | pp8 |
15 | ff9 | gg9 | _verändert | | kk9 | mm9 | pp9 |
16 | ff10 | gg10 | hh10 | | kk10 | mm10 | pp10 |
17 | ff11 | gg11 | hh11 | | kk11 | mm11 | _verändert |
18 | ff12 | gg12 | hh12 | | kk12 | mm12 | pp12 |
19 | ff13 | gg13 | hh13 | | kk13 | mm13 | pp13 |
20 | ff14 | gg14 | _verändert | | kk14 | mm14 | pp14 |
Excel-Inn.de |
Hajo-Excel.de |
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007 |
Add-In-Version 19.08 einschl. 64 Bit |
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
Hallo,
(01.12.2016, 15: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)).
[
attachment=8345]
So geht's
Code:
Private Sub CommandButton1_Click()
With Sheet3
Sheet2.Rows(6).ClearContents
.Cells(1, 12).CurrentRegion.ClearContents
.Cells(1, 12).Resize(2) = Application.Transpose(Array(.Cells(7, 3), "_verändert"))
.Cells(7, 1).CurrentRegion.AdvancedFilter 2, .Cells(1, 12).CurrentRegion, Sheet2.Cells(6, 1)
.Cells(7, 5).CurrentRegion.AdvancedFilter 2, .Cells(1, 12).CurrentRegion, Sheet2.Cells(6, 5)
.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'
Hi,
(06.12.2016, 13:39)snb schrieb: [ -> ]So geht's
sehr schön, klappt. Danke!