Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将数字分配给数组成员并选择最大值_Excel_Vba - Fatal编程技术网

Excel 将数字分配给数组成员并选择最大值

Excel 将数字分配给数组成员并选择最大值,excel,vba,Excel,Vba,我在VBA中有一个用户表单,允许用户选择多个选项(约1-10项)。所有选定的成员都存储在一个大小不同的数组中。我正在寻找一种方法,为所有选择的项目分配一个数值(由现有层次结构给出),然后能够选择具有最高值的项目。有没有办法解决这个问题?创建一个二维数组而不是一维数组 如果你的数组看起来像 Dim MyArr(2) As Variant MyArr(0) = "Member1" MyArr(1) = "Member2" MyArr(2) = "Member3" 将其设置为二维,以便为每个成员指定

我在VBA中有一个用户表单,允许用户选择多个选项(约1-10项)。所有选定的成员都存储在一个大小不同的数组中。我正在寻找一种方法,为所有选择的项目分配一个数值(由现有层次结构给出),然后能够选择具有最高值的项目。有没有办法解决这个问题?

创建一个二维数组而不是一维数组

如果你的数组看起来像

Dim MyArr(2) As Variant
MyArr(0) = "Member1"
MyArr(1) = "Member2"
MyArr(2) = "Member3"
将其设置为二维,以便为每个成员指定一个数值

Dim MyArr(2, 1) As Variant

MyArr(0, 0) = "Member1"
MyArr(0, 1) = 1

MyArr(1, 0) = "Member2"
MyArr(1, 1) = 2

MyArr(2, 0) = "Member3"
MyArr(2, 1) = 3


(根据评论编辑)

对成员和值使用两个不同的数组,以便使用
工作表功能
更容易找到最大值

Option Explicit

Sub test()
    Dim MyArrMembers(2) As String
    Dim MyArrValues(2) As Long

    MyArrMembers(0) = "Member1"
    MyArrValues(0) = 1

    MyArrMembers(1) = "Member2"
    MyArrValues(1) = 100

    MyArrMembers(2) = "Member3"
    MyArrValues(2) = 3

    'find max value
    Dim MaxVal As Long
    MaxVal = Application.WorksheetFunction.Max(MyArrValues)

    'locate max value
    Dim ArrIndex As Long
    ArrIndex = Application.WorksheetFunction.Match(MaxVal, MyArrValues, 0) - 1

    'output member name
    Debug.Print MyArrMembers(ArrIndex) 'returns Member2
End Sub

非常感谢。这解决了问题的第一部分,但我是否能够循环第二个数组维度,选择最高值并打印出第一个维度的相应值?@FAB有。您可以在一维数组上使用
WorksheetFunction.Max()
。您只需要将其拆分为2个阵列。