Thema Datum  Von Nutzer Rating
Antwort
Rot Array Programmierung
28.06.2014 12:35:15 Perry
NotSolved
28.06.2014 17:34:23 Gast78328
*****
NotSolved
28.06.2014 18:15:50 Perry
NotSolved
28.06.2014 23:55:13 Gast75232
NotSolved
29.06.2014 02:19:39 Gast52509
NotSolved

Ansicht des Beitrags:
Von:
Perry
Datum:
28.06.2014 12:35:15
Views:
1869
Rating: Antwort:
  Ja
Thema:
Array Programmierung

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 Forschleife 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

Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Array Programmierung
28.06.2014 12:35:15 Perry
NotSolved
28.06.2014 17:34:23 Gast78328
*****
NotSolved
28.06.2014 18:15:50 Perry
NotSolved
28.06.2014 23:55:13 Gast75232
NotSolved
29.06.2014 02:19:39 Gast52509
NotSolved