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

Array Programmierung

Array Programmierung
28.06.2014 12:58:46
Katja
Hallo,
ich habe einen vba code geschrieben, um eine Liste nach einem Bestimmten String zu durchsuchen und dann 2 Teilstrings aus der gefundenen Zelle wieder getrennt zurückzugeben. Mein Suchalgorithmus ist leider ein wenig kompliziert, da ich in zwei Etappen suchen muss. Da sich meine eigentliche Frage jedoch nicht auf den Algorithmus an sich bezieht, sehe ich von weiteren Erklärungen ab.
Der Algorithmus läuft jetzt einwandfrei, da er jedoch seeeeeeehr seeeeehr lange braucht, wollte ich den Code umschreiben, in einen Array basierten Code. Ich habe jedoch noch nie mit Arrays gearbeitet und stoße echt an meine Grenzen. Ich weiß einfach nicht wie ich das umsetzten soll, bzw. ob das überhaupt so einfach geht wie gedacht.
Hier erstmal mein mein Basiscode:
_____________________________________________________________________________________
Sub SUCHE()
Dim Suchnummer, Ablaufdatum1, Ablaufdatum2, Land, Suchstring2, Suchstring3, Suchstring4,  _
ZellenInhalt, LegalState As String
Dim Bereich, Gefunden1, Gefunden2, Suchbereich As Range
Dim Zeile, Spalte, TextPos1, TextPos2, TextPos3, Länge, Länge2, Länge3 As Integer
Dim k As Integer
Suchstring3 = "Actual or expected expiration date="
Suchstring4 = "Legal state="
For k = 2 To 3
Suchnummer = Sheets("Report").Cells(k, 7).Value
Land = Sheets("Report").Cells(k, 2).Value
Suchstring2 = "LEGAL DETAILS FOR " & Land
If Sheets("Report").Cells(k, 7).Value  "" Then
Set Gefunden1 = Sheets("Orbit").Cells.Find(What:=Suchnummer, After:=Cells(1, 1),  _
LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Gefunden1 Is Nothing Then GoTo Überspringen
Zeile = Gefunden1.Row
With Sheets("Orbit")
Set Gefunden2 = .Range(.Cells(Zeile, 1), .Cells(Zeile,
34)).Find(What:=Suchstring2, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns,
SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
End With
If Gefunden2 Is Nothing Then GoTo Überspringen
Spalte = Gefunden2.Column
ZellenInhalt = Sheets("Orbit").Cells(Zeile,
Spalte).Value
TextPos1 = InStr(ZellenInhalt, Suchstring2)
Länge = Len(ZellenInhalt)
Ablaufdatum1 = Right(ZellenInhalt, (Länge -
TextPos1))
TextPos2 = InStr(Ablaufdatum1, Suchstring3) +
34
Länge2 = Len(Ablaufdatum1)
Ablaufdatum2 = Right(Ablaufdatum1, (Länge2 -
TextPos2))
TextPos3 = InStr(Ablaufdatum2, Suchstring4) +
11
Länge3 = Len(Ablaufdatum2)
LegalState = Right(Ablaufdatum2, Länge3 -
TextPos3)
LegalState = Left(LegalState, 5)
Ablaufdatum2 = Left(Ablaufdatum2, 10)
Sheets("Report").Cells(k, 19).Value =
Ablaufdatum2
Sheets("Report").Cells(k, 20).Value =
LegalState
Überspringen:
End If
Next
End Sub

______________________________________________________________________________________________________________________
Mein Plan war jetzt die Excel Tabelle von Sheet "Report" und Sheet "Orbit" jeweils in einen Array zu packen. Das bekomme ich glaube ich auch noch hin...
Dim arrOrbit
Dim arrReport
arrOrbit = Range("A1:K1763").Value
arrReport = Range ("E1:G5055").Value
Die For-schleife möchte ich dann über:
For z= 2 to UBound(arrReport,1)
durch alle Zeilen des arrReport laufen lassen
Dann stoße ich aber auch schon an meine Grenzen... ich bekomme es einfach nicht gebacken einen Wert aus einem Arrayfeld auszulesen und in eine Variable zu packen. Ich wolle das wie folgt machen... Suchnummer= arrReport(z,7).Value... das funktioniert aber leider nicht! Kann mir hier jemand weiterhelfen? Wie kann ich bestimmte Felder in einem Array ansprechen? Order war der Fehler dass ich den Array oben nicht dimensioniert habe?
Dann habe ich noch eine Weitere Frage:
Kann ich in einem Array auch einfach mit der Funktion "find" arbeiten? Oder müsste ich hier eine andere Funktion verwenden?
Ich hatte mir das so vorgestellt:
Set Gefunden1 = arrOrbit.Find(What:=Suchnummer, LookIn .... usw.)
Über sonstige Anregungen freue ich mich auch sehr, ich bin für alles offen :)
Vielen Dank
Beste Grüße
Perry

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
.Value hat da nichts zu suchen, denn das ist ...
28.06.2014 13:13:08
Luc:-?
…eine Range-Eigenschaft, Perry;
du übergibst dem Array aber nur die Range.Values nicht Ranges als Objekt!
Daraus folgt auch, dass du so nicht mit .Find arbeiten kannst, denn das ist eine Methode für Objekte, nicht für Werte. Schau auch mal ins Archiv (u.a. Stichworte Dictionary, ScriptingObject, Arrays in Arrays).
Gruß, Luc :-?

AW: .Value hat da nichts zu suchen, denn das ist ...
28.06.2014 13:33:34
Katja
Danke Luc :-? für die Antwort. Ich hatte schon befürchtet, dass das nicht so einfach funktioniert wie ich mir das dachte! Werde wohl doch bei meiner ersten Version bleiben müssen erstmal :(
Diese Array-Programmierung ist nicht so leicht verständlich wie ich mir erhofft hatte, da muss ich mich wohl erstmal tiefer einlesen!Trotzdem Danke!

Anzeige
AW: Array Programmierung
28.06.2014 13:16:46
Mullit
Hallo,
wie jetzt, Perry oder Katja... ?
Gruß,

AW: Array Programmierung
28.06.2014 18:17:58
Katja
Für einen guten Tipp, darfst du mich gerne mit beiden Namen ansprechen! :)

AW: Array Programmierung
28.06.2014 18:41:04
Daniel
Wir würden dich gerne mit einem Namen ansprechen, wenn möglich immer mit dem gleichen.
Gruß Daniel

Den hat er jetzt auch gegeben, ...
29.06.2014 02:42:04
Luc:-?
…Katja Perry, ;-)
nämlich hier!
Gruß, Luc :-?

AW: Array Programmierung
29.06.2014 10:03:52
Nepumuk
Hallo,
du suchst doch nur 4 mal, da musst du nicht auf Arrays umstellen denn der Zeitgewinn wäre marginal (höchstens ein paar Millisekunden). Zudem gibt es keine Find-Methode für Arrays, die musst du in einer Schleife Eintrag für Eintrag abklappern.
Du solltest den Suchbereich der ersten Suche:
Set Gefunden1 = Sheets("Orbit").Cells.Find( .....
einschränken. Oder kann die gesuchte Nummer in jeder 17.179.869.184 Zellen stehen?
Gruß
Nepumuk
P.S. Natürlich ist .Value richtig wenn du die Daten aus einem Range an eine Variant-Variable übergeben willst.

Anzeige
Ich hatte mich darauf bezogen, ...
29.06.2014 15:47:08
Luc:-?
…Nepumuk:
Suchnummer= arrReport(z,7).Value
Gruß, Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige