Thema Datum  Von Nutzer Rating
Antwort
Rot Mehrere Rückgabewerte
24.10.2018 12:54:03 Thorsten
NotSolved
24.10.2018 12:58:59 Gast33805
NotSolved
24.10.2018 18:18:40 Thorsten
NotSolved
24.10.2018 18:35:09 Gast65695
NotSolved
24.10.2018 18:46:03 Thorsten
NotSolved
24.10.2018 13:01:14 Gast91579
NotSolved
24.10.2018 18:19:50 Thorsten
NotSolved
24.10.2018 13:22:42 Gast36166
NotSolved
24.10.2018 18:25:10 Thorsten
NotSolved
24.10.2018 18:25:15 Thorsten
NotSolved
24.10.2018 18:48:00 Gast67887
NotSolved
24.10.2018 19:22:54 Gast89641
NotSolved
24.10.2018 19:25:30 Thorsten
NotSolved
24.10.2018 21:56:06 Jedi
NotSolved
26.10.2018 00:39:33 Ulrich
NotSolved
03.11.2018 11:32:00 Thorsten
NotSolved

Ansicht des Beitrags:
Von:
Thorsten
Datum:
24.10.2018 12:54:03
Views:
1597
Rating: Antwort:
  Ja
Thema:
Mehrere Rückgabewerte

Hallo,

ich will eine kleine Versandskostenkalkulation schreiben. Im Prinzip gebe ich Höhe, Länge, Breite und das Gewicht ein und er ermittelt mir für verschiedene Versandsdienste den billigsten Versender. Ich habe die Liste so formatiert, dass der Preis aufsteigt.

Da ich nicht mehr weiter kam mit endlosen Wenn verschachtelungen habe ich mir gestern mal VBA angeschaut. Ich kann relativ gut C programmieren, habe aber noch keine Zeile VBA/Basic geschrieben.

1. Frage. Ich möchte das in eine Funktion schreiben. D.h. es wird dann in Excel aufgerufen. Der Rückgabewert soll dann in der Zelle stehen UND in den Nachbarzellen.

D.h. ich hätte gerde in Zelle A1 =CALCVERSAND(120;20;30;2500) Und dann soll in A1 -> Paket23 stehen in A2 -> der Preis in A3 die Länge oder ähnlich. Das habe ich leider nicht mit google rausbekommen.

2. Frage Ich laufe mit meinen Kenngrößen einfach in einer For Schleife alle Werte durch, bis ich einen gefunden habe der passt. Ist das okay so? Nach effizienten Programmieren sieht das irgendwie nicht aus :-) Auch das einlesen der Tabelle macht der ja JEDES mal wenn die Funktion aktualiesiert wird. Hier hätte ich gerne mal eure einschätzung

3. Wie würdet ihr eine komplett unsortierte Liste durchlaufen? Ich würde alle Elemente durchlaufen und die Speichern, welche funktionieren. Dann würde ich in den gefundenen Elementen die mit niedrigstem Preis nehmen.

Ich bin auf eure Antworten gespannt. (wie gesagt blutiger Anfänger, hauts mir um die Ohren) :-)

 

Achja was ich sehr irritierend finde ist, dass der Index von X bei 1 startet, der Index von categorys aber bei 0. Kann mir das einer erklären? Ich kenne Programmiersprachen mit start bei 0 und bei 1 aber nicht gemischt ....

 

Function CALCVERSAND(length, hight, width, weight)
    Dim side1, side2, side3, i, counter As Integer
       
    Dim X As Variant
    Dim categorys(), types() As String
    
    Dim Debug1, Debug2, Debug3 As Variant

    X = Worksheets("Versands Kosten").Range("A14:I54")

    'MsgBox X(UBound(X, 1), UBound(X, 2))
    'MsgBox UBound(X, 1) ' 41 Zeilen
    'MsgBox UBound(X, 2) ' 9 Spalten
    
    'Find all categorys
    counter = 0
    ReDim categorys(0)
    categorys(0) = CStr(X(1, 1))
    For i = LBound(X, 1) To UBound(X, 1)
         If CStr(X(i, 1)) <> categorys(counter) Then
            ReDim Preserve categorys(counter + 1)
            categorys(counter + 1) = X(i, 1)
            counter = counter + 1
         End If
    Next
    
    'Find all types
    counter = 0
    i = 0
    ReDim types(0)
    types(0) = CStr(X(1, 2))
    For i = LBound(X, 1) To UBound(X, 1)
         If CStr(X(i, 2)) <> types(counter) Then
            ReDim Preserve types(counter + 1)
            types(counter + 1) = X(i, 2)
            counter = counter + 1
         End If
    Next
    
    side1 = Application.Max(length, hight, width)
    side2 = Application.Median(length, hight, width)
    side3 = Application.Min(length, hight, width)
    i = 0
    For i = LBound(X, 1) To UBound(X, 1)
         If side1 <= X(i, 3) And side2 <= X(i, 4) And side3 <= X(i, 5) And weight <= (X(i, 6) + X(i, 7)) Then
            Debug1 = X(i, 3)
            Debug2 = X(i, 4)
            Debug3 = X(i, 7)
         
            'MsgBox ("Habe was gefunden: " & X(i, 2))
            Exit For
         End If
    Next

    'Application.Caller.Address.Offset(0, 1) = 1
    'ActiveCell.Value = "Eine Zelle"

    CALCVERSAND = X(i, 2)
    'Call Einlesen


End Function

 


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 Mehrere Rückgabewerte
24.10.2018 12:54:03 Thorsten
NotSolved
24.10.2018 12:58:59 Gast33805
NotSolved
24.10.2018 18:18:40 Thorsten
NotSolved
24.10.2018 18:35:09 Gast65695
NotSolved
24.10.2018 18:46:03 Thorsten
NotSolved
24.10.2018 13:01:14 Gast91579
NotSolved
24.10.2018 18:19:50 Thorsten
NotSolved
24.10.2018 13:22:42 Gast36166
NotSolved
24.10.2018 18:25:10 Thorsten
NotSolved
24.10.2018 18:25:15 Thorsten
NotSolved
24.10.2018 18:48:00 Gast67887
NotSolved
24.10.2018 19:22:54 Gast89641
NotSolved
24.10.2018 19:25:30 Thorsten
NotSolved
24.10.2018 21:56:06 Jedi
NotSolved
26.10.2018 00:39:33 Ulrich
NotSolved
03.11.2018 11:32:00 Thorsten
NotSolved