Arrays auslesen

  • Excel

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von zn-gong.

    Arrays auslesen

    Hallo Zusammen

    Ich versuche gewisse Werte in einen Array zu laden und dieser Wert dann in eine andere Zeile zu laden.

    Mein Code hat zuerst funktioniert. Aber nun funktionierts nicht mehr. Es kommt immer die Meldung Index ausserhalb des gültigkeits Bereich.
    Ich habe versucht den Fehler zu analysieren. Habe aber keinen Fehler gefunden, da die Richtige Zeile mit mehreren Werten ausgewählt wird. Danach wird der Wert auch in die neue Zeile eingefügt und dann erst kommt der Fehler.

    Hier mein Code:

    VB.NET-Quellcode

    1. Sub Makro2()
    2. Dim i As Long
    3. Dim Ende As Integer
    4. Dim temp As String
    5. Dim strArr() As String
    6. Dim temp2 As Variant
    7. Ende = Sheets("WP-Portfolio").UsedRange.SpecialCells(xlCellTypeLastCell).Row - 1
    8. For i = 1 To Ende
    9. temp = Sheets("Portfolio").Range("Q" & i).Value
    10. If Len(temp) > 6 Then
    11. strArr() = Split(Range("Q" & i).Value, ",")
    12. Sheets("Portfolio").Range("C" & i).Value = strArr(1)
    13. ElseIf Len(temp) > 13 Then
    14. strArr() = Split(Range("Q" & i).Value, ",")
    15. Sheets("Portfolio").Range("C" & i + 1).Value = strArr(2)
    16. End If
    17. Next i
    18. End Sub


    Vielen Dank für eure Hilfe!
    Kannst du sicherstellen, dass bei einer Länge>13 immer mindestens 2 Kommas enthalten sind (und bei Länge>6 mindestens eines)?
    Wenn nicht, wird dein gesplittetes Array nicht genügend Elemente enthalten und zum beschriebenen Fehler führen.


    inf12i schrieb:

    dann erst kommt der Fehler
    In welcher Zeile?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ja bei jeder Zeichenkette über 6 hat es immer 1 komma und bei den Zeichenketten über 13 hat es immer 2.

    Der Fehler kommt immer bei dieser Zeile
    Sheets("Portfolio").Range("C" & i).Value = strArr(1)

    Aber er schreibt noch den Wert und dann kommt erst die Meldung
    In temp steht nur der 2 Wert. Der Wert ist RQ-885 aber wenn ich die länge überprüfe gibt es mir 7 Zeichen an
    i = hat einen Zahlen Wert und Stimmt


    EDIT:

    Habe den Fehler gefunden musste das erste if auf 7 erhöhen und beim esleif musste ich auf 16 erhöhen
    Vielen Dank für deine Hilfe ! :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „inf12i“ ()

    Ich hätte einen etwas sichereren Ansatz gewählt:

    Visual Basic-Quellcode

    1. ​For i = 1 To Ende
    2. temp = Sheets("Portfolio").Range("Q" & i).Value
    3. strArr = Split(temp,",")
    4. if ubound(strArr)>0 Then Sheets("Portfolio").Range("C" & i).Value = strArr(1)
    5. if ubound(strArr)>1 Then Sheets("Portfolio").Range("C" & i + 1).Value = strArr(2) 'alternativ mit ElseIf, je nach sinnvoller Logik
    6. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo,

    Ein Array beginnt immer mit 0 und dann giebt es da ne Function die einen genau sagen kann wo dass Ende eine Arrays liegt. Ich glaube minBound für den anfang der ja eh immer 0 ist und maxbound für dass ende. So genau weiß ich aber leider selber nicht mehr)

    LG, Herbrich

    zn-gong schrieb:

    minBound für den anfang der ja eh immer 0 ist und maxbound für dass ende
    Es ist LBound und UBound.
    So wie in Post #6 verwendet.

    zn-gong schrieb:

    Ein Array beginnt immer mit 0
    Vorsicht Falle bei solchen Pauschalaussagen!
    Deine gilt nur, falls diesbezüglich nichts definiert ist.
    Die Untergrenze hängt ab von Option Base. Man kann Arrays standardmäßig auch bei 1 starten lassen!
    Außerdem kann man die Grenzen bei der Definition zusätzlich selbst festlegen.
    Sonst würde man LBound ja nie benötigen ;)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Vielen danck, ich hate die namen der functions nur wage in kopf. Sry

    LG, Herbrich