【问题标题】:Returning an Index of a Min value in Array Excel VBA在数组 Excel VBA 中返回最小值的索引
【发布时间】:2016-09-23 03:51:55
【问题描述】:

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

min = 最小值的索引

我应该先对数组进行排序还是有什么直接的方法?
这是我的代码:

 `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`  

【问题讨论】:

    标签: arrays excel vba find


    【解决方案1】:

    您可以通过Excel Application object 使用工作表的MIN functionMATCH function 来接收包含最小值的元素的从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
    

    【讨论】:

    • 谢谢@Jeeped 它有效。我也可以得到索引 2 的值(12.3)吗?
    • 只是Application.Min(Pt_array)或更详细的pt_array(Application.Match(Application.Min(Pt_array), Pt_array, 0)-1)
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2021-04-10
    • 2018-09-30
    • 2012-11-13
    • 2015-08-27
    • 2012-07-03
    • 2016-08-25
    相关资源
    最近更新 更多