Thema Datum  Von Nutzer Rating
Antwort
10.12.2020 18:54:41 LittleBoy
NotSolved
13.12.2020 19:42:15 Ulrich
NotSolved
Rot Wert in Collection nach Timestamp + Buchtipps
13.12.2020 21:28:20 Ulrich
NotSolved
13.12.2020 22:20:39 XPOST
NotSolved

Ansicht des Beitrags:
Von:
Ulrich
Datum:
13.12.2020 21:28:20
Views:
459
Rating: Antwort:
  Ja
Thema:
Wert in Collection nach Timestamp + Buchtipps

So, beim Essen dachte ich mir, dass ich so eine konfuse Antwort nicht stehen lassen kann...

 

Hier mal dein Code ein wenig weiter entwickelt, wie ich das mit VBA machen würde:

Sub counter_anders()
 
Dim LastRow As Long
Dim Zle As Long
Dim Count_OK As Long
Dim bool As Boolean
Dim dicRow As Object        'Dictionary, Keys: Bauteilnummern aus C, Values: Index von Array data
Dim countBauteil As Long
Set dicRow = CreateObject("Scripting.Dictionary")
Dim data(1 To 100000, 1 To 3) As Variant        'Array für Ergebnisse (Nummer, letzter Timestamp, Entscheid)

countBauteil = 0     ' In VBA ist ein Long bereits mit 0 initialisiert, der Code liest sich aber besser.
LastRow = Range("C65536").End(xlUp).Row
For Zle = 1 To LastRow
    If Range("B" & Zle).Value Like "Anlage*" Then      'braucht es das? evtl. einfach in 2.Zeile starten
        If Not dicRow.Exists(Cells(Zle, 3).Text) Then
            countBauteil = countBauteil + 1
            dicRow.Add Cells(Zle, 3).Text, countBauteil
        End If
        
        If data(dicRow(Cells(Zle, 3).Text), 2) < CDate(Cells(Zle, 1)) Then         'ist Timestamp Maximum?
            data(dicRow(Cells(Zle, 3).Text), 1) = Cells(Zle, 3)                    'Nummer
            data(dicRow(Cells(Zle, 3).Text), 2) = CDate(Cells(Zle, 1))             'Timestamp
            data(dicRow(Cells(Zle, 3).Text), 3) = Cells(Zle, 4)                    'OK, NOK oder RW
        End If
    End If
Next

Range("K1").Resize(countBauteil, 3).Value = data

End Sub

 

Das ist jetzt noch nicht ganz "meine" Version, aber hier kannst du schön den Einsatz eines Dictionarys sehen und ein Array.

 

Integer vs. Long: meiner Meinung nach kommt es bei kleinen Skripten nicht auf Speicherplatzbedarf an (idR). Ein Long kann alles aufnehmen, was ein Integer aufnehmen kann, anders herum nicht. Ich verwende inzwischen (für Ganzzahlen) ausschließlich den Typ Long. Angeblich sind die Prozessoren auch für Long optimiert, sodass man sogar (leichte) Geschwindigkeitsvorteile hat, die habe ich selbst noch nicht versucht zu messen, da gibt es (auch in diesem Code) aber ganz andere Zeitfresser bei denen es sich mehr lohnt, Gedanken darauf zu verwenden. Ich benutze Long primär desshalb, weil ich dann nicht nachdenken muss und damit alle meine Code-Schnipsel zueinander passen:
Zum Beispiel kann bei aktuellen Excelversionen die Zeilennummer zu groß werden um sie in einer Integer-Variablen zu speichern. Allein das reicht mir schon, um den Typ Long zu benutzen => weniger fehleranfällig.

 

Du könntest das Dictionary mal mit early-binding deklarieren (https://excelmacromastery.com/vba-dictionary). Dann hilft dir auch Intellisense (https://www.online-excel.de/excel/singsel_vba.php?f=4). Es lohnt sich, das Tutorial zu lessen!

Grüße, Ulrich


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
10.12.2020 18:54:41 LittleBoy
NotSolved
13.12.2020 19:42:15 Ulrich
NotSolved
Rot Wert in Collection nach Timestamp + Buchtipps
13.12.2020 21:28:20 Ulrich
NotSolved
13.12.2020 22:20:39 XPOST
NotSolved