Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
264to268
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
264to268
264to268
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Auto-Filter für mehrere Spalten, aber nicht alle

Auto-Filter für mehrere Spalten, aber nicht alle
11.06.2003 11:40:55
Falk
Hallo zusammen,

ich habe diesmal folgendes Problem:

ich habe die Spalten A bis R belegt und möchte, das über einen Filter in den Spalten D und H die Anzeige eingeschränkt wird. Dabei sollen die Filter auch noch voneinander unabhängig sein.

Bisher habe ich es bloß geschafft, das ich für jede Spalte einen Filter habe, aber da ich wirklich nur die beiden brauche... ihr kennt den Rest.

Für eure Hilfe bin ich dankbar!

Greetz,
Falk

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Auto-Filter für mehrere Spalten, aber nicht alle
11.06.2003 12:36:51
Yvonne

Hallo Falk,

meines Wissens ist es nicht möglich, Autofilter für einen nicht zusammenhängenden Bereich zu definieren. Kannst du die zwei spalten nicht vielleicht irgendwie nebeneinander bringen? Dann könnstest du einen Autofilter darüber legen, indem du zunächst die beiden Spalten markierst und dann den Autofilter setzt.

Außerdem verstehe ich nicht ganz, was du damit meinst, dass die Filter voneinander unabhängig sein sollen. Wenn du eine Spalte filterst, kannst du in einer anderen Spalte nur aufgrund der gefilterten Daten weiter filtern.

Gruß, Yvonne

Re: Auto-Filter für mehrere Spalten, aber nicht alle
11.06.2003 12:56:04
Falk

Hallo Yvonne,

mit unabhängig meinte ich bloß, das ich die komplette Liste sowohl mit dem einen als auch mit dem anderen Filter eingeschränkt werden kann und diese Einschränkung ggf. mit dem anderen Filter weiter verfeinert werden kann. Also eigentlich ein unnötiger Einwurf meinerseits.

Mein Problem ist, das ich diese Spalten nicht nebeneinander bringen kann. Die enthaltenen Daten werden 1:1 so importiert und sollen eben nach diesen Beiden Kriterien manuell weiterverarbeitet werden. Vielleicht gibts ein Makro dazu? Keine Ahnung...

Anzeige
Re: Auto-Filter für mehrere Spalten, aber nicht alle
11.06.2003 18:11:35
Nepumuk

Hallo Falk,
das geht natürlich mit einem Programm. Du musst nur versuchen zu beschreiben, was es machen soll.
Gruß
Nepumuk

Re: Auto-Filter für mehrere Spalten, aber nicht alle
13.06.2003 07:48:47
Falk

naja, wie gesagt:

es soll funktionieren wie ein autofilter der die spalten C und H (jeweils ab zeile 14 bis irgendwo) filtern soll.

eben ein autofilter auf den spalten C und H...

Re: Auto-Filter für mehrere Spalten, aber nicht alle
13.06.2003 09:01:21
Nepumuk

Hallo Falk,
brauchst du die Funktionen benuterdefiniert und Top10?
Gruß
Nepumuk

Re: Auto-Filter für mehrere Spalten, aber nicht alle
13.06.2003 09:49:02
Falk

Hallo Nepumuk,

es reicht eigentlich das man auswählen kann was in der spalte notiert ist, in meinem fall 4 verschiedene kennziffern (alphanumerisch).

Greetz

Anzeige
Re: Auto-Filter für mehrere Spalten, aber nicht alle
13.06.2003 14:19:36
Nepumuk

Hallo Falk,
das wurde dann doch etwas größer wie angenommen.


'In das Klassenmodul "DieseArbeitsmappe":

Option Explicit

Private Sub Workbook_Open()
    Set Ws = Worksheets(1)
    Rows.Hidden = False
    If Ws.Cells(65536, 3).End(xlUp).Row + 13 > Ws.Cells(65536, 8).End(xlUp).Row + 13 _
    Then letzte = Ws.Cells(65536, 3).End(xlUp).Row + 13 Else letzte = Ws.Cells(65536, 8).End(xlUp).Row + 13
    LListe1 = Ws.Range("C14:C" & CStr(letzte))
    LListe2 = Ws.Range("H14:H" & CStr(letzte))
    Filterstart
    Worksheets(1).ComboBox1.Value = "alle"
    Worksheets(1).ComboBox2.Value = "alle"
    Worksheets(1).ComboBox1.BackColor = RGB(255, 255, 255)
    Worksheets(1).ComboBox2.BackColor = RGB(255, 255, 255)
End Sub


'In das Klassenmodul von Tabelle1:

Option Explicit

Private Sub ComboBox1_Change()
    Dim Zeile As Long
    Application.ScreenUpdating = False
    If ComboBox1.Value = "alle" Then
        ComboBox1.BackColor = RGB(255, 255, 255)
        If ComboBox2.Value = "alle" Then
            Rows.Hidden = False
        Else
            For Zeile = letzte - 13 To Step -1
                If ComboBox2.Value = CStr(LListe2(Zeile, 1)) Then Rows(Zeile + 13).Hidden = False
            Next
        End If
    Else
        ComboBox1.BackColor = RGB(204, 255, 255)
        If ComboBox2.Value = "alle" Then
            For Zeile = letzte - 13 To Step -1
                If ComboBox1.Value <> CStr(LListe1(Zeile, 1)) Then Rows(Zeile + 13).Hidden = True Else Rows(Zeile + 13).Hidden = False
            Next
        Else
            For Zeile = letzte - 13 To Step -1
                If ComboBox1.Value <> CStr(LListe1(Zeile, 1)) And ComboBox2.Value = CStr(LListe2(Zeile, 1)) Then Rows(Zeile + 13).Hidden = True
            Next
        End If
    End If
    Application.ScreenUpdating = True
    Filterstart
End Sub

Private Sub ComboBox2_Change()
    Dim Zeile As Long
    Application.ScreenUpdating = False
    If ComboBox2.Value = "alle" Then
        ComboBox2.BackColor = RGB(255, 255, 255)
        If ComboBox1.Value = "alle" Then
            Rows.Hidden = False
        Else
            For Zeile = letzte - 13 To Step -1
                If ComboBox1.Value = CStr(LListe1(Zeile, 1)) Then Rows(Zeile + 13).Hidden = False
            Next
        End If
    Else
        ComboBox2.BackColor = RGB(204, 255, 255)
        If ComboBox1.Value = "alle" Then
            For Zeile = letzte - 13 To Step -1
                If ComboBox2.Value <> CStr(LListe2(Zeile, 1)) Then Rows(Zeile + 13).Hidden = True Else Rows(Zeile + 13).Hidden = False
            Next
        Else
            For Zeile = letzte - 13 To Step -1
                If ComboBox2.Value <> CStr(LListe2(Zeile, 1)) And ComboBox1.Value = CStr(LListe1(Zeile, 1)) Then Rows(Zeile + 13).Hidden = True
            Next
        End If
    End If
    Application.ScreenUpdating = True
    Filterstart
End Sub


'In ein "normales" Modul:

Option Explicit
Option Private Module
Option Base 1

Public feld1() As String, feld2() As String, LListe1() As Variant, LListe2() As Variant
Public letzte As Long, FListe1() As Variant, FListe2() As Variant, Ws As Worksheet

Public Sub Filterstart()
    Dim Zeile1 As Long, Zeile2 As Long
    ReDim FListe1(letzte)
    ReDim FListe2(letzte)
    For Zeile1 = 14 To letzte - 13
        If Not Rows(Zeile1).Hidden Then
            Zeile2 = Zeile2 + 1
            FListe1(Zeile2) = Ws.Cells(Zeile1, 3)
        End If
    Next
    Zeile2 = 0
    For Zeile1 = 14 To letzte - 13
        If Not Rows(Zeile1).Hidden Then
            Zeile2 = Zeile2 + 1
            FListe2(Zeile2) = Ws.Cells(Zeile1, 8)
        End If
    Next
    Zeile2 = 0
    Call sortieren(1, UBound(FListe1), 1)
    Call sortieren(1, UBound(FListe2), 2)
    For Zeile1 = 1 To UBound(FListe1)
        If FListe1(Zeile1) <> "" And FListe1(Zeile1) <> Empty Then
            Zeile2 = Zeile2 + 1
            ReDim Preserve feld1(Zeile2)
            feld1(Zeile2) = FListe1(Zeile1)
            If Zeile2 > 1 Then
                If feld1(Zeile2 - 1) = feld1(Zeile2) Then
                    Zeile2 = Zeile2 - 1
                    ReDim Preserve feld1(Zeile2)
                End If
            End If
        End If
    Next
    Zeile2 = 0
    For Zeile1 = 1 To UBound(FListe2)
        If FListe2(Zeile1) <> "" And FListe2(Zeile1) <> Empty Then
            Zeile2 = Zeile2 + 1
            ReDim Preserve feld2(Zeile2)
            feld2(Zeile2) = FListe2(Zeile1)
            If Zeile2 > 1 Then
                If feld2(Zeile2 - 1) = feld2(Zeile2) Then
                    Zeile2 = Zeile2 - 1
                    ReDim Preserve feld2(Zeile2)
                End If
            End If
        End If
    Next
    Worksheets(1).ComboBox1.List = feld1
    Worksheets(1).ComboBox1.AddItem "alle", 0
    Worksheets(1).ComboBox2.List = feld2
    Worksheets(1).ComboBox2.AddItem "alle", 0
End Sub

Private Sub sortieren(Untergrenze As Long, Obergrenze As Long, liste As Integer)
    Dim index1 As Long, index2 As Long, Element As String, Zwischenspeicher As String
    index1 = Untergrenze
    index2 = Obergrenze
    If liste = 1 Then
        Zwischenspeicher = FListe1(((Untergrenze + Obergrenze) / 2) \ 1)
    Else
        Zwischenspeicher = FListe2(((Untergrenze + Obergrenze) / 2) \ 1)
    End If
    Do
        If liste = 1 Then
            Do While FListe1(index1) < Zwischenspeicher
                index1 = index1 + 1
            Loop
            Do While Zwischenspeicher < FListe1(index2)
                index2 = index2 - 1
            Loop
        Else
            Do While FListe2(index1) < Zwischenspeicher
                index1 = index1 + 1
            Loop
            Do While Zwischenspeicher < FListe2(index2)
                index2 = index2 - 1
            Loop
        End If
        If index1 <= index2 Then
            If liste = 1 Then
                Element = FListe1(index1)
                FListe1(index1) = FListe1(index2)
                FListe1(index2) = Element
            Else
                Element = FListe2(index1)
                FListe2(index1) = FListe2(index2)
                FListe2(index2) = Element
            End If
            index1 = index1 + 1
            index2 = index2 - 1
        End If
    Loop Until index1 > index2
    If Untergrenze < index2 Then Call sortieren(Untergrenze, index2, liste)
    If index1 < Obergrenze Then Call sortieren(index1, Obergrenze, liste)
End Sub


     Code eingefügt mit Syntaxhighlighter 2.1

Du benötigst in der Tabelle (ich bin mal von Tabelle1 ausgegangen) zwei Comboboxen aus der Steuerelemente-Toolbox. Die Mappe speichern, wieder öffnen (zur Initialisierung der Variable) und dann sollte es eigentlich funktionieren. Ansonsten schick ich dir eine funktionsfähige Mappe mal zu.
Gruß
Nepumuk


Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige