Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
684to688
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
684to688
684to688
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Suche Art Element in Array

Suche Art Element in Array
26.10.2005 21:10:18
Klaus
Guten Abend,
ich bräuchte bitte Hilfe bei einer Suchfunktion innerhalb eines Array.
Ich lasse oft *.txt Listen 1, 2 oder Mehrdimensional in Arrays einlesen und bearbeite die Daten dann weiter - das sind aber vergleichsweise banale Angelegenheiten.
Nun soll ich ein Array nach folgenden Kriterien durchsuchen :
Test1;a
Test2;a
Test3;b
Test4;x
Test5;x
Welche verschiedenen Elemente (ohne Anzahl) gibt es ?
Hier wären es im Ergebnis a,b,x
Und dieses Ergebnis soll dann natürlich auch gleich in einem
eigenen einfachen Array stehen.
Ich hab keine Ahnung, wie ich die Suche angehen soll.
Wäre toll, wenn sich jemand der Sache annehmen würde.
Vielen Dank

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

Betreff
Datum
Anwender
Anzeige
AW: Suche Art Element in Array
26.10.2005 22:01:48
Ralf
Hallo Klaus,
keine Ahnung ob ich Dich richtig verstanden habe. Ich bin davon ausgegangen, dass Du nach Werten aus einem 2 dimensionalem Array suchen willst und bei Übereinstimmung bestimmter Kriterien diese in ein anderes, 1-dimensionales einlesen und danach ausgeben lassen willst. Hier mal ein Bsp. dafür:
Option Explicit
Dim aOrg(5, 5) As String '2-dim. Array mit 6 x 6 Elementen

Sub suchen()
Dim aErgebnis() As String, sInhalt$, x%, y%, z%, sAusgabe$
'Array füllen
For x = 0 To 5 '1.Dimension
sInhalt = "Test" & x
For y = 0 To 5 '2.Dimension
aOrg(x, y) = sInhalt & Chr(65 + y) 'entspricht A,B,C,D,E,F
Next y
Next x
'Nach C, D und F in der 2.Dimension in allen Elementen der 1. Dimension suchen lassen
For x = 0 To UBound(aOrg())
For y = 0 To UBound(aOrg())
Select Case aOrg(x, y)
Case "Test" & x & "C", "Test" & x & "D", "Test" & x & "F"
ReDim Preserve aErgebnis(z)
aErgebnis(z) = aOrg(x, y)
z = z + 1
End Select
Next y
Next x
'Ausgabe vorbereiten
For x = 0 To UBound(aErgebnis())
sAusgabe = aErgebnis(x) & vbTab & sAusgabe
Next x
MsgBox sAusgabe
End Sub

Hoffe, ich konnte Dir helfen,
Ciao, Ralf
Anzeige
AW: Suche Art Element in Array
26.10.2005 22:17:59
Klaus
Hi Ralf,
vielen Dank für Deine Mühe !
Ich meinte es ein klein wenig anders.
Wenn wir noch mal das 2-dimensionale Array
Test1;a
Test2;a
Test3;b
Test4;x
Test5;x
zu Grunde legen, dann brauche ich nicht die einzelnen Elemente Test aus der 1.Dimension.
Es stehen in dem Array div. a in der zweiten Dimension - also brauche ich als Ergebnis
nur 1x das a . Gleiches gilt für alle verschiedenen Elemente der 2. Dimension.
Ich weiß vorher nicht, wie viele unterschiedliche Elemente und in welcher Anzahl sie
in der 2. Dimension vorkommen ( Die 1.Dimension ist völlig nebensächlich )
Und im Ergebnis der Suche brauche ich eine Auflistung der verschidenen Elemente der 2.Dimension ohne die Anzahl.
Kannst Du mit der Beschreibung was anfangen ?
Anzeige
AW: Suche Art Element in Array
26.10.2005 22:48:53
Ralf
Hi Klaus,
ich glaub, jetzt hab ich's...:-)
da wird wohl alles nichts helfen. Da musst Du noch eine Doppelschleife einbauen.
Das sieht dann ungefähr so aus:
Schleife 1 durchläuft die 1. Dimension
Schleife 2 durchläuft die 2, Dimension
dann kommt die Selection. Aber bevor Du das aktuelle Element aufnimmst, hier noch mal das Array wie oben (2 Schleifen von Anfang bis Ende) durchlaufen lassen und prüfen, ob der Wert schon vorhanden ist. Wenn nicht, den Wert aufnehmen, ansonsten die Schleife verlassen.
Mit VBA gut solltest Du das hinbekommen.
Viel Glück!
Ralf
Anzeige
AW: Suche Art Element in Array
26.10.2005 23:13:28
Klaus
Hi Ralf,
genau das hatte ich befürchtet ;-)
Eine Schleife kann ich zwar vereinfachen, indem ich die Elemte sortiere und dann nur den
Vorgänger testen muß, aber insgeheim hatte ich doch gehofft,
dass es irgendwie eine "Funktion" gibt, die ich statt der Schleifendurchläufe
verwenden kann.
Nun, man kann nicht alles haben ;-)
Danke Dir für die Unterstützung.
AW: Suche Art Element in Array
27.10.2005 10:55:12
Ralf
Hi Klaus,
nur den Vorgänger zu testen wird Dir nicht viel bringen. Da kannst Du den Test auch weglassen. Was, wenn 'A' an 3. , 12., 13., 25 und 30. Stelle steht? Es wird Dir nur das an 13. Stelle nicht mit aufgenommen...
Ciao, Ralf
Anzeige
AW: Suche Art Element in Array
27.10.2005 11:27:09
MichaV
Hallo Ralf,
er will vorher sortieren.
Gruss- Micha
AW: Suche Art Element in Array
27.10.2005 14:58:11
GerdZ
Hallo Klaus,
folgendes Makro kommt ohne Schleife aus und die Daten müssen auch nicht sortiert sein:

Sub Makro()
Dim Daten(1 To 5, 1 To 2) As String, tmp As Variant, Ergebnis As Variant
Daten(1, 1) = "Test1"
Daten(2, 1) = "Test2"
Daten(3, 1) = "Test3"
Daten(4, 1) = "Test4"
Daten(5, 1) = "Test5"
Daten(1, 2) = "x"
Daten(2, 2) = "a"
Daten(3, 2) = "b"
Daten(4, 2) = "a"
Daten(5, 2) = "x"
Application.ScreenUpdating = False
Worksheets.Add
tmp = Application.WorksheetFunction.Index(Daten, 0, 2)
[A1] = "x"
Range(Cells(2, 1), Cells(2 + UBound(tmp) - LBound(tmp), 1)) = tmp
Range(Cells(1, 1), Cells(2 + UBound(tmp) - LBound(tmp), 1)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True
Ergebnis = Split(Join(Application.WorksheetFunction.Transpose(Range(Cells(2, 2), Cells([B2].End(xlDown).Row, 2))), ";"), ";")
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox Join(Ergebnis, ";")
End Sub

Gruß
Gerd
Anzeige
AW: Suche Art Element in Array
27.10.2005 15:27:46
MichaV
Hallo Gerd,
nach kurem Blick stellt sich mir die Frage: wozu machst Du das Split(Join( ... ),";"),";") ?
Gruß- Micha
AW: Suche Art Element in Array
27.10.2005 16:01:57
GerdZ
Hallo Micha,
Du hast recht. Ist überflüssig geworden.
Irgendwie hatte ich an dieser Stelle zwischendurch die Dimensionierung (1 to x, 1 to 1)
Dies sollte sie auf (1 to x) ändern.
Gruß
Gerd
cool ;-) m.T.
27.10.2005 15:42:24
Klaus
Hallo Gerd,
Herber schreibt auf seiner CD öfter, dass die Funktionen von
Excel schneller sind als VBA-Lösungen.
Das nenne ich den Beweis für diese These.
Deine Lösung muß ich mir zwar erst noch geistig erarbeiten...
...was in Gotten Namen ist Join ;-)
aber auf jeden Fall landet meine Lösung im (Daten)Müll.
Vielen Dank für die Hilfe !
Gruß, Klaus
Anzeige
AW: Nachtrag
27.10.2005 16:04:59
GerdZ
Hallo Klaus,
wie Micha richtig anmerkt, ist die Split-Join-Kombination überflüssig.
Ergebnis = Application.WorksheetFunction.Transpose(Range(Cells(2, 2), Cells([B2].End(xlDown).Row, 2)))
reicht aus.

Gruß
Gerd
AW: Nachtrag
27.10.2005 18:02:20
Klaus
Danke, werd' ich ändern.
(Gruß an Micha ;-)
Gruß
Klaus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige