Filtern, Sortieren und in Spalte ersten 10 Zeilen ändern
#11
Ralf, ich trau mich kaum zu fragen Undecided ... bekomme einfach nicht mehr als eine Spalte hin. Kannst du mir den Code so umschreiben, damit wenigstens zwei Spalten in der Listbox angezeigt werden.

Code:
Private Sub CommandButton1_Click()
Dim Zelle As Range, arrTemp(), tmpCounter As Long        'Test1


'+--------------------------------------------------------------------------------------------------+
'|  Filtern über die Autifilter-Option.                                                             |
'+--------------------------------------------------------------------------------------------------+
'|  ErsteZelle      = 1. Zelle der zu filternden Datenbank.                                         |
'|  Spalte          = Spaltennummer der Datenbank, in welchem sich das Filterkriterium befindet.    |
'|  FilterKriterium = Filterkriterium nach welcher in der angegebenen Spalte gefiltert werden soll  |
'+--------------------------------------------------------------------------------------------------+
Range("A3").AutoFilter Field:=12, Criteria1:="<>"
Range("A3").AutoFilter Field:=13, Criteria1:="="
Range("A3").AutoFilter Field:=7, Criteria1:="="
    
  
'+---------------------------------------------------------------------------------------------+
'|  Sortiert Spalte H                                                                          |
'+---------------------------------------------------------------------------------------------+
Columns("H:H").Select
ActiveWorkbook.Worksheets("Tabelle1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").AutoFilter.Sort.SortFields.Add Key:= _
Range("H2:H10000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal

    With ActiveWorkbook.Worksheets("Tabelle1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    

    For Each Zelle In Intersect(Tabelle1.UsedRange.SpecialCells(xlCellTypeVisible), Tabelle1.Columns(1))                  'Test1
        ReDim Preserve arrTemp(tmpCounter)                                                                                'Test1
    'arrTemp(tmpCounter) = Zelle.Row                                                                                      'Test1
        arrTemp(tmpCounter) = Zelle.Value
        tmpCounter = tmpCounter + 1                                                                                       'Test1
    Next                                                                                                                  'Test1
    'MsgBox "Der Filter enthält " & UBound(arrTemp) & " von " & Tabelle1.UsedRange.Rows.Count - 1 & " Datensätzen!"       'Test1
    'MsgBox "erster Datensatz in Zeile: " & arrTemp(1) & vbLf & _
    '  "letzer Datensatz in Zeile: " & arrTemp(UBound(arrTemp))                                                           'Test1

For tmpCounter = 1 To UBound(arrTemp)
  UserForm1.ListBox1.AddItem arrTemp(tmpCounter)
Next

    

End Sub

Dankeschön!!!


Angehängte Dateien
.xlsm   Mappe1.xlsm (Größe: 44,14 KB / Downloads: 3)
Top
#12
Guten Morgen!
Ich dachte immer, ein Forum wäre dazu da, Nachfragen zu stellen. :21:
Ich gehe mal davon aus, dass Du .ColumnCount und .ColumnWidths der Listbox bereits in den Eigenschaften festgelegt hast.
Bleibe dabei, das Array mit den Zeilennummern zu füllen, das erleichtert einiges.
Die Listbox (bei mir drei Spalten) füllst Du dann folgendermaßen:
Code:
For tmpCounter = 1 To UBound(arrTemp)
  With Tabelle1.ListBox1
     .AddItem Tabelle1.Cells(arrTemp(tmpCounter), 1)
     .List(.ListCount - 1, 1) = Tabelle1.Cells(arrTemp(tmpCounter), 2)
     .List(.ListCount - 1, 2) = Tabelle1.Cells(arrTemp(tmpCounter), 3)
  End With
Next

Gruß und schönes WE,

Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#13
Hi!
Ich habe es Dir jetzt mal in den Code geschrieben.

Gruß Ralf


Angehängte Dateien
.xlsm   FilterInListBox.xlsm (Größe: 25,73 KB / Downloads: 5)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#14
Bin gerade nicht zuhause, aber ich sag schonmal vielen Dank Ralf und ein schönes Wochenende!
Top
#15
Zunächst habe ich eine Verständnisfrage, sehe ich das richtig, wenn ich bei der Listbox die Option "Liststyle = 1 - fmListStyleOption" wähle, dass ich dann beim "zurückschreiben" der Listbox in eine Tabelle keine Werte in die Spalte A schreiben kann? Habe das mit dem Code
Code:
Private Sub CommandButton4_Click()

Dim i As Integer
Dim rngAusgabe As Range


On Error Resume Next

Set rngAusgabe = Sheets("Tabelle3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)


With Me.ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then

rngAusgabe.Offset(-1, 1).Value = .Column(0, i)
rngAusgabe.Offset(-1, 2).Value = .Column(1, i)
rngAusgabe.Offset(-1, 3).Value = .Column(2, i)
rngAusgabe.Offset(-1, 4).Value = .Column(3, i)
rngAusgabe.Offset(-1, 8).Value = WorksheetFunction.Proper(ComboBox1.Text)

Set rngAusgabe = rngAusgabe.Offset(1, 0)


End If
Next i
End With
Set rngAusgabe = Nothing
End Sub

Probiert, es wollte mir aber nicht gelingen. Wie gesagt reine Verständnisfrage.

Mein eigentliches Problem, eher zwei. Erstens, gibt es eine Möglichkeit, wenn ich in der Listbox (mit der Option "Liststyle = 1 - fmListStyleOption" ausgestattet) einen oder mehrere Werte auswähle, dass er mir alle Werte mit gleichem Wert in einer Spalte (bei mir Spalte B) mit makiert? Und wie bekomme ich meine ausgewählten Zeilen, mit einer Änderung über eine ComboBox (soll einen neuen Wert für eine Spalte zuweisen, bei mir Spalte G) zurück in meine Ausgangstabelle schreibt? Hab das mit der rngfind-Methode probiert, aber das will irgendwie nicht.

Vielen Dank und schönen Abend allseits!
Sandor


Angehängte Dateien
.xlsm   FilterInListBox.xlsm (Größe: 41,22 KB / Downloads: 3)
Top
#16
Hi!
Bevor ich darauf eingehe:
Code:
On Error Resume Next
... ist das dämlichste, bescheuertste, unfassbarste (kann man dies steigern?), was man einem Makro - egal ob in der Entwicklung oder erst Recht im laufenden Betrieb - antun darf! (hier folgen noch ca. 10 "!")
(Es gibt Ausnahmen, aber nur dann, wenn ich weiß, dass das Makro abfliegen wird/muss!)
Lasse es weg und zeige mir die Zeile des Fehlers nebst Beschreibung.
Ich sehe keine Range().Find-Methode!
Und was bedeutet die zweite Dimension bei: .Column(0, i)?
(zumal die erste (und einzige) Dimension per .Columns(i) angesprochen werden sollte)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#17
Code:
On Error Resume Next
Undecided ... hab ich in meiner Datei gleich gelöscht. Das ist einfach die Unwissenheit... Gleich gegoogelt und nun weiß ich, dass das Teufelszeug ist.

Habe den Code mit der "Range().Find-Methode" weggelassen, bevor ich dafür kloppe bekomme. Habe ich ja trotzdem Blush ... Ohne die Lösung schon zu verraten Ralf, entnehme ich daraus das es eigentlich über die Schiene laufen sollte? Und das zweite, ich muss mir dann wohl das mit dem "Array" nochmal anschauen? Befüllen des Selbigen und mein Versuch die Daten wieder zurückzuschreiben bzw. mein Wunsch passen nicht zusammen?

Stichworte wären nochmal hilfreich. Dann weiß ich wonach ich schauen muss.
Top
#18
Ich weiß nicht, ob ich irgendwas falsches geschrieben haben oder und jemanden, insbesondere hier Ralf, auf den Schlips getreten bin, falls dem so sein sollte Ralf, dass war ganz und gar nicht meine Absicht und dann bitte ich um Entschuldigung. Ich kann nur noch einmal deutlich schreiben, dass ich keine Ahnung habe von VBA und meine Versuche sich bisher eher Schlecht als Recht gestalten, aber das Ganze ist ein privates Projekt und habe leider nicht die Zeit, die ich mir hierfür wünschen würde. Daher mein Versuch auch mittels Eurer Hilfe das Projekt abzuschließen. Vielleicht bin ich zu ungeduldig, dann bitte ich mir auch das nachzusehen. Ich habe in den vergangenen Tagen gesucht, aber nichts erhellendes für die Fragestellung gefunden.

Jetzt wollte ich schon versuchen das Pferd ganz anderes aufzuzäumen, die "geänderten" Zeilen aus der Listbox an das Ende der Tabelle zu stellen, um dann ggf. in einem weiteren Schritt die doppelten Einträge ohne einen Wert in Spalte H herauszufiltern. Vielleicht gibt es aber doch einen einfacheren Weg?

Code:
Private Sub CommandButton4_Click()

Dim i As Integer
Dim rngAusgabe As Range

Set rngAusgabe = Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
rngAusgabe = ActiveCell.Row + 1

With Me.ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then

rngAusgabe.Offset(0, 0).Value = .Column(0, i)
rngAusgabe.Offset(0, 1).Value = .Column(1, i)
rngAusgabe.Offset(0, 2).Value = .Column(2, i)
rngAusgabe.Offset(0, 3).Value = .Column(3, i)
rngAusgabe.Offset(0, 6).Value = WorksheetFunction.Proper(ComboBox1.Text)

Set rngAusgabe = rngAusgabe.Offset(1, 0)


End If
Next i
End With

Set rngAusgabe = Nothing
End Sub


Private Sub CommandButton5_Click()
Selection.AutoFilter
    Columns("A:A").Select
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range("A2:A52" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Tabelle1").Sort
        .SetRange Range("A1:Q52")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Hoffe Ihr könnt mir sagen/schreiben, was ich im Bereich CommandButton 4 ändern müsste, dass bestehende Zeilen gesucht und überschrieben werden.

Allen ein schönes Wochenende


Angehängte Dateien
.xlsm   FilterInListBox3.xlsm (Größe: 45,26 KB / Downloads: 5)
Top
#19
Hallo,

wie änderst Du in der Listbox die Werte?
Gruß Stefan
Win 10 / Office 2016
Top
#20
(15.08.2015, 11:02)Steffl schrieb: Hallo,

wie änderst Du in der Listbox die Werte?

Hallo Stefan,

die Listbox soll nur dazu dienen, dass man die Werte auswählt. Die ComboBox soll je ausgewählter Zeile in der Listbox nur einen Wert ändern, aber dann eben für alle gewählten Zeilen entsprechend der Auswahl in der Combobox und in die jeweilige Zeile in Spalte H schreiben. Also in der Listbox soll sich demnach nichts ändern. Beim nächsten Suchlauf fallen die mit neuem Wert in Spalte H geänderten Werte raus, weil die die Bedingung nicht mehr leer erfüllen. Obiger Code diente mir nur dazu, damit ich sehe, er speichert mir was. Tatsächlich brauche ich nur die Möglichkeit, dass er mir bei ausgewählten Zeilen dann der Wert in Spalte H ändert.

Grüße
Sandor
Top


Gehe zu:


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