| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Ihr Fabriklayout mit 3DEXPERIENCE DELMIA |
Autor
|
Thema: Kleinster Wert aus mehreren Variablen (772 mal gelesen)
|
Mikel_m Mitglied Techniker
Beiträge: 21 Registriert: 12.12.2002 SolidWorks 2020 SP5.0
|
erstellt am: 09. Mrz. 2021 14:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich suche mir gerade einen Wolf nach einer Funktion, mit der ich den kleinsten Wert aus mehreren Variablen finden kann. Ich denke eigentlich ganz einfach, aber ich komme nicht drauf. Mit dem folgenden Programm vielleicht besser dargestellt, was ich meine: Sub KleinstenWertFinden () Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Dim a As Integer Dim b As Integer Dim c As Integer a = 2 b = 5 c = ???...????.Min?(a, b) MsgBox c End Sub Wäre super wenn mir jemand weiterhilft. Gruß Michael ------------------ Mikel_m Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 09. Mrz. 2021 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für Mikel_m
Hallo Michael, in VBA ist das nicht ganz so einfach. Ich denke du musst deine Variablen in ein Array packen und dieses dann über den Quicksort Algorithmus sortieren. Mit den beiden Suchbegriffen solltest du weiterkommen. Grüße
EIBe 3D Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 09. Mrz. 2021 15:13 <-- editieren / zitieren --> Unities abgeben: Nur für Mikel_m
Mal was auf die Schnelle
Code:
Function jMin(ParamArray Vals() As Variant) Dim low As Variantlow = vals(0) For i = LBound(Vals) To UBound(Vals) If Vals(i) < low Then low = Vals(i) Next i jMin = low End Function Sub test() Debug.Print jMin( 451, 234, 456, 265, 785, 345) End Sub
------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 09. Mrz. 2021 16:04 <-- editieren / zitieren --> Unities abgeben: Nur für Mikel_m
|
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 09. Mrz. 2021 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für Mikel_m
Ist doch kein Problem, da du ja die Zählvariable i aus der For-Next-Schleife in einer Positionsvariablen abspeichern kannst Schönen Feierabend an alle... ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 10. Mrz. 2021 08:47 <-- editieren / zitieren --> Unities abgeben: Nur für Mikel_m
Hallo zusammen, wäre, meiner Meinung nach, ein schönes Beispiel für die Verwendung eine Klasse Klasse ************************************************************** Private Type PStruct PName As String PValue As Double End Type Dim VList() As PStruct Dim CList As Integer Private Sub Class_Initialize() CList = 0 End Sub Public Sub Add(name As String, value As Double) If CList = 0 Then ReDim VList(CList) Else ReDim Preserve VList(CList) VList(CList).PName = name VList(CList).PValue = value CList = CList + 1 End Sub Public Function max() As Variant Dim temp As Variant Dim maxpos As Integer maxpos = 0 ReDim temp(1) If CList = 0 Then maxl = Empty Exit Function End If If UBound(VList) = 0 Then temp(0) = VList(0).PName temp(1) = VList(0).PValue max = temp Exit Function End If For i = 1 To UBound(VList) If VList(i).PValue > VList(maxpos).PValue Then maxpos = i Next i temp(0) = VList(maxpos).PName temp(1) = VList(maxpos).PValue max = temp End Function ************************************************************** Modul ************************************************************** Sub main() Dim PList As New Parameterlist Dim MaxWert As Variant PList.Add "a", 2# PList.Add "b", 1.5 PList.Add "c", 4 MaxWert = PList.max If IsEmpty(MaxWert) Then MsgBox "Keine Werte", vbCritical, "Meldung" Else MsgBox "Parameter " & MaxWert(0) & " = " & MaxWert(1) End If End Sub **************************************************************
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 10. Mrz. 2021 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für Mikel_m
@Andreas: Ok, hast mich überzeugt Code:
Option ExplicitPrivate Sub TestArray() Dim WerteListe() As Variant Dim NamensListe() As Variant Dim Index As Integer Dim MinWert As Variant 'WerteListe = Array(5, 0, 1, 9) WerteListe = Array("Kuh", "Ente", "Held", "Nanopartikel") NamensListe = Array("d1", "d2", "d3", "d4") MinWert = jMin(Index, WerteListe) Debug.Print (NamensListe(Index)) Debug.Print MinWert End Sub Function jMin(ByRef Index As Integer, Vals() As Variant) As Variant '(ParamArray Vals() As Variant) Dim i As Integer Dim low As Variant low = Vals(0) For i = LBound(Vals) To UBound(Vals) If Vals(i) < low Then low = Vals(i) Index = i End If Next i jMin = low End Function
Grüße
EIBe 3D Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 10. Mrz. 2021 09:18 <-- editieren / zitieren --> Unities abgeben: Nur für Mikel_m
|
Mikel_m Mitglied Techniker
Beiträge: 21 Registriert: 12.12.2002 SolidWorks 2020 SP5.0
|
erstellt am: 10. Mrz. 2021 09:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, vielen Dank für die schnelle Hilfe. Ich habe den ersten Ansatz von Andreas übernommen - funktioniert super ... Wäre ich so nicht drauf gekommen. Ich wünsche allen eine schöne Restwoche. Gruß Michael ------------------ Mikel_m Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 10. Mrz. 2021 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für Mikel_m
|