Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: scripting dictionary -- verschiedene Strings aus Bereich

scripting dictionary -- verschiedene Strings aus Bereich
11.02.2020 19:06:59
Falk
Hallo Ex(cel)perten,
ich möchte gerne über einen Bereich die verschiedenen Werte in ein Object ablegen. Mein Code bringt eine Fehlermeldung, sobald ein Wert das zweite Mal gefunden wird.
Was muss ich ändern?
Sub RowSumIf()
Dim lc, lz, x, Spalte As Integer
Dim scr
lz = Worksheets("Einkaufsliste_Lager").Cells(2, 1).End(xlDown).Row
lc = LastColumn(2)
Spalte = 4
Set scr = CreateObject("Scripting.Dictionary")
With Worksheets("Einkaufsliste_Lager")
For Spalte = 4 To lc - 1 Step 3
For x = 2 To lz - 1
If Cells(x, Spalte)  "" Then
scr.Add .Cells(x, Spalte).Value, .Cells(x, Spalte).Value
End If
Next x
Next Spalte
End With
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: scripting dictionary -- verschiedene Strings aus Bereich
11.02.2020 19:13:48
Nepumuk
Hallo Falk,
was soll mit den verschiedenen Werten passieren? Addieren?
Gruß
Nepumuk
AW: scripting dictionary -- verschiedene Strings aus Bereich
11.02.2020 20:26:41
Falk
Hi Nepumuk,
nein, für jeden Wert wird im Object ein item angelegt. Anschließend will ich für jedes dieser Items eine bedingte Summe über einen Bereich bilden.
Anbei ein Ausschnitt, der den Teil eines (von mehreren verschiedenen) Bereichen zeigt.
https://www.herber.de/bbs/user/135134.xlsx
Danke für die Hilfe
Anzeige
AW: scripting dictionary -- verschiedene Strings aus Bereich
12.02.2020 09:39:54
Nepumuk
Hallo Falk,
ein Dictionary kann nur eindeutige Schlüssel enthalten. In deinem Fall wäre ein normales Array Mitter der Wahl.
Gruß
Nepumuk
AW: scripting dictionary -- verschiedene Strings aus Bereich
11.02.2020 20:59:59
Zwenn
Hallo Falk,
wenn Du dem Dictionary Items über Add zufügst, musst Du vorher prüfen, ob es den Key schon gibt. Dafür gibt es die Methode Exists(). Es gibt allerdings auch die Möglichkeit sich diese Prüfung zu sparen, da man nicht zwingend Add benutzen muss, um ein Dictionary zu erweitern.
Hier ein Link zu der Seite, von der wahrscheinlich so Mancher von uns vieles über Dictionaries gelernt hat:
https://excelmacromastery.com/vba-dictionary/
Für Dich ist im Moment der Teil ab diesem Abschnitt hilfreich. Lies unbedinngt auch ab Assigning a Value weiter, denn dort erfährst Du, wie man Add umgehen kann (wenns zum Rest Deiner Werte passt):
https://excelmacromastery.com/vba-dictionary/#Adding_Items_to_the_Dictionary
Viele Grüße,
Zwenn
Anzeige
AW: scripting dictionary -- verschiedene Strings aus Bereich
12.02.2020 19:29:06
Falk
Danke der Link ist wirklich hilfreich.
;
Anzeige
Anzeige

Infobox / Tutorial

Scripting Dictionary in Excel VBA: Eindeutige Werte aus einem Bereich speichern


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle Einfügen > Modul.

  3. Code eingeben: Füge den folgenden Code in das Modul ein, um ein Scripting Dictionary zu verwenden:

    Sub RowSumIf()
       Dim lc As Integer, lz As Integer, x As Integer, Spalte As Integer
       Dim scr As Object
       lz = Worksheets("Einkaufsliste_Lager").Cells(2, 1).End(xlDown).Row
       lc = LastColumn(2)  ' Funktion für die letzte Spalte
       Spalte = 4
       Set scr = CreateObject("Scripting.Dictionary")
    
       With Worksheets("Einkaufsliste_Lager")
           For Spalte = 4 To lc - 1 Step 3
               For x = 2 To lz - 1
                   If .Cells(x, Spalte) <> "" Then
                       If Not scr.Exists(.Cells(x, Spalte).Value) Then
                           scr.Add .Cells(x, Spalte).Value, .Cells(x, Spalte).Value
                       End If
                   End If
               Next x
           Next Spalte
       End With
    End Sub
  4. Ausführen: Schließe den VBA-Editor und führe dein Makro aus, um die eindeutigen Werte in das Scripting Dictionary zu speichern.


Häufige Fehler und Lösungen

  • Fehler beim Hinzufügen von Werten: Wenn du versuchst, einen Wert hinzuzufügen, der bereits existiert, bekommst du einen Laufzeitfehler. Verwende die Methode Exists(), um zu prüfen, ob der Schlüssel bereits im Dictionary vorhanden ist.

    Beispiel:

    If Not scr.Exists(.Cells(x, Spalte).Value) Then
      scr.Add .Cells(x, Spalte).Value, .Cells(x, Spalte).Value
    End If
  • Typenfehler: Achte darauf, dass die Variablen korrekt deklariert sind. In diesem Beispiel werden alle Variablen als Integer deklariert, was für große Werte problematisch sein kann. Überlege, ob du Long verwenden solltest.


Alternative Methoden

Falls du keine doppelten Werte im Dictionary speichern möchtest, kannst du auch ein Array verwenden. Hier ist eine einfache Methode, um ein Array zu verwenden:

Dim values() As Variant
ReDim values(1 To lz)
Dim currentIndex As Integer
currentIndex = 1

For x = 2 To lz - 1
    If .Cells(x, Spalte) <> "" Then
        values(currentIndex) = .Cells(x, Spalte).Value
        currentIndex = currentIndex + 1
    End If
Next x

Praktische Beispiele

Ein praktisches Beispiel für die Verwendung des scripting.dictionary in Excel VBA wäre die Analyse von Bestandsdaten. Hier könntest du verschiedene Artikelnummern und deren Mengen in einem Dictionary speichern, um eine schnelle Übersicht über die vorhandenen Artikel zu erhalten.

Sub CountItems()
    Dim itemDict As Object
    Set itemDict = CreateObject("Scripting.Dictionary")
    Dim item As String

    For Each cell In Worksheets("Einkaufsliste_Lager").Range("A2:A100")
        item = cell.Value
        If item <> "" Then
            If itemDict.Exists(item) Then
                itemDict(item) = itemDict(item) + 1
            Else
                itemDict.Add item, 1
            End If
        End If
    Next cell

    ' Ausgabe der Ergebnisse
    Dim outputRow As Integer
    outputRow = 1
    For Each key In itemDict.Keys
        Worksheets("Ergebnisse").Cells(outputRow, 1).Value = key
        Worksheets("Ergebnisse").Cells(outputRow, 2).Value = itemDict(key)
        outputRow = outputRow + 1
    Next key
End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren und hilft, Fehler zu vermeiden.
  • Optimierung: Wenn du häufig auf das Dictionary zugreifst, solltest du deine Daten in eine Excel-Tabelle importieren, um die Leistung zu verbessern.
  • Debugging: Nutze Debug.Print zur Ausgabe von Werten während der Ausführung, um Fehler leichter zu identifizieren.

FAQ: Häufige Fragen

1. Was ist ein Scripting Dictionary in VBA?
Ein Scripting Dictionary ist ein flexibles Datenstruktur-Objekt, das Schlüssel-Wert-Paare speichert und dir erlaubt, effiziente Such- und Zugriffsmethoden zu nutzen.

2. Wie kann ich Werte aus einem Dictionary auslesen?
Verwende die Syntax dict(key), um den Wert für einen bestimmten Schlüssel abzurufen.

3. Kann ich ein Dictionary in einer Schleife ändern?
Ja, du kannst Elemente in einem Dictionary innerhalb einer Schleife hinzufügen oder ändern, solange du darauf achtest, dass die Schlüssel eindeutig sind.

4. Gibt es Alternativen zum Scripting Dictionary?
Ja, wenn du keine eindeutigen Schlüssel benötigst, kannst du auch ein Array oder eine Collection verwenden, die einfacher zu handhaben sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige