Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
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 Letztes Vorkommen eines Wertes ermit

VBA Letztes Vorkommen eines Wertes ermit
23.01.2023 09:48:48
Thomas
Hallo, ich möchte in einer (sortierten) Spalte in der verschiedene Werte mehrmals in unterschiedlicher Anzahl vorkommen können in einer Schleife immer das jeweils letzte Vorkommen abfragen, dazu hatte ich mir überlegt das über Find zu lösen, in Form von
Set rngKST = tblDaten.Columns(5).Find(tblDaten.Cells(lngFind, 5), , xlValues, xlWhole, , xlPrevious)
Wobei lngFind immer mit der ermittelten Zeile + 1 dann gesetzt würden.

Allerdings ermittelt mir das find nur die letzte nicht ausgeblendete Zeile, allerdings gibt es auch noch ausgeblendete Zeilen die mit berücksichtigt werden müssten, wie könnte ich das machen?
Danke

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Letztes Vorkommen eines Wertes ermit
23.01.2023 10:14:53
Daniel
Hi
Wenn die Spalte aufsteigend sortiert ist, kannst du die Positionsnummer/Zeilennummer des letzten Vorkommens eines Wertes mit der Funktion Vergleich ermitteln, wenn du den dritten Parameter auf 1 setzt. Ein- oder ausgeblendet ist für die Excelfunktionen unwichtig.
In VBA kannst du sie so nutzen:
lngFind = Application.Match(tblDaten.Cells(lngFind, 5), tblDaten.Columns(5), 1) + 1
Gruß Daniel
AW: VBA Letztes Vorkommen eines Wertes ermit
23.01.2023 10:55:41
Thomas
Hallo Daniel,
danke für die schnelle Rückmeldung,
ich glaube mein Problem an der stelle ist, das der Wert "lngFind" hier
Application.Match(tblDaten.Cells(lngFind, 5)
sich ja eigentlich Variable aus dem letzten Vorkommen des jeweiligen Wertes definieren soll und da stehe ich mir etwas auf dem Schlauch.
Die Schleife die durchläuft wird auf grunde von Daten aus einem anderen Tabellenblatt gesteuert, daher kann ich den Zähler hierfür nicht nutzen.
Im Anhang eine kurze Beispieldatei, hier müsste einmal 4 für das letzte mal "Köln", 5 für "Bonn" 9 für "München" und 11 für "Kiel"
rauskommen.
https://www.herber.de/bbs/user/157425.xlsm
Danke
MFG
Thomas
Anzeige
AW: VBA Letztes Vorkommen eines Wertes ermit
23.01.2023 11:16:05
Rudi
Hallo,
D2:D11: =AGGREGAT(14;6;ZEILE($C$2:$C$11)/($C$2:$C$11=C2);1)
Gruß
Rudi
AW: VBA Letztes Vorkommen eines Wertes ermit
23.01.2023 11:58:25
Daniel
Hi
Deine Beispieltabelle ist nicht aufsteigend sortiert, sondern nur gruppiert.
Gleiche Werte stehen zwar untereinander, aber die Gruppen sind nicht in der alphabetischen Reihenfolge.
Damit kann Application.Match mit 3. param = 1 nicht arbeiten.
Eine Möglichkeit wäre hier, Match mit 0 als dritten Parameter zu verwenden, um die das erste Vorkommen zu erhalten und dann mit CountIf zu ermitteln, wie oft der Wert vorkommen und dann beides zuammenaddieren:
Erste Zeile:
Application.Match("Köln", Columns(5), 0)
Letzte Zeile:
Application.Match("Köln", Columns(5), 0) + Worksheetfunction.CountIf(Columns(5), "Köln") - 1
Gruß Daniel
Anzeige
AW: VBA Letztes Vorkommen eines Wertes ermit
23.01.2023 10:51:38
Rudi
Hallo,
einfach die Daten in ein Array einlesen und mit ner Schleife von unten durch.
Sub aaa()
  Dim lngFind As Long
  For lngFind = 2 To 10
    MsgBox ZeileLetzterFund(tblDaten.Cells(lngFind, 5), tblDaten, 5)
  Next
End Sub
Function ZeileLetzterFund(SuchWert, SuchBlatt As Worksheet, SuchSpalte) As Long
  Dim arrTmp, i As Long, bolFound As Boolean
  
  arrTmp = SuchBlatt.Cells(1, 1).CurrentRegion.Columns(SuchSpalte)
  
  For i = UBound(arrTmp) To LBound(arrTmp) Step -1
    If CStr(arrTmp(i, 1)) = CStr(SuchWert) Then
      ZeileLetzterFund = i
      Exit For
    End If
  Next i
      
End Function
Gruß
Rudi
Anzeige
AW: VBA Letztes Vorkommen eines Wertes ermit
27.01.2023 09:32:47
Thomas
Hallo zusammen,
ich hab jetzt mal noch ein bisschen rumprobiert und glaube die für mich "beste" Lösung gefunden zu haben, indem ich die Daten über eine Schleife in ein Array einlese und nur eindeutige reinnehme.
Das ganze sieht jetzt so aus:
'Array mit Eindeutigen Werten füllen
    Dim arrOhneDuplikate As Variant
    Dim arrAusgangswerte As Variant
    Dim objdic As Object
    Dim lngI As Long
    
    Set objdic = CreateObject("Scripting.Dictionary")
    
    With tblDaten2022
       arrAusgangswerte = .Range(.Cells(2, 4), .Cells(Rows.Count, 1).End(xlUp)).Value
    End With
    
    For lngI = LBound(arrAusgangswerte, 1) To UBound(arrAusgangswerte, 1)
       If Not objdic.exists(arrAusgangswerte(lngI, 4)) Then _
          objdic.Add arrAusgangswerte(lngI, 4), 1
    Next lngI
    
    arrOhneDuplikate = objdic.keys
    
    Set objdic = Nothing
Wenn es verbesserungs Vorschläge gibt, bin ich da sehr offen für:-)
Vielen Dank für eure Unterstützung.
MFG
Thomas
Anzeige

20 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige