Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Filtern uns gefilterte Daten kopieren

Filtern uns gefilterte Daten kopieren
19.01.2007 16:21:53
Peter
Hallo
Dieses Programm habe ich in Herbers Beispielsammlung gefunden und auf meine Bedürfnisse abgeändert.

Sub FilternUndKopieren()
Dim rngAct As Range
With Worksheets("Tabelle1").Range("A8")
.AutoFilter Field:=20, Criteria1:=Range("U1")
Set rngAct = Range("C8:C1000")
rngAct.Copy Worksheets("Tabelle2").Range("B8")
End With
ActiveSheet.AutoFilterMode = False
End Sub

Der in Tabelle1 Zelle U1 eingegebene Wert wird in Spalte 20 gefiltert. Aus diesen gefilterten Zeilen übertrage ich lediglich die entsprechenden Daten aus Spalte C nach Tabelle2 ab Spalte B8. Dies klappt prima.
Mein Problem: In Tabelle2 Spalte B stehen bereits Daten, die erhalten bleiben müssen bzw. nicht überdeckt werden dürfen. Das heisst, es dürfen aus dem gewählten Filterbereich Tabelle1 Spalte C nur diejenigen Daten in Tabelle2 ab Spalte B übertragen werden, die dort nicht schon vorhanden sind.
Ist dies lösbar? Es wäre super!
Freundlich grüsst
Peter

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filtern uns gefilterte Daten kopieren
19.01.2007 16:47:54
Josef
Hallo Peter,
probier mal.
Sub FilternUndKopieren()
    Dim vTmp() As Variant, vCopy As Variant
    Dim lngR As Long, lngIndex As Long
    
    With Worksheets("Tabelle1")
        vCopy = .Range("C8:T" & Application.Max(.Cells(Rows.Count, 20).End(xlUp).Row, 8))
    End With
    
    With Worksheets("Tabelle2")
        
        For lngR = 1 To UBound(vCopy, 1)
            If vCopy(lngR, 18) = Sheets("Tabelle1").Range("U1") Then
                If IsError(Application.Match(vCopy(lngR, 1), .Range("B:B"), 0)) Then
                    Redim Preserve vTmp(lngIndex)
                    vTmp(lngIndex) = vCopy(lngR, 1)
                    lngIndex = lngIndex + 1
                End If
            End If
        Next
        
        If lngIndex > 0 Then
            lngR = .Cells(Rows.Count, 2).End(xlUp).Row + 1
            If lngR < 8 Then lngR = 8
            .Range(.Cells(lngR, 2), .Cells(lngR + UBound(vTmp), 2)) = Application.Transpose(vTmp)
        End If
        
    End With
    
End Sub

Gruß Sepp
Anzeige
AW: Filtern und gefilterte Daten kopieren
19.01.2007 18:07:35
Peter
Hallo Sepp
Vielen Dank für deine schnelle Antwort. Leider komme ich damit aber nicht zum Ziel.
Als Ergänzung zu meiner Anfrage kann ich noch Folgendes präzisieren:
Tabelle1 beinhaltet Datensätze von Spalte A bis Z. In U1 gebe ich den Suchbegriff ein, z.B. eine ID-Nummer. Über einen Button starte ich die Sub. In Spalte U wird nun über den Autofilter die ID-Nummer ausgefiltert. Von allen gefilterten Zeilen sollen nun die in Spalte C enthaltenen Werte in die Tabelle2 ab Spalte B8 abgelegt werden.
Meine oben aufgeführte Programmsequenz arbeitet bis hier hin einwandfrei.
Jetzt geht es nur noch darum, dass die in Tabelle2 bereits aus einem vorangegangen Arbeitsablauf übertragenen Werte nicht überdeckt werden. Die bisherigen Werte dienen bereits als Suchbegriff in mehreren Sverweisen.
Wie also muss meine Programmsequenz noch ergänzt werden, damit nur die noch nicht in Spalte B enthaltenen Werte angehängt werden?
Beste Grüsse
Peter
Anzeige
AW: Filtern und gefilterte Daten kopieren
19.01.2007 18:17:51
Josef
Hallo Peter,
genau das macht mein Code, allerdings hast du in deinem ersten Post geschrieben
"Der in Tabelle1 Zelle U1 eingegebene Wert wird in Spalte 20 gefiltert"
und Spalte 20 ist nun mal "T".
Jetzt schreibst du "In Spalte U wird nun über den Autofilter die ID-Nummer ausgefiltert", und das ist Spalte 21.
Hab den Code jetzt mal auf Spalte "U" angepasst.
Sub FilternUndKopieren()
    Dim vTmp() As Variant, vCopy As Variant
    Dim lngR As Long, lngIndex As Long
    
    With Worksheets("Tabelle1")
        vCopy = .Range("C8:U" & Application.Max(.Cells(Rows.Count, 20).End(xlUp).Row, 8))
    End With
    
    With Worksheets("Tabelle2")
        
        For lngR = 1 To UBound(vCopy, 1)
            If vCopy(lngR, 19) = Sheets("Tabelle1").Range("U1") Then
                If IsError(Application.Match(vCopy(lngR, 1), .Range("B:B"), 0)) Then
                    Redim Preserve vTmp(lngIndex)
                    vTmp(lngIndex) = vCopy(lngR, 1)
                    lngIndex = lngIndex + 1
                End If
            End If
        Next
        
        If lngIndex > 0 Then
            lngR = Application.Max(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 8)
            .Range(.Cells(lngR, 2), .Cells(lngR + UBound(vTmp), 2)) = Application.Transpose(vTmp)
        End If
        
    End With
    
End Sub

Gruß Sepp
Anzeige
AW: Filtern und gefilterte Daten kopieren
19.01.2007 19:21:26
Peter
Hallo Sepp
Was du so leicht aus dem Ärmel schüttelst, erstaunt mich ungemein. Bin halt doch noch ein "fortgeschrittener Anfänger" in Sachen VBA.
Irgend was haut noch nicht hin. In Tabelle1 beginnen die Datenzeilen ab Zeile 8. In Zelle U1 habe ich die ID-Nummer eines am PC angemeldeten Users (später wird die Variable durch den Account = "Environ(UserName) automatisch abgefüllt). Ab Zelle 8 bis 2000 sind die Daten mehrerer User abgelegt. Der Filterbereich beginnt ab Zeile 8.
Was mache ich falsch, dass das Programm leer durchläuft. Es geschieht wirklich nichts.
Brauchst du ev. noch anderer Details, die du kennen musst? Ev. würden bei mir Kommentare im Programm den "Aha-Effekt" auslösen.
Gruss Peter
Anzeige
AW: Filtern und gefilterte Daten kopieren
19.01.2007 19:31:42
Josef
Hallo Peter,
kannst du die beiden Tabellenblätter hochladen?
Gruß Sepp

AW: Filtern und gefilterte Daten kopieren
19.01.2007 19:41:49
Peter
Hallo Sepp
Hochladen des Workbooks geht leider nicht, es sind produktive Firmendaten drauf.
Was kannst du aus meinen Erklärungen nicht genau interpretieren?
Gruss Peter
AW: Filtern und gefilterte Daten kopieren
19.01.2007 19:55:41
Josef
Hallo Peter,
eine Spaltenanpassung war falsch. Jetzt sollte es laufen.
Sub FilternUndKopieren()
    Dim vTmp() As Variant, vCopy As Variant
    Dim lngR As Long, lngIndex As Long
    
    With Worksheets("Tabelle1")
        vCopy = .Range("C8:U" & Application.Max(.Cells(Rows.Count, 21).End(xlUp).Row, 8))
    End With
    'schreibt die Daten aus dem Bereich "C8:U bis zur letzten gefüllten Zeile in Spalte "U" in ein Array
    
    With Worksheets("Tabelle2")
        
        For lngR = 1 To UBound(vCopy, 1) 'Zeilen des Arrays durchlaufen
            If vCopy(lngR, 19) = Sheets("Tabelle1").Range("U1") Then
                'wenn der Wert der letzten Spalte des Array = Eintrag in Tabelle1!U1 dann
                If IsError(Application.Match(vCopy(lngR, 1), .Range("B:B"), 0)) Then
                    'wenn der Wert aus der ersten Spalte des Arrays (aus Tabelle1!Cx) nicht
                    'in Spalte "B" der Tabelle2 enthalten dann
                    Redim Preserve vTmp(lngIndex)
                    vTmp(lngIndex) = vCopy(lngR, 1)
                    lngIndex = lngIndex + 1
                    'Wert in temporäres Array schreiben
                End If
            End If
        Next
        
        If lngIndex > 0 Then
            'wenn Daten im temporären Array dann
            lngR = Application.Max(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 8)
            .Range(.Cells(lngR, 2), .Cells(lngR + UBound(vTmp), 2)) = Application.Transpose(vTmp)
            'Array in Spalte "B" von Tabelle2 schreiben. Unterhalb der bestehenden Daten.
        End If
        
    End With
    
End Sub

Gruß Sepp
Anzeige
AW: Filtern und gefilterte Daten kopieren
19.01.2007 20:52:29
Peter
Hallo Sepp
Jaaaa, jetzt läufts. Und deine kurzen Kommentare haben mich um einiges sachverständiger gemacht.
Vielen Dank, du warst mir eine grosse Hilfe!
Schönes Wochenende
Peter
P.S. Warum eigentlich geizt man im Allgemeinen mit Kommentaren in den Programmsequenzen? Die sind ja unheimlich hilfreich!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige