Supportnet / Forum / Tabellenkalkulation
Zeilen und Spalten filtern
Frage
Hallo an alle Excel-Freaks
Ich habe hier im Supportnet ein Makro gefunden, mit dem ich Spalten und Zeilen filtern kann.
Um das Makro für meine Dateien zu gebrauchen, müssten noch Änderungen gemacht werden.
1. Wie müßte das unten stehende Makro aussehen, wenn einerseits die Spalte A oder andererseits die Zeile 1 micht mitgefiltert werden soll.
2. Kann man mehrere verschiedene Daten gleichzeitig filtern? Z.B. Nägel und Schrauben!
Vielen Dank schon mal
inselgerd
Sub Spaltenfilter()
Option Explicit
Sub makro01()
Application.EnableEvents = False
Dim LastCell
Dim spaltende, zeilende
Dim zaehler1, zaehler2, zaehler3, wert01
If Range("A1:IV1").EntireColumn.Hidden = True Then
Range("A1:IV1").EntireColumn.Hidden = False
End
End If
Range("A1:IV1").EntireColumn.Hidden = False
wert01 = InputBox("Kreterium")
If wert01 = "" Then End
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
spaltende = LastCell.Column
zeilende = LastCell.Row
For zaehler1 = 1 To spaltende
For zaehler2 = 1 To zeilende
If Cells(zaehler2, zaehler1) = wert01 Then
zaehler3 = 1
zaehler2 = zeilende
End If
Next zaehler2
If zaehler3 = 0 Then
Cells(1, zaehler1).EntireColumn.Hidden = True
End If
zaehler3 = 0
Next zaehler1
Application.EnableEvents = True
End Sub
[*][sup][i]
*Threadedit*
Admininfo: Bitte beachte [u][url=https://supportnet.de/groupfaqs/3]FAQ 2[/url][/u] für deine nächste Anfrage, und reiche in dieser Anfrage ergänzende Angaben nach.[/i][/sup]
Antwort 1 von nighty
hi gerd :-)
wie gewuenscht fuer die spalten
gruss nighty
spaltenfilter in wechselwirkung
mehrere kreterien angebbar ,durch leerzeichen getrennt
z.b.
1 kreterium
Schraube
2 kreterien
schraube holz
3 kreterien
schraube holz putz
usw.
wie gewuenscht fuer die spalten
gruss nighty
spaltenfilter in wechselwirkung
mehrere kreterien angebbar ,durch leerzeichen getrennt
z.b.
1 kreterium
Schraube
2 kreterien
schraube holz
3 kreterien
schraube holz putz
usw.
Option Explicit
Sub makro01()
Application.EnableEvents = False
Dim spaltende As Integer
Dim zaehler1 As Integer
Dim zaehler2 As Integer
Dim zaehler3 As Integer
Dim spalten As Integer
Dim EinGabe As String
ReDim sammel(1) As String
ReDim zaehler4(spalten) As Boolean
spalten = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
With ActiveSheet
If .Range("B1:IV1").EntireColumn.Hidden = True Then
.Range("B1:IV1").EntireColumn.Hidden = False
End
End If
EinGabe = InputBox("Eingabe des Monats")
zaehler2 = 1
For zaehler1 = 1 To Len(EinGabe)
If Mid(EinGabe, zaehler1, 1) <> " " Then
sammel(zaehler2) = sammel(zaehler2) + Mid(EinGabe, zaehler1, 1)
Else
zaehler2 = zaehler2 + 1
ReDim Preserve sammel(zaehler2)
End If
Next zaehler1
.Range("B1:IV1").EntireColumn.Hidden = False
For zaehler1 = 2 To spalten
For zaehler3 = 1 To zaehler2
If UCase(Cells(1, zaehler1)) <> UCase(sammel(zaehler3)) And zaehler4(zaehler1) = 0 Then
.Cells(1, zaehler1).EntireColumn.Hidden = True
Else
.Cells(1, zaehler1).EntireColumn.Hidden = False
zaehler4(zaehler1) = 1
End If
Next zaehler3
Next zaehler1
End With
Application.EnableEvents = True
End SubAntwort 2 von nighty
hi gerd :-)
ups korrigiert :-))
gruss nighty
ups korrigiert :-))
gruss nighty
Option Explicit
Sub makro01()
Application.EnableEvents = False
Dim spaltende As Integer
Dim zaehler1 As Integer
Dim zaehler2 As Integer
Dim zaehler3 As Integer
Dim spalten As Integer
Dim EinGabe As String
ReDim sammel(1) As String
spalten = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
ReDim zaehler4(spalten) As Boolean
With ActiveSheet
If .Range("B1:IV1").EntireColumn.Hidden = True Then
.Range("B1:IV1").EntireColumn.Hidden = False
End
End If
EinGabe = InputBox("Eingabe des Monats")
zaehler2 = 1
For zaehler1 = 1 To Len(EinGabe)
If Mid(EinGabe, zaehler1, 1) <> " " Then
sammel(zaehler2) = sammel(zaehler2) + Mid(EinGabe, zaehler1, 1)
Else
zaehler2 = zaehler2 + 1
ReDim Preserve sammel(zaehler2)
End If
Next zaehler1
.Range("B1:IV1").EntireColumn.Hidden = False
For zaehler1 = 2 To spalten
For zaehler3 = 1 To zaehler2
If UCase(Cells(1, zaehler1)) <> UCase(sammel(zaehler3)) And zaehler4(zaehler1) = 0 Then
.Cells(1, zaehler1).EntireColumn.Hidden = True
Else
.Cells(1, zaehler1).EntireColumn.Hidden = False
zaehler4(zaehler1) = 1
End If
Next zaehler3
Next zaehler1
End With
Application.EnableEvents = True
End SubAntwort 3 von nighty
hi all :-)
war noch immer ein fehler drin ,das einblenden geht nur spaltenweise nicht in einem rutsch :-)
gruss nighty
jetzt muesste aber :-))
war noch immer ein fehler drin ,das einblenden geht nur spaltenweise nicht in einem rutsch :-)
gruss nighty
jetzt muesste aber :-))
Sub makro01()
Application.EnableEvents = False
Dim spaltende As Integer
Dim zaehler1 As Integer
Dim zaehler2 As Integer
Dim zaehler3 As Integer
Dim zaehler5 As Integer
Dim spalten As Integer
Dim EinGabe As String
ReDim sammel(1) As String
spalten = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
ReDim zaehler4(spalten) As Boolean
With ActiveSheet
For zaehler1 = 1 To 255
If .Cells(1, zaehler1).EntireColumn.Hidden = True Then
.Cells(1, zaehler1).EntireColumn.Hidden = False
zaehler5 = 1
End If
Next zaehler1
If zaehler5 = 1 Then End
EinGabe = InputBox("Eingabe des Monats")
zaehler2 = 1
For zaehler1 = 1 To Len(EinGabe)
If Mid(EinGabe, zaehler1, 1) <> " " Then
sammel(zaehler2) = sammel(zaehler2) + Mid(EinGabe, zaehler1, 1)
Else
zaehler2 = zaehler2 + 1
ReDim Preserve sammel(zaehler2)
End If
Next zaehler1
For zaehler1 = 2 To spalten
For zaehler3 = 1 To zaehler2
If UCase(Cells(1, zaehler1)) <> UCase(sammel(zaehler3)) And zaehler4(zaehler1) = 0 Then
.Cells(1, zaehler1).EntireColumn.Hidden = True
Else
.Cells(1, zaehler1).EntireColumn.Hidden = False
zaehler4(zaehler1) = 1
End If
Next zaehler3
Next zaehler1
End With
Application.EnableEvents = True
End SubAntwort 4 von inselgerd
Hallo nighty
Vielen Dank für deine Hilfe.
Ich kann leider mit den Daten in einem Makro nichts anfangen. Das sind für mich Bömische Wälder.
Zur Erklärung meiner Exceltabelle:
In der Spalte C4 - C~ stehen Namen. In den Spalten ab D4 - D~ stehen Daten, z.B. Apfel, in Spalte E4 - E~ stehen Birnen, in Spalte F4 - F~ stehen Melonen usw.
Nun kann es sein, dass die Person in C4 den Eintrag in D4 Apfel stehen hat, die Person in C5 hat keine weiteren Eintragungen in der entsprechenden Zeile. Die Person in C6 hat aber in D6 Apfel und in F6 Melone stehen.
Nun meine Idee: Die Spalten A - C und die Zeilen 1 - 3 sollen vom filtern ausgenommen werden.
Wenn ich jetzt alle Personen, die in dihrer Zeile ein Apfel stehen haben angezeigt haben will, sollen die anderen Zeilen und Spalten ausgeblendet werden.
Außerdem kann es sein, dass ich z.B. Apfel und Melone filtern möchte. Geht das und wie muß ich das eingeben.
Ich weiß. dass es eine chaotische Tabelle ist und wenn du noch Informationen brauchst, das kriege ich hin.
Vielen Dank für dein Bemühen
inselgerd
Vielen Dank für deine Hilfe.
Ich kann leider mit den Daten in einem Makro nichts anfangen. Das sind für mich Bömische Wälder.
Zur Erklärung meiner Exceltabelle:
In der Spalte C4 - C~ stehen Namen. In den Spalten ab D4 - D~ stehen Daten, z.B. Apfel, in Spalte E4 - E~ stehen Birnen, in Spalte F4 - F~ stehen Melonen usw.
Nun kann es sein, dass die Person in C4 den Eintrag in D4 Apfel stehen hat, die Person in C5 hat keine weiteren Eintragungen in der entsprechenden Zeile. Die Person in C6 hat aber in D6 Apfel und in F6 Melone stehen.
Nun meine Idee: Die Spalten A - C und die Zeilen 1 - 3 sollen vom filtern ausgenommen werden.
Wenn ich jetzt alle Personen, die in dihrer Zeile ein Apfel stehen haben angezeigt haben will, sollen die anderen Zeilen und Spalten ausgeblendet werden.
Außerdem kann es sein, dass ich z.B. Apfel und Melone filtern möchte. Geht das und wie muß ich das eingeben.
Ich weiß. dass es eine chaotische Tabelle ist und wenn du noch Informationen brauchst, das kriege ich hin.
Vielen Dank für dein Bemühen
inselgerd
Antwort 5 von nighty
hi gerd :-)
schick eine mustertabelle mit beispiel an
oberley@t-online.de
mit aussagefaehigen betreff bitte :-))
gruss nighty
schick eine mustertabelle mit beispiel an
oberley@t-online.de
mit aussagefaehigen betreff bitte :-))
gruss nighty
Antwort 6 von nighty
hi all :-)
und noch fuer die datenbank :-)
ein spalten verbundener zeilen filter
eingabe erlaubt soviele begriffe getrennt durch ein leerzeichen wie eine inputbox aufnehmen kann
gruss nighty
Option Explicit
Sub Filter()
Call EventsOff
Dim EinGabe As String
ReDim sammel(1) As String
Dim zeilen0 As Integer, zeilen1 As Long, zaehler1 As Integer, zaehler2 As Integer, zaehler3 As Integer, zaehler4 As Integer, zaehler6 As Integer
Dim spalten0 As Integer, spalten1 As Integer
Rem hier deinen filterbereich festlegen
Rem von bis
zeilen0 = 4
zeilen1 = 20
Rem von bis
spalten0 = 4
spalten1 = 9
With ActiveSheet
For zaehler1 = zeilen0 To zeilen1
.Rows(zaehler1 & ":" & zaehler1).EntireRow.Hidden = False
Next zaehler1
For zaehler1 = spalten0 To spalten1
.Cells(1, zaehler1).EntireColumn.Hidden = False
Next zaehler1
EinGabe = InputBox("Eingabe des Obstes")
If EinGabe = "" Then End
zaehler4 = 1
For zaehler1 = 1 To Len(EinGabe)
If Mid(EinGabe, zaehler1, 1) <> " " Then
sammel(zaehler4) = sammel(zaehler4) + Mid(EinGabe, zaehler1, 1)
Else
zaehler4 = zaehler4 + 1
ReDim Preserve sammel(zaehler4)
End If
Next zaehler1
For zaehler1 = zeilen0 To zeilen1
For zaehler2 = spalten0 To spalten1
For zaehler3 = 1 To zaehler4
If UCase(Cells(zaehler1, zaehler2)) = UCase(sammel(zaehler3)) Then
zaehler6 = zaehler6 + 1
End If
Next zaehler3
Next zaehler2
If zaehler6 = 0 Then
.Rows(zaehler1 & ":" & zaehler1).EntireRow.Hidden = True
Else
zaehler6 = 0
End If
Next zaehler1
zaehler6 = 0
For zaehler1 = spalten0 To spalten1
For zaehler2 = zeilen0 To zeilen1
For zaehler3 = 1 To zaehler4
If UCase(Cells(zaehler2, zaehler1)) = UCase(sammel(zaehler3)) Then
zaehler6 = zaehler6 + 1
End If
Next zaehler3
Next zaehler2
If zaehler6 = 0 Then
.Cells(1, zaehler1).EntireColumn.Hidden = True
Else
zaehler6 = 0
End If
Next zaehler1
End With
Call EventsOn
End Sub
Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
und noch fuer die datenbank :-)
ein spalten verbundener zeilen filter
eingabe erlaubt soviele begriffe getrennt durch ein leerzeichen wie eine inputbox aufnehmen kann
gruss nighty
Option Explicit
Sub Filter()
Call EventsOff
Dim EinGabe As String
ReDim sammel(1) As String
Dim zeilen0 As Integer, zeilen1 As Long, zaehler1 As Integer, zaehler2 As Integer, zaehler3 As Integer, zaehler4 As Integer, zaehler6 As Integer
Dim spalten0 As Integer, spalten1 As Integer
Rem hier deinen filterbereich festlegen
Rem von bis
zeilen0 = 4
zeilen1 = 20
Rem von bis
spalten0 = 4
spalten1 = 9
With ActiveSheet
For zaehler1 = zeilen0 To zeilen1
.Rows(zaehler1 & ":" & zaehler1).EntireRow.Hidden = False
Next zaehler1
For zaehler1 = spalten0 To spalten1
.Cells(1, zaehler1).EntireColumn.Hidden = False
Next zaehler1
EinGabe = InputBox("Eingabe des Obstes")
If EinGabe = "" Then End
zaehler4 = 1
For zaehler1 = 1 To Len(EinGabe)
If Mid(EinGabe, zaehler1, 1) <> " " Then
sammel(zaehler4) = sammel(zaehler4) + Mid(EinGabe, zaehler1, 1)
Else
zaehler4 = zaehler4 + 1
ReDim Preserve sammel(zaehler4)
End If
Next zaehler1
For zaehler1 = zeilen0 To zeilen1
For zaehler2 = spalten0 To spalten1
For zaehler3 = 1 To zaehler4
If UCase(Cells(zaehler1, zaehler2)) = UCase(sammel(zaehler3)) Then
zaehler6 = zaehler6 + 1
End If
Next zaehler3
Next zaehler2
If zaehler6 = 0 Then
.Rows(zaehler1 & ":" & zaehler1).EntireRow.Hidden = True
Else
zaehler6 = 0
End If
Next zaehler1
zaehler6 = 0
For zaehler1 = spalten0 To spalten1
For zaehler2 = zeilen0 To zeilen1
For zaehler3 = 1 To zaehler4
If UCase(Cells(zaehler2, zaehler1)) = UCase(sammel(zaehler3)) Then
zaehler6 = zaehler6 + 1
End If
Next zaehler3
Next zaehler2
If zaehler6 = 0 Then
.Cells(1, zaehler1).EntireColumn.Hidden = True
Else
zaehler6 = 0
End If
Next zaehler1
End With
Call EventsOn
End Sub
Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub

