2016-09-23 5 views
0

Ich versuche, einen Index des Mindestwerts von sum (3) -Array zu finden. Und es sollte auf eine Variable minZurückgeben eines Index eines Min-Werts in Array Excel VBA

min = Index der Minimalwert zugeordnet werden

Soll ich das Array sortieren ersten oder gibt es eine direkte Art und Weise, es zu tun?
Hier ist mein Code:

`Sub Min_index() 
     Dim Pt_array(3) As Single 
     Pt_array(0) = 0 
     Pt_array(1) = 12.3 
     Pt_array(2) = 16.06 
     Pt_array(3) = 20.11 

     Dim Ad_E_array(3) As Single 
     Dim Lo_E_array(3) As Single 
     Dim Bs_temp As Single 

     Dim i As Integer 
     i = 0 
     Do While i < 4 
      Bs_temp = BS 
      Ad_E_array(i) = Ad_E 'defined in previous Sub 
      Lo_E_array(i) = Lo_E 'defined in previous Sub 

      If Bs_temp + Pt_array(i) - Qth < BS_Maximum_limit Then 
       Bs_temp = Bs_temp + Pt_array(i) - Qth 
       Ad_E_array(i) = Ad_E_array(i) + 0 
       Lo_E_array(i) = Lo_E_array(i) + 0 
       Call function_decide(int_forecast_hour - 1, Bs_temp, Qth + 1, Lo_E_array(i), Ad_E_array(i)) 
      Else 
       Lo_E_array(i) = Pt_array(i) - Qth - (BS_Maximum_limit - Bs_temp) 
       Bs_temp = BS_Maximum_limit 
       Call function_decide(int_forecast_hour - 1, Bs_temp, Qth + 1, Lo_E_array(i), Ad_E_array(i)) 
      End If 
     i = i + 1 
     Loop 

     Dim sum(3) As Single 
     Dim min As Single 
     i = 0 
     Do While i < 4 
     sum(i) = Abs(Lo_E_array(i)) + Abs(Ad_E_array(i)) 
     i = i + 1 
     Loop 
    End Sub` 

Antwort

1

Sie die 1-basierte Indexposition des Elements aufnehmen kann den Minimalwert mit dem ein Excel Application object ‚s Verwendung des Arbeitsblattes MIN function und MATCH function enthält.

Sub wqewuiew() 
     Dim Pt_array(3) As Single, p As Long 
     Pt_array(0) = 1000 
     Pt_array(1) = 12.3 
     Pt_array(2) = 16.06 
     Pt_array(3) = 20.11 

     p = Application.Match(Application.Min(Pt_array), Pt_array, 0) 

     Debug.Print p '<~~ 'p' is 2 (I changed the value of the first array element) 
End Sub 
+0

Dank @Jeeped Es funktioniert. Kann ich auch den Wert (12.3) von Index 2 bekommen? – Yousaf

+0

Nur 'Application.Min (Pt_array)' oder die ausführlichere 'pt_array (Application.Match (Application.Min (Pt_array), Pt_array, 0) -1)'. – Jeeped

+0

Perfekt. Vielen Dank – Yousaf

Verwandte Themen