Excel VBA - 如何搜索数组和返回值?

时间:2015-06-11 18:56:57

标签: arrays vba excel-vba excel

我有一些看起来像这样的数据(从A1开始):

Batman
Carl Reiner
Ford
Sushi

但我有一个二维数组,存储这些名称及其类型:

Dim Names()
ReDim Names(4,1)
Names(0,0) = "Batman"
Names(0,1) = "Superhero"
Names(1,0) = "Carl Reiner"
Names(1,1) = "Comedian"
Names(2,0) = "Ford"
Names(2,1) = "Car Manufacturer"
Names(3,0) = "Sushi"
Names(3,1) = "Food"

现在,我想循环遍历A列并用等效类型替换这些数据点。我认为有一个相对简单的方法来基本上搜索名称(x,0)为“蝙蝠侠”,然后用名称(x,1)替换它。最好的方法是什么?

我找到了一个你可以使用Vlookup的地方,所以我尝试了这个,但无济于事:

Evaluate(WorksheetFunction.Vlookup("A1",Names,1,False)

根据我的想法,它会寻找“蝙蝠侠”,并在“1”维度中返回名称中的值......但这会一直给我一个错误(类型13不匹配)。

感谢您的任何想法/帮助!

编辑:我发现了this帖子,似乎正在某处Application.Match("A1",Application.Index(Names,0,1),0),它返回数组中“A1”的位置。现在我只需要返回偏移并得到那个“1”的位置......

编辑2:我想我明白了。使用MATCH查找“A1”的位置,然后使用数组找到它:

Names(Application.Match("A1",Application.Index(Names,0,1),0),1)

所以,当A1是蝙蝠侠时,它会在索引中找到该位置,然后在第二个维度中找到等价的回报。 (抱歉缺乏语义,我不太清楚如何引用它,所以如果我能澄清,请告诉我。)

2 个答案:

答案 0 :(得分:1)

使用字典似乎更容易。

Sub testing()
    Dim dic As Object
    Set dic = CreateObject("scripting.dictionary")

    With dic
        .Add "Batman", "Superhero"
        .Add "Carl Reiner", "Comedian"
        .Add "Ford", "Car Manufacturer"
    End With

    MsgBox "Batman is a " & dic.Item("Batman")

End Sub

答案 1 :(得分:0)

我认为如果要使用工作表函数,则必须将数据放入工作表(例如列或列对)而不是数组。这很容易做到,你可以使用不同的工作表,甚至是其他工作簿,并且有隐藏这些工作表的解决方案,因此你的用户不必看到数据混乱其他工作表。