任务介绍

这一次我们通过VBA编程来实现类似vLookup的功能。当然,你可能要问,既然vLookup能搞定为什么还要用VBA再实现一遍。如果仅仅是使用vLookup这一单一功能当然没必要非得来个VBA编程,但如果你要实现的功能比较复杂就不再适合串联使用一大堆Excel公式了,这个时候用VBA编程会更容易,也不容易出错。

程序基本思路


我们要处理的Excel文件如上图所示。A列和B列分别是姓名和分数,我们要实现的功能是根据D列的姓名,查找出对应的分数并填写在E列。

VBA编程

Sub 查找()

Dim l As Long '记录A列一共有多少行,也即是待查找列表有多少行
Dim l2 As Long '记录D列一共有多少行,也即是待查询的内容有多少行

Dim v1 As String '记录当前的查询内容

l = ActiveSheet.Range("A65536").End(xlUp).row
l2 = ActiveSheet.Range("D65536").End(xlUp).row

For i = 1 To l2
 v1 = ActiveSheet.Range("D" & i)
 
 For j = 1 To l
    If v1 = ActiveSheet.Range("A" & j) Then
        ActiveSheet.Range("E" & i) = ActiveSheet.Range("B" & j)
        Exit For '既然已经找到了,就提前跳出for循环
    End If
 Next
    
Next

End Sub
  • 下面对一些新内容进行特别说明。这个程序中唯一的新内容就是Exit For这个语句,该语句是用来提前跳出For循环。之所以用这个语句是因为既然已经找到该同学的分数了,那就应该跳出,避免无意义的循环,浪费运算资源。
  • 程序的主体是两个For循环,外层循环是遍历Excel文档的D列,也就是遍历待查询的姓名。内层循环是遍历Excel文档的A列,也就是查询列表。最终实现的效果就是:例如将D1的“小红”与A列中每个姓名依次比较,如果遇到等于“小红”的姓名就将对应的B列的分数填写到E列。

运行结果


程序运行结果如上图所示,可以看出,该程序实现了类似vLookup的功能,之所以说类似是因为vLookup遇到A列有重名的时候会返回最后一个匹配的值,而该程序会返回第一个匹配的值,具体为什么会这样可以自己思考一下。

更多推荐

文科生也能学会的Excel VBA 宏编程入门(四)——VBA实现vLookup