Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Verschiedene Werte einer Spalte in Array

Verschiedene Werte einer Spalte in Array
21.10.2020 14:38:25
freshhermi
Hallo!
Ich habe folgendes Problem:
Ich habe eine bestimmte Spalte mit soundsovielen Zeilen und diese Zeilen sind mit mehreren Werten gefüllt, die jeweils unterschiedlich oft vorkommen, aber eben auch doppelt.
Das Ziel soll sein, dass diese unterschiedlichen Werte in einem Array gespeichert werden, aber jeder nur einmal, auch wenn der gleiche Wert in der Spalte öfter vorkommt.
Sin die soundsovielen Zeilen also beispielsweise mit (angenommen) 5 verschiedenen Werten unterschiedlich oft und in durchgemischter Reihenfolge gefüllt soll das Array am Ende so aussehen:
Dim ArrayWerte([Anzahl unterschiedlicher Werte] - 1) As String
ArrayWerte(0) = "Unterschiedlicher Wert A"
ArrayWerte(1) = "Unterschiedlicher Wert B"
ArrayWerte(2) = "Unterschiedlicher Wert C"
ArrayWerte(3) = "Unterschiedlicher Wert D"
ArrayWerte(4) = "Unterschiedlicher Wert E" 
Die Anzahl der Unterschiedlichen Werte habe ich schon ermittelt:
Dim RangeBisher As Range
Dim WertVorhanden As Range
Dim AnzZeilen As Integer
Dim AnzWerte As Integer
Dim i As Integer
AnzZeilen = WorksheetFunction.CountA(Columns(17))
AnzWerte = 0
For i = 2 To AnzZeilen
Set RangeBisher = Range(Cells(1, 17), Cells(i - 1, 17))
Set WertVorhanden = RangeBisher.Find(Cells(i, 17).Value)
If WertVorhanden Is Nothing Then
AnzWerte = AnzWerte + 1
End If
Next
Ich scheitere aber immer noch daran dann die Werte in ein Array zu bekommen. Hätte vielleicht jemand eine Idee wie man das angehen kann?
Vielen Dank schonmal!
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verschiedene Werte einer Spalte in Array
21.10.2020 14:54:47
Daniel
Hi
gibt verschiedene Wege.
ein Weg vorzugsweise für Texte wäre, dass du die Texte mit Trennzeichen in einem String sammelst.
dabei kannst du einfach mit Instr prüfen, ob der Text schon drin ist oder nicht.
am schluss kannst du mit SPLIT aus dem Text mit Trennzeichen ein Array machen:
das wäre also ein Weg für VBA-Anfänger
dim Zelle as Range
dim SammelText as String
Dim ArrayWerte
Sammeltext = "|"
for each Zelle in Range(Cells(2, 17), Cells(1, 17).End(xldown))
if instr(Sammeltext, "|" & Zelle.value & "|") = 0 then
Sammeltext = Sammeltext & Zelle.Value & "|"
end if
next
Sammeltext = mid(Sammeltext, 2, len(sammeltext) - 2)
ArrayWerte = Split(Sammeltext, "|")
etwas "professioneller" wäre der Weg über das Dictionary-Objekt.
dim Zelle as range
dim dic as object
dim ArrayWerte
set dic = CreateObject("Scripting.Dictionary")
for each Zelle in Range(Cells(2, 17), Cells(1, 17).End(xldown))
dic(Zelle.value) = 0
Next
ArrayWerte = dic.Keys

Gruß Daniel
Anzeige
AW: Verschiedene Werte einer Spalte in Array
21.10.2020 15:09:27
freshhermi
Hallo Daniel!
Auch die "etwas weniger professionelle" Variante funktioniert tadellos bei mir!
Vielen Dank!
LG
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Werte einer Spalte in ein Array speichern


Schritt-für-Schritt-Anleitung

Um verschiedene Werte einer Spalte in ein Array zu speichern und dabei Duplikate zu vermeiden, kannst Du die folgende Vorgehensweise nutzen:

  1. Zähle die unterschiedlichen Werte: Verwende eine Schleife, um die Anzahl der verschiedenen Werte in der Spalte zu ermitteln.
  2. Werte sammeln: Nutze ein String-Format mit Trennzeichen, um die Werte zwischenzuspeichern.
  3. Array erstellen: Verwende die Split-Funktion, um aus dem String ein Array zu generieren.

Hier ist ein Beispielcode, um dies in VBA umzusetzen:

Dim Zelle As Range
Dim Sammeltext As String
Dim ArrayWerte As Variant
Sammeltext = "|"

For Each Zelle In Range(Cells(2, 17), Cells(1, 17).End(xlDown))
    If InStr(Sammeltext, "|" & Zelle.Value & "|") = 0 Then
        Sammeltext = Sammeltext & Zelle.Value & "|"
    End If
Next

Sammeltext = Mid(Sammeltext, 2, Len(Sammeltext) - 2)
ArrayWerte = Split(Sammeltext, "|")

Häufige Fehler und Lösungen

  • Fehler: Array ist leer
    Lösung: Überprüfe, ob die Zellen im angegebenen Bereich tatsächlich Werte enthalten.

  • Fehler: Duplikate im Array
    Lösung: Stelle sicher, dass du das Trennzeichen korrekt benutzt und die InStr-Funktion richtig anwendest.


Alternative Methoden

Eine professionellere Methode, um Werte in ein Array zu speichern, ist die Verwendung eines Dictionary-Objekts. Hier ein Beispiel:

Dim Zelle As Range
Dim dic As Object
Dim ArrayWerte As Variant
Set dic = CreateObject("Scripting.Dictionary")

For Each Zelle In Range(Cells(2, 17), Cells(1, 17).End(xlDown))
    dic(Zelle.Value) = 0
Next

ArrayWerte = dic.Keys

Diese Methode ist besonders nützlich, wenn Du mit einer großen Anzahl an Daten arbeitest, da sie die Leistung verbessert.


Praktische Beispiele

Wenn Du zum Beispiel die Webadressen aus einer Excel-Tabelle extrahieren und in ein Array speichern möchtest, kannst Du die oben genannten Methoden verwenden. Hier ein einfaches Beispiel, um nur die einzigartigen Webadressen zu erfassen:

Dim Zelle As Range
Dim Webadressen As Object
Set Webadressen = CreateObject("Scripting.Dictionary")

For Each Zelle In Range("A1:A100") ' Bereich anpassen
    If Not Webadressen.Exists(Zelle.Value) Then
        Webadressen.Add Zelle.Value, Nothing
    End If
Next

Dim ArrayWebadressen As Variant
ArrayWebadressen = Webadressen.Keys

Tipps für Profis

  • Nutze die Application.WorksheetFunction.CountA-Funktion, um die Anzahl der verwendeten Zellen schnell zu ermitteln.
  • Überlege, Scripting.Dictionary zu verwenden, um die Leistung zu verbessern, besonders bei großen Datenmengen. Es ist eine effektive Methode, um mit VBA Werte in ein Array zu schreiben.
  • Experimentiere mit Split-Funktion, um mehrere Trennzeichen zu verarbeiten, indem Du sie zuerst in einen einzelnen Trennzeichen-String umwandelst.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Trennzeichen in einem String verwenden?
Du kannst die Replace-Funktion verwenden, um verschiedene Trennzeichen durch ein einheitliches zu ersetzen, bevor Du Split anwendest.

2. Ist es möglich, Werte aus mehreren Spalten in ein Array zu speichern?
Ja, Du kannst eine Schleife für jede Spalte durchführen und die Werte in ein Array sammeln, indem Du die oben genannten Methoden anpasst.

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