Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
364to368
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
364to368
364to368
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Mit VBA zwei Spalten filtern

Mit VBA zwei Spalten filtern
18.01.2004 22:16:54
Schroedi
Hallo Profis,
ich hab's wirklich versucht, aber alleine kriege ich's nicht hin..!
Was ich brauche ist ein Script, das zwei Spalten filtert. Habe versucht, das Beispiel-Script aus dem Archiv umzuschreiben, funktioniert aber nicht.
Folgendes soll (vorerst) passieren:
Spalte A filtern (erster Wert z.B. 10) und "innerhalb der Spalte A die Spalte B filtern (Werte zwischen 0 und 99). Nach jedem Filtern soll das Ergebnis ausgedruckt werden.
Also:
10 xx 1; 10 xx 3; 10 xx 12; ...
20 xx 1; 20 xx 3; 20 xx 12; ...

Mit meinem (nichtmal) Halbwissen habe ich herumprobiert, weiß auch schon mehr als vorher, aber es reicht noch nicht... :-(
Vielleicht kann sich ja mal jemand anschauen, was ich bisher habe (s.u.)
Danke! Schroedi.


Sub FilternUndDruckenII()
Dim arr1()
Dim iRow1 As Integer
Range("A:A").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("z1"), Unique:=True
iRow1 = 1
Do Until IsEmpty(Cells(iRow1, 26))
ReDim Preserve arr1(iRow1 - 1)
arr1(iRow1 - 1) = Cells(iRow1, 26)
iRow1 = iRow1 + 1
Loop
Dim arr2()
Dim iRow2 As Integer
Range("C:C").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("aa1"), Unique:=True
iRow2 = 1
Do Until IsEmpty(Cells(iRow2, 27))
ReDim Preserve arr2(iRow2 - 1)
arr2(iRow2 - 1) = Cells(iRow2, 27)
iRow2 = iRow2 + 1
Loop
Columns(26).ClearContents
Columns(27).ClearContents
For iRow1 = 1 To UBound(arr1)
Columns(1).AutoFilter Field:=1, Criteria1:=arr1(iRow1)
For iRow2 = 1 To UBound(arr2)
Columns(3).AutoFilter Field:=1, Criteria1:=arr2(iRow2)
ActiveSheet.PrintPreview
Next iRow2
Next iRow1
Range("A1").AutoFilter
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit VBA zwei Spalten filtern
18.01.2004 22:24:41
Ramses
Hallo
die einfachste Variante auf den Grundcode zu kommen ist, den Makrorekorder zu starten und anschliessend deine Aktionen auszuführen.
Stop den Rekorder dann und schau dir den Code im VB-Editor an.
Zu deinem Problem:
Wieviele Filtervorgänge musst/willst du machen.
Dementsprechend ist der Code aufzubauen.
Gruss Rainer
AW: Mit VBA zwei Spalten filtern
18.01.2004 22:31:56
Schroedi
Hi Ramses,
das ging ja schnell...!
Der Tipp mit dem Recorder ist echt gut, werde ich mir merken. Komme aber so trotzdem nicht richtig weiter.
In Spalte A stehen z.Zt. 20 unterschiedliche Werte, die gefiltert werden müssen. In Spalte B stehen -je nach dem Wert in Spalte A- z.Zt. bis zu 50 verschiedene Werte.

Hilft das?
Danke, Schroedi.
Anzeige
AW: Mit VBA zwei Spalten filtern
18.01.2004 23:09:39
Ramses
Hallo
probier mal das:
Option Explicit

Sub Filter_test()
'Variablen setzen
Dim i As Integer, n As Integer, k As Integer
Dim FilterArr() As Variant, FilterCounter As Integer
Dim findOk As Boolean
Dim wks As Worksheet
'Variablen definieren
Set wks = Worksheets("Tabelle1")
findOk = False
FilterCounter = 0
ReDim FilterArr(1)
'Autofilter einschalen
wks.Cells(1, 1).Select
If Selection.AutoFilter = False Then
Selection.AutoFilter = True
End If
'in Zeile 1 steht die Überschrift
For i = 2 To wks.Cells(65536, 1).End(xlUp).Row
findOk = False
If FilterCounter = 0 Then
FilterArr(FilterCounter) = wks.Cells(i, 1)
FilterCounter = FilterCounter + 1
Else
For n = 0 To UBound(FilterArr)
If FilterArr(n) = wks.Cells(i, 1) Then
findOk = True
Exit For
End If
Next n
'Aufnahme des Wertes in den Array
If findOk = False Then
FilterArr(FilterCounter) = Cells(i, 1)
FilterCounter = FilterCounter + 1
ReDim Preserve FilterArr(UBound(FilterArr) + 1)
End If
End If
Next i
'Filtern nach den einzelnen Einträgen in Spalte A
'und das Filterergebnis ausdrucken
For i = 0 To UBound(FilterArr) - 1
Selection.AutoFilter Field:=1, Criteria1:=FilterArr(i)
'ActiveSheet.PrintOut
MsgBox "Check Ergebnis"
Selection.AutoFilter Field:=1
Next i
End Sub

Damit wird nach den einzelnen Vorkommen in spalte A gefiltert und dann ausgedruckt.
Die Msgbox kannst du löschen und das "ActiveSheet.Printout" aktivieren wenn du wirklich drucken willst
Gruss Rainer
Anzeige
AW: Mit VBA zwei Spalten filtern
18.01.2004 23:37:37
Schroedi
Danke, für Deine Mühe, Rainer!
Jetzt bekomme ich den Fehler: "Laufzeitfehler: 13 Typen unvertäglich" in der Zeile: "If FilterArr(n) = wks.Cells(i, 1) Then".
Was bedeutet das?
Filtert das Script denn auch erst nach Spalte A und innerhalb von A die Spalte C?
Besten Dank, Carsten.
AW: Mit VBA zwei Spalten filtern
19.01.2004 08:40:10
Ramses
Hallo
Den Fehler kann ich nicht nachvollziehen. Muss mal heute abend schauen.
Was meinst du mit:
"...Filtert das Script denn auch erst nach Spalte A und innerhalb von A die Spalte C?..:"
Erkläre das mal genauer
Gruss Rainer
AW: Mit VBA zwei Spalten filtern
19.01.2004 18:57:56
Carsten
Hallo nochmal,
ich habe das Problem mittlerweile anders gelöst. Habe eingesehen, dass es so, wie ich es wollte, wohl nicht funktioniert...
Trotzdem nochmal vielen Dank!!!
Carsten.
Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige