vba vlookup带循环?

时间:2018-01-08 16:29:52

标签: excel vba vlookup

我正在使用某种城市目录

处理Excel

我有一个巨大的城市ID列表。我想设置一个vlookup,以便从他们的ID中获取城市名称......

我的活动表单示例:

 Id    Name
 1     NY
 2     LA 

我正在寻找的例子(我目前只有Id):

 Id        New column
 34001     Beijing
 2078      Berlin
 3459      ...
 143

我实现了复制/粘贴单个值,但我显然需要一些帮助才能通过循环获取多个值。

任何帮助将不胜感激,谢谢

2 个答案:

答案 0 :(得分:0)

如果你真的不能使用公式,请在数据范围内创建一个循环,并在查找范围内循环,就像vlookup公式一样。

附件中的示例,以便您可以根据需要进行更改:

Sub RangeLoop()

Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.ActiveSheet
Dim LKRng, DTRng As Range
Set DTRng = ws.Range("D3:D8")
Set LKRng = ws.Range("G3:G6")
Dim DTcl, LKcl As Variant

For Each DTcl In DTRng
    For Each LKcl In LKRng
        If LKcl = DTcl Then
            LKcl.Offset(0, 1) = DTcl.Offset(0, 1)
        End If
    Next LKcl
Next DTcl

End Sub

<img  src="https://i.stack.imgur.com/0mdNd.png" height="243" width="569">

Excel Image

答案 1 :(得分:0)

This article不仅会介绍您可以使用的方法,还会介绍每种方法的性能影响。在你的情况下,我认为匹配方法是最好的。

显然,您需要一个包含国家/地区名称的所有两个字母代码的数据集。

我经常使用匹配方法,以下是我在你的场景中如何做到这一点:

dim pos as variant
dim i as integer
dim ws as worksheet      ' worksheet where you want to add new column
dim refsheet as worksheet      ' sheet with country code and name


for i = 1 to 256       ' or whatever range you want to work with

'if a match is found, pos will be assigned the row number where the match was found.
on error resume next      
   pos = Match(ws.cells(i,2), refsheet.Range("A1:A100",0)
on error goto 0

if Not iserror(pos) then
    ws.cells(i,3) = refsheet.cells(2,pos)
else
    ' action if a match was not found
endif

next i

希望有所帮助。