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

Forumthread: array schnell auslesen werte finden wie ?

array schnell auslesen werte finden wie ?
09.04.2008 13:02:00
chris
Hallo VBA Profis,
habe eine frage und hoffe ihr könnt mir helfen.
Habe eine Makro in denm ich ein gefülltes array habe.
Jetzt möchte ich aus diesem Array werte suchen die ich in einer zelle habe.
Wie kann ich am schnellsten einen Wert in einem Array finden ?
Habe es momentan mit 2 schleifen gelöst dauert aber ziemlich lange weil beide schleifen sehr groß sind.
ca. 1500 einträge jeweils.
For i = 0 To UBound(ListArray1)
For ii = 1 To x1 - 2
Vielen dank für euer Hilfe gruß Chris

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: noch offen
09.04.2008 13:20:00
chris
Was soll das ?

AW: array schnell auslesen werte finden wie ?
09.04.2008 13:27:00
Renee
Hi Chris,
Was soll das ? Was denn?
in denm ich ein gefülltes array habe.
Ob ein Array gefüllt ist oder leer, spielt so ziemlich keine Rolle.
Habe es momentan mit 2 schleifen gelöst d
Wieso 2 Schleifen? ist es ein mehrdimensionales Array ?
dauert aber ziemlich lange
Bei 1500 einträgen geht das bei meinem (nicht sehr schnellen) Rechner nicht mal 0.1sec
Ich versteh diese Anfrage nicht!
GrreetZ Renée

Anzeige
AW: array schnell auslesen werte finden wie ?
09.04.2008 13:44:00
chris
Ist auch etwas kompliziert.
Ich möchte lediglich wissen wie ich z.b den wert "test" in einem Array finde.
also position des eintrages.
Kann es nicht besser erklären.

AW: array schnell auslesen werte finden wie ?
09.04.2008 13:52:00
Renee
Hi Chris,
Ich möchte lediglich wissen wie ich z.b den wert "test" in einem Array finde.
Na ja, indem du den Array index by index durchsuchst, bis du ihn gefunden hast.
Also nach Schema F:

For ix = 0 to UBound(MeinArray)
If MeinArray(ix) = "Test" Then
Msgbox "Da is er: " & ix
Exit for
End If
Next ix


GreetZ Renée

Anzeige
AW: array schnell auslesen werte finden wie ?
09.04.2008 14:00:00
chris
danke so habe ich es auch.
das dauert aber sehr lange bei meinen vielen datensätzen.
versuche es noch einmal.
danke schon einmal

AW: array schnell auslesen werte finden wie ?
09.04.2008 14:26:10
Renee
Hi Chris,
versuche es noch einmal.
Du kannst es noch lange versuchen. Es gibt nix anderes. Glaub mir.
Wenn ich einige deiner Codefragmente weiter unten analysiere kann ich dir nur raten:
Besuch einen Programmierungs-Grundlagen-Kurs oder warte bis die ersten Quantencomputer auf dem Markt sind.
GreetZ Renée

Anzeige
AW: array schnell auslesen werte finden wie ?
09.04.2008 16:32:54
chris
? Würd emich wirklich sehr freuen wenn du mir ein paar tipps geben könntest was nicht sooo ok ist.
Auch wenn es nur kleine stichpunkte sind.
An die ich mich beim nächsten mal halten kann.
Wäre wirklich super !
Vielen Dank
P.s ich hatte noch nie einen Kurs.
Danke

Anzeige
AW: array schnell auslesen werte finden wie ?
09.04.2008 14:28:00
Rudi
Hallo,
schneller geht's nicht.
Das geht doch selbst in diesem Bsp. in 0,5 Sekunden:
2 Arrays mit 1500 Elementen, Übereinstimmung erst an der letzten Pos.=2.250.000 Tests

Sub tt()
Dim x As Long, y As Long, arrTest1(1 To 1500), arrTest2(1 To 1500), t
For x = 1 To 1499
arrTest1(x) = "x"
arrTest2(x) = "y"
Next x
t = Timer
arrTest1(1500) = "test"
arrTest2(1500) = "test"
For x = 1 To UBound(arrTest1)
For y = 1 To UBound(arrTest2)
If arrTest1(x) = arrTest2(y) Then
MsgBox x & "/" & y & vbLf & Timer - t
End If
Next
Next
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: array schnell auslesen werte finden wie ?
09.04.2008 16:29:39
chris
Danke Rudi.
Werde ich morgen mal testen.
Vielen Dank

AW: array schnell auslesen werte finden wie ?
09.04.2008 19:41:00
MichaV
Hi Chris,
wenn das Array sortiert ist, kann man die Suche ggf. beschleunigen.
Naja, der Rest wurde ja schon gesagt.
Gruß- Micha
PS: und lass Dich nicht entmutigen. Jede(r) hat mal angefangen, und wenn jede(r) zum Kurs gehen würde, gäbe es dieses Forum nicht.

Anzeige
AW: array schnell auslesen werte finden wie ?
09.04.2008 20:13:25
chris
Danke für dein verständniss:(
Ich weiß halt auch nicht was ich falsch mache.
Wenn so kommentare kommen wie vorhin .. mach nen kurs.
Dann sehe ich ja meine fehler nicht :8
Finde ich schade das er mir das zumindest nicht geschrieben hat.
Danke Dir und schönen Abend !

Anzeige
AW: array schnell auslesen werte finden wie ?
09.04.2008 21:17:17
Daniel
HI
leider können wir deinen Fehler auch nicht sehen, dazu müsstest du schon deine Datei oder zumindest mal einen aussagekräftigen Teil von deinem Code hochladen.
nur einfach so Vermutungen ins Blaue hinein zu machen, ohne Daten und Code zu kennen ist nicht besonders sinnvoll.
Ansonsten ist es tatsächich so, das VBA beim Arbeiten mit Array-Variablen so schnell ist, daß die einfache Schleifenlösung oft die beste ist, oft auch schneller als die fest programmierten Excel-Funktionen wie z.B. FIND (die kann ja im Prinzip auch nichts anderes machen, als alle einzelnen Werte auf Übereinstimmung zu prüfen)
Gruß, Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Werte in einem Array mit VBA schnell finden


Schritt-für-Schritt-Anleitung

Um einen Wert in einem Array mit VBA schnell zu finden, kannst du folgende Schritte befolgen:

  1. Array deklarieren und initialisieren: Erstelle ein Array und fülle es mit Werten.

    Dim MeinArray(1 To 1500) As String
    For i = 1 To 1500
       MeinArray(i) = "Wert" & i
    Next i
  2. Wert zu suchen definieren: Bestimme den Wert, den du im Array suchen möchtest.

    Dim Suchwert As String
    Suchwert = "Wert100"
  3. Array durchsuchen: Verwende eine Schleife, um den Wert im Array zu finden. Wenn der Wert gefunden wird, kannst du den Index zurückgeben.

    Dim gefunden As Boolean
    gefunden = False
    For ix = LBound(MeinArray) To UBound(MeinArray)
       If MeinArray(ix) = Suchwert Then
           MsgBox "Wert gefunden an Index: " & ix
           gefunden = True
           Exit For
       End If
    Next ix
    
    If Not gefunden Then
       MsgBox "Kein Array-Wert gefunden."
    End If

Häufige Fehler und Lösungen

  • Kein Array-Wert gefunden: Überprüfe, ob der Suchwert korrekt definiert ist und ob das Array tatsächlich Werte enthält. Achte darauf, dass das Array nicht leer ist.

  • Langsame Ausführung: Wenn du große Arrays hast, kann die Durchsuchung mit mehreren Schleifen ineffizient sein. Versuche, das Array zu sortieren, um die Suche zu beschleunigen.


Alternative Methoden

Eine alternative Methode, um Werte in einem Array zu finden, ist die Verwendung der Application.Match-Funktion. Diese ist oft schneller als die manuelle Schleifenmethode, besonders bei großen Datenmengen.

Dim index As Variant
index = Application.Match(Suchwert, MeinArray, 0)

If Not IsError(index) Then
    MsgBox "Wert gefunden an Index: " & index
Else
    MsgBox "Kein Array-Wert gefunden."
End If

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du ein Array auslesen und nach einem spezifischen Wert suchen kannst:

Sub SucheImArray()
    Dim MeinArray(1 To 5) As String
    Dim Suchwert As String
    Dim i As Integer

    ' Array füllen
    MeinArray(1) = "Apfel"
    MeinArray(2) = "Banane"
    MeinArray(3) = "Kirsche"
    MeinArray(4) = "Test"
    MeinArray(5) = "Orange"

    ' Wert definieren
    Suchwert = "Test"

    ' Wert suchen
    For i = LBound(MeinArray) To UBound(MeinArray)
        If MeinArray(i) = Suchwert Then
            MsgBox "Wert gefunden an Index: " & i
            Exit For
        End If
    Next i
End Sub

Tipps für Profis

  • Sortiere dein Array: Wenn dein Array sortiert ist, kannst du die binäre Suche verwenden, um die Suche zu optimieren.

  • Verwende Dictionaries: Für große Datenmengen kann die Verwendung eines Dictionary-Objekts vorteilhaft sein, da es schnellere Suchoperationen ermöglicht.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Situationen, wie das Suchen nach einem nicht existierenden Wert, elegant zu handhaben.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Array gefüllt ist? Stelle sicher, dass du das Array vor der Suche mit Werten initialisierst. Überprüfe die Größe des Arrays mit UBound.

2. Gibt es eine schnellere Methode, um in großen Arrays zu suchen? Ja, das Sortieren des Arrays und die Verwendung der Application.Match-Funktion kann die Suche beschleunigen. Auch die Verwendung eines Dictionary-Objekts kann hilfreich sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige