前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel实战技巧53: 在VBA代码中使用工作表公式更有效地实现查找

Excel实战技巧53: 在VBA代码中使用工作表公式更有效地实现查找

作者头像
fanjy
发布2019-09-19 17:21:05
2.5K0
发布2019-09-19 17:21:05
举报
文章被收录于专栏:完美Excel完美Excel

excelperfect

在工作表中查找值是很常见的操作,我们可以使用VLOOKUP函数、MATCH函数、INDEX函数等来查找值。当使用VBA代码在大量的数据中进行查找操作时,灵活运用工作表公式,往往能够提高效率。

下图1所示的工作表,要在列G中查找列A中的值,如果找到则将G列中相应行对应的列H中的值复制到列A中相应行的列B中。

图1

例如,单元格A2中的“砖基础”与单元格G3中的值相同,则将单元格H3中的值复制到单元格B2中,如下图2所示。

图2

首先,定义一个动态名称,以便列G中添加项目时能够自动更新。

名称:LookupRange

引用位置:=OFFSET(Sheet1!$G$2,0,0,COUNTA(Sheet1!$G:$G)-1)

接着,在VBE的标准模块中输入代码:

Sub CopyData()

Dim lLastRowA As Long

Dim rngA As Range

Dim rngValueA As Range

Dim lRow As Long

'列A中有数据的最后一行的行号

lLastRowA = Cells(Rows.Count,1).End(xlUp).Row

'设置需要处理的数据区域

Set rngA = Range("A2:" &"A" & lLastRowA)

'遍历需要处理的数据区域

For Each rngValueA In rngA

'使用工作表函数查找数据所在的行并返回行号

lRow = Application.WorksheetFunction. _

Match(rngValueA, [LookupRange], 0) +1

'如果找到则进行相应的操作

If lRow > 0 Then

Range("B" &rngValueA.Row) = Range("H" & lRow)

lRow = 0

End If

Next

End Sub

常规操作是使用两个循环来查找值,即在第一个For Each循环中再使用一个For Each循环遍历列G中的内容来查找,但使用工作表公式使得程序代码更简洁,效率更高。

说明:本文的例子只是演示公式在VBA中的运用。其实,本例在工作表中使用VLOOKUP函数也很容易。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档