[Dringend] Array per Schleife auslesen lassen

Jojo-dFG

Grünschnabel
Hi Leute

Ich habe ein Array, indem ich einen X- und einen Y-Wert für jeden Array-Eintrag habe. Habe insgesamt 7 Einträge.

Hab das so gemacht:
Code:
Private Type Werte
    YWert As Double
    XWert As Double
End Type

Private Sub XundXWerte()
    Dim personen(1 To 5) As Person
    
    Wert(1).XWert = "1"
    Wert(1).YWert = "7"
    Wert(2).XWert = "3"
    Wert(2).YWert = "9"
   etc...
End Sub

So jetzt mein eigendlichen Problem:
In meinem Programm gibt man einen X-Wert ein (Dim InputXWert). Zu diesem Wert brauche ich zwei "Nachbarn". Alle der X-Werte sollen im Array verglichen werden, welcher X-Wert niedriger ist und welcher X-Wert höher (aber die nähesten zu ihm).
Diese beiden Nachbarn sollen dann als Variablen XBefore und XAfter definiert werden. Der eingegebene X-Wert soll zwischen zwei X-Werten aus dem Array liegen.

Ich würde das Problem mit einer Schleife lösen...weiß aber nicht genau wie.

Bitte helft mir, ist echt dringend!
Vielen Dank im Voraus
mfg Jojo-dFG
 
Solltest erstmal die Grundlagen von VB lernen, dein zusammenkopierter Code kann so ja nicht gehen.

Original geschrieben von Jojo-dFG
Hi Leute

Ich habe ein Array, indem ich einen X- und einen Y-Wert für jeden Array-Eintrag habe. Habe insgesamt 7 Einträge.

Hab das so gemacht:
Code:
Private Type Werte
    YWert As Double
    XWert As Double
End Type

Private Sub XundXWerte()
    Dim personen(1 To 5) As Person
    
    Wert(1).XWert = "1"
    Wert(1).YWert = "7"
    Wert(2).XWert = "3"
    Wert(2).YWert = "9"
   etc...
End Sub
Dein Type heißt Werte, du deklarierst aber ein Array vom Typ Person.
Wiso 1 To 5 wenn du 7 werte hast ?
Weiterhin sind XWert und YWert als Double deklariert, du versuchst aber einen String ("1", usw.) zuzuweisen.

So jetzt mein eigendlichen Problem:
In meinem Programm gibt man einen X-Wert ein (Dim InputXWert). Zu diesem Wert brauche ich zwei "Nachbarn". Alle der X-Werte sollen im Array verglichen werden, welcher X-Wert niedriger ist und welcher X-Wert höher (aber die nähesten zu ihm).
Mit Dim kann man keine Eingaben abfragen, sondern nur Variablen deklarieren.
Diese beiden Nachbarn sollen dann als Variablen XBefore und XAfter definiert werden. Der eingegebene X-Wert soll zwischen zwei X-Werten aus dem Array liegen.

Ich würde das Problem mit einer Schleife lösen...weiß aber nicht genau wie.

Bitte helft mir, ist echt dringend!
Vielen Dank im Voraus
mfg Jojo-dFG


Versuchs mal damit:
Code:
Option Explicit

Private Type Wert
    X As Integer
    Y As Integer
End Type

Private Sub XundXWerte()
    Dim Werte(1 To 7) As Wert
    Dim Eingabe As Integer
    Dim XBefore As Integer
    Dim XAfter  As Integer
    Dim i       As Integer
    Dim findB   As Boolean
    Dim findA   As Boolean

    'Werte ans Array zuweisen
    Werte(1).X = 1
    Werte(1).Y = 7
    Werte(2).X = 4
    Werte(2).Y = 9
    Werte(3).X = 2
    Werte(3).Y = 5
    Werte(4).X = 6
    Werte(4).Y = 1
    Werte(5).X = 3
    Werte(5).Y = 0
    Werte(6).X = 22
    Werte(6).Y = 4
    Werte(7).X = 8
    Werte(7).Y = 9

    findB = False
    findA = False

    'Eingabe abfragen
    Eingabe = InputBox("Bitte Ganzzahl für X eingeben:")
    'Hier sollte noch Prüfung auf korrekte Eingabe erfolgen

    'Startwerte für Suche setzen
    XBefore = Werte(1).X
    XAfter = Werte(1).X

    'Größte bzw. kleinste Zahl im Array ermitteln
    For i = 1 To 7 Step 1
        If Werte(i).X < XBefore Then
            XBefore = Werte(i).X
        End If
        If Werte(i).X > XAfter Then
            XAfter = Werte(i).X
        End If
    Next

    'Benachbarten Wert der Eingabe ermitteln
    For i = 1 To 7 Step 1
        If Werte(i).X >= XBefore And Werte(i).X < Eingabe Then
            XBefore = Werte(i).X
            findB = True
        End If
        If Werte(i).X <= XAfter And Werte(i).X > Eingabe Then
            XAfter = Werte(i).X
            findA = True
        End If
    Next

    'Wenn es Nachbarn gibt Meldung ausgeben
    If findA = True And findB = True Then
        MsgBox "Benachbarte X-Werte:" & vbCrLf & XBefore & " " & XAfter
    Else
        MsgBox "Es gibt entweder keinen größeren oder kleineren Wert!"
    End If
End Sub
 
*hab mein Post mal wegeditiert, da ich mit Retlaw gleichzeitig geschrieben habe und seine Antwort ausführlicher war/ist* :)
 
Zuletzt bearbeitet:
Danke für eure Hilfe!

Habs aber gestern Abend schon alleine gelöst. Deswegen hatte ich schnell nen paar Sachen zusammen kopiert *g*. Musste eben schnell gehen.
So gehts auch noch:

Code:
'Array mit dem Werten
Dim Value(0 To 8) As Values
    Value(0).XValue = 5
    Value(0).YValue = 10000
    Value(1).XValue = 10
    Value(1).YValue = 1751.1
    Value(2).XValue = 20
    Value(2).YValue = 210.8
    Value(3).XValue = 30
    Value(3).YValue = 585
    Value(4).XValue = 40
    Value(4).YValue = 22.3
    Value(5).XValue = 50
    Value(5).YValue = 9.9
    Value(6).XValue = 60
    Value(6).YValue = 4.6
    Value(7).XValue = 70
    Value(7).YValue = 2.1
    Value(8).XValue = 77
    Value(8).YValue = 0
'etc.

'Schleife
For b = UBound(Value) To 0 Step -1
            m_dYAfter = Value(b).YValue
            m_dXAfter = Value(b).XValue
            If b <= 7 Then
            m_dYBefore = Value(b + 1).YValue
            m_dXBefore = Value(b + 1).XValue
        ElseIf m_dInputValue = Value(a).YValue Then
            MsgBox "X-Wert: " & Value(a).XValue
        ElseIf m_dInputValue < Value(b).YValue Then
            Exit For
        End If
Next b

'Funktion und Ausgabe
m_sResult = m_dXBefore + (m_dInputValue - mdYBefore) * ((m_dXBefore - m_dXAfter) / (m_dYBefore - m_dYAfter))
lbl_result.Caption = "X-Wert: " & m_sResult

End Function
 
Zurück