Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Filtern Liste und Daten auf anderes Sheet kopieren
#1
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.
Antworten Top
#2
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
Antworten Top
#3
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
Antworten Top
#4
Alternativ:

Code:
.cells(1,8).resize(2)=application.transpose(array(.cells(1,3).Value,"_verändert"))


Angehängte Dateien
.xlsb   __Advancedfilter_Rabe.xlsb (Größe: 13,46 KB / Downloads: 5)
Antworten Top
#5
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
ABCDEF
1ArtNr1Bezeichnung1Änderung1ArtNr2Bezeichnung2Änderung2
2ff1gg1hh1kk1mm1pp1
3ff2gg2hh2kk2mm2_verändert
4ff3gg3_verändertkk3mm3pp3
5ff4gg4hh4kk4mm4pp4
6ff5gg5hh5kk5mm5_verändert
7ff6gg6_verändertkk6mm6pp6
8ff7gg7hh7kk7mm7pp7
9ff8gg8hh8kk8mm8pp8
10ff9gg9_verändertkk9mm9pp9
11ff10gg10hh10kk10mm10pp10
12ff11gg11hh11kk11mm11_verändert
13ff12gg12hh12kk12mm12pp12
14ff13gg13hh13kk13mm13pp13
15ff14gg14_verändertkk14mm14pp14
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
ABCDEFG
6ArtNr1Bezeichnung1Änderung1 ArtNr2Bezeichnung2Änderung2
7ff1gg1hh1kk1mm1pp1
8ff2gg2hh2kk2mm2_verändert
9ff3gg3_verändertkk3mm3pp3
10ff4gg4hh4kk4mm4pp4
11ff5gg5hh5kk5mm5_verändert
12ff6gg6_verändertkk6mm6pp6
13ff7gg7hh7kk7mm7pp7
14ff8gg8hh8kk8mm8pp8
15ff9gg9_verändertkk9mm9pp9
16ff10gg10hh10kk10mm10pp10
17ff11gg11hh11kk11mm11_verändert
18ff12gg12hh12kk12mm12pp12
19ff13gg13hh13kk13mm13pp13
20ff14gg14_verändertkk14mm14pp14
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

Antworten Top
#6
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
Antworten Top
#7
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)).

.xlsb   Advancedfilter_Rabe.xlsb (Größe: 32,18 KB / Downloads: 1)
Antworten Top
#8
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'


Angehängte Dateien
.xlsb   __erneut Advancedfilter.xlsb (Größe: 31,13 KB / Downloads: 6)
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Rabe
Antworten Top
#9
Hi,

(06.12.2016, 13:39)snb schrieb: So geht's

sehr schön, klappt. Danke!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste