我有一些看起来像这样的数据(从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是蝙蝠侠时,它会在索引中找到该位置,然后在第二个维度中找到等价的回报。 (抱歉缺乏语义,我不太清楚如何引用它,所以如果我能澄清,请告诉我。)
答案 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)
我认为如果要使用工作表函数,则必须将数据放入工作表(例如列或列对)而不是数组。这很容易做到,你可以使用不同的工作表,甚至是其他工作簿,并且有隐藏这些工作表的解决方案,因此你的用户不必看到数据混乱其他工作表。