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

Dictionary Items überschreiben

Dictionary Items überschreiben
12.12.2017 12:17:00
Sandro
Hallo
ich stehe leider vor einem Problem. Und zwar habe ich zum ausfüllen einer Matrix die Dictionary Funktion angewendet. Klappt soweit auch alles ganz gut bisher. Jetzt wollte ich aber bei der Erfassung der Daten in den Dictionary nicht nur Einträge erfassen die es bisher nicht gab sondern falls das neue Item kleiner als das bisherige Item im Dictionary ist dieses überschreiben.
Es handelt sich also um die Codezeilen

If dic.exists(a(i, 1))(a(i + 1, 1)) And a(i + 1, 3) dic.Item(a(i, 1))(a(i + 1, 1)) = a(i + 1, 3)
End If

die mir Probleme bereiten.
Hier noch der ganze Code

Option Explicit

Sub Matrix()
Dim a, i As Integer, j As Long, dic As Object, ws As Worksheet
Set dic = CreateObject("Scripting.Dictionary")
dic.CompareMode = 1
For Each ws In Worksheets([{"S1","S1.2","S2","S2.2","S3","S3.2","S5","S5.2","S7","S7.2","S8" _
_
,"S8.2","S9","S9.2","S25","S25.2","S41","S42","S45","S45.2","S46","S46.2","S47","S47.2","S75"," _
S75.2","S85","S85.2"}])
a = ws.[a3].CurrentRegion.Value
For i = 1 To UBound(a, 1) - 1
If Not dic.exists(a(i, 1)) Then
Set dic(a(i, 1)) = CreateObject("Scripting.Dictionary")
dic(a(i, 1)).CompareMode = 1
End If
dic(a(i, 1))(a(i + 1, 1)) = a(i + 1, 3)
If dic.exists(a(i, 1))(a(i + 1, 1)) And a(i + 1, 3) 


Vielen Dank im Voraus :)

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

Betreff
Datum
Anwender
Anzeige
AW: Dictionary Items überschreiben
12.12.2017 12:42:36
Rudi
Hallo,
            If dic(a(i, 1)).exists(a(i + 1, 1)) Then
If a(i + 1, 3) 
Gruß
Rudi
AW: Dictionary Items überschreiben
12.12.2017 13:59:34
Sandro
Hallo
Danke für die schnelle Antwort. Deine Lösung sieht gut aus und ich hab sie mal ausprobiert. Das funktioniert der Code jetzt wieder allerdings stimmt das Ergebnis nicht. Es werden noch immer nicht die minimalen Ergebnisse eingetragen..Hast du dafür eine Erklärung?

Option Explicit
Sub Matrix()
Dim a, i As Integer, j As Long, dic As Object, ws As Worksheet
Set dic = CreateObject("Scripting.Dictionary") 'erstelle Dictionary
dic.CompareMode = 1 'Führt einen Textvergleich aus
For Each ws In Worksheets([{"S1","S1.2","S2","S2.2","S3","S3.2","S5","S5.2","S7","S7.2","S8" _
,"S8.2","S9","S9.2","S25","S25.2","S41","S42","S45","S45.2","S46","S46.2","S47","S47.2","S75","S75.2","S85","S85.2"}])
a = ws.[a3].CurrentRegion.Value
For i = 1 To UBound(a, 1) - 1
If Not dic.exists(a(i, 1)) Then
Set dic(a(i, 1)) = CreateObject("Scripting.Dictionary")
dic(a(i, 1)).CompareMode = 1
End If
If dic(a(i, 1)).exists(a(i + 1, 1)) Then
If a(i + 1, 3) 
Anzeige
AW: Dictionary Items überschreiben
12.12.2017 16:31:33
Rudi
Hallo,
vermutlich vergleichst du Texte. In dem Fall ist z.B. "1000" 6lt "123"

If dic(a(i, 1)).exists(a(i + 1, 1)) Then
If CDbl(a(i + 1, 3)) 

Gruß
Rudi
Korrektur
12.12.2017 16:33:01
Rudi
natürlich
vermutlich vergleichst du Texte. In dem Fall ist z.B. "1000" &lt "123"
AW: Korrektur
13.12.2017 12:50:15
Sandro
Hallo,
Nein die items sind keine Texte..allerdings Uhrzeiten. Liegt es daran? Und wie kann ich das Problem dann lösen? Hast du eine Idee?
AW: Korrektur
13.12.2017 22:15:50
Rudi
kleiner Logikfehler
If dic(a(i, 1)).exists(a(i + 1, 1)) Then
If a(i + 1, 3) 
Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige