Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1692to1696
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
Inhaltsverzeichnis

VBA - letzten x selektieren

VBA - letzten x selektieren
03.06.2019 10:39:43
Fred

Hallo Excel/VBA Experten,
so laangsaam schreibe ich "eigene" VBA Lösungen,- sobald es "komplizierter wird", steh ich da, wie der Ochs vorm Berg".
Diesmal;
Ich selektiere Daten derzeit mit
Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Bereich As Range
If Target.Address = "$E$2" Then
LastBasis = Sheets("Basis").Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("Basis").Range("A10:FK" & LastBasis).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Sheets("Kriterien").Range("H1:I3")
End If
End Sub
Was ich allerdings möchte, das nur die letzten 20 Zeilen (Spiele) des ausgewählten Teams selektiert werden.
Zum besseren Verständnis, habe ich eine einfach gehaltene Arbeitsmappe angefügt.
https://www.herber.de/bbs/user/130155.xlsb
Könnte mir jemand aufzeigen, wie ich das umsetze?
Mit freundlichen Gruß
Fred Neumann

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - letzten x selektieren
03.06.2019 12:14:26
Luschi
Hallo Fred,
ich mache das so:

Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Bereich As Range, rgX As Range, _
LastBasis As Long, xAnz As Long, i As Long
If Target.Address = "$E$2" Then
LastBasis = Me.Cells(Rows.Count, 1).End(xlUp).Row + 1
Me.Range("A10:FK" & LastBasis).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Sheets("Kriterien").Range("H1:I3")
'alle sichbaren Zelle der 1. Spalte im Spezialfilter
Set Bereich = Me.Range("A10:FK" & LastBasis).Columns(1).SpecialCells(xlCellTypeVisible)
'Anzahl der gefilterten Datensätze (ohne Überschrift)
xAnz = Bereich.Count - 1
'nur die letzten 20 Datensätze sichbar!
For Each rgX In Bereich
If xAnz >= 20 Then
rgX.EntireRow.Hidden = True
xAnz = xAnz - 1
Else
Exit For
End If
Next rgX
Set Bereich = Nothing: Set rgX = Nothing
End If
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA - letzten x selektieren
03.06.2019 12:54:16
Fred
Hallo Luschi,
wenn du das so machst, mach ich das auch so :-)
Danke für deine Aufmerksamkeit, den Code und das er so super kommentiert ist,- sehr sehr hilfreich!!!
Gruß
Fred
AW: VBA - letzten x selektieren
03.06.2019 16:15:23
Luschi
Hallo Fred,
hier noch eine kleine Nachbearbeitung:

Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Bereich As Range, rgX As Range, rgFweg As Range, _
LastBasis As Long, xAnz As Long, i As Long
Const iAnzMax As Integer = 20
If Target.Address = "$E$2" Then
With Me
LastBasis = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Range("A10:FK" & LastBasis).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Worksheets("Kriterien").Range("H1:I3")
'alle sichbaren Zelle der 1. Spalte im Spezialfilter
Set Bereich = .Range("A10:FK" & LastBasis).Columns(1).SpecialCells( _
xlCellTypeVisible)
'Anzahl der gefilterten Datensätze (ohne Überschrift)
xAnz = Bereich.Count - 1
End With
'nur die letzten 20 Datensätze sichbar!
'erst alle von oben zuviel sichtbaren Zellen sammeln, da seit
'Excel 2013 jeder! Hidden-Befehl die Tabelle neu berechnet
For Each rgX In Bereich
If xAnz >= iAnzMax Then
If rgFweg Is Nothing Then
Set rgFweg = rgX
Else
Set rgFweg = Union(rgFweg, rgX)
End If
xAnz = xAnz - 1
Else
Exit For
End If
Next rgX
If Not (rgFweg Is Nothing) Then
'jetzt erst auf unsichtbar setzen
rgFweg.EntireRow.Hidden = True
End If
Set Bereich = Nothing: Set rgX = Nothing: Set rgFweg = Nothing
End If
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA - letzten x selektieren
03.06.2019 22:59:43
Daniel
Hi
ich würde dir hier eher zum Autofilter raten.
1. Füge deiner Tabelle eine Hilfsspalt mit folgender Formel hinzu: =ZÄHLENWENN(E11:F11;$E$2)*B11
also im Prinzip: =ZÄHLENWENN(HeimTeam:Gasteam;GesuchtesTeam)*Datum
2. Formatiere diese Spalte mit dem Zahlenformat Standard (Excel wird automatisch Datum annehmen, aber bei Datum gibt es die Filteroption Top-Ten nicht)
3. Filter jetzt in der Hilfsspalte, nachdem du die Mannschaft angegeben hast, nach den Top20 (findest du als Unterpunkt "Top10" im Kontextmenü "Zahlenfilter"
als Code reicht dann im Changeevent folgendes, das Blatt "Kriterien" kann entfallen.
Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$E$2" Then
ActiveSheet.Range("$A$10").AutoFilter Field:=168, Criteria1:="20", Operator:=xlTop10Items
End If
End Sub
168 ist die Spaltennummer der Hilfsspalte in meiner Beispieldatei.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige