在数组 Excel VBA 中返回最小值的索引

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/39652293/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-12 11:19:43  来源:igfitidea点击:

Returning an Index of a Min value in Array Excel VBA

arraysexcelvbafind

提问by Yousaf

I'm trying to find an index of the minimum value from sum(3) array. And it should be assigned to a variable min

我试图从 sum(3) 数组中找到最小值的索引。它应该分配给一个变量min

min = index of minimum value

min =最小值的索引

Should I sort the array first or is there any direct way of doing it?
Here is my 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`  

回答by

You can receive the 1-based index position of the element containing the minimum value with the an Excel Application object's use of the worksheet's MIN functionand MATCH function.

您可以通过Excel Application 对象使用工作表的MIN 函数MATCH 函数接收包含最小值的元素的从 1 开始的索引位置。

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