VBA信息获取与处理第五节:如安在单个工作表中查找某个给定值 ...

打印 上一主题 下一主题

主题 1008|帖子 1008|积分 3024

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完低级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息得到、随机信息的使用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的使用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,二十个专题。今日分享内容是:VBA信息获取与处理第四个专题第五节:如安在单个工作表中查找某个给定值

【分享成果,随喜正能量】如果你心眼挺好,又有德行,那你一定有福报。如果有福报,却依然发不了财,请不要疑惑,老天大概将你的福报化成了健康的身体,平安的日子,暖和的家庭,和有良德的子孙子女。福报不一定让你很有钱,但一定会让你成为最圆满的自己。。
专题四 EXCEL工作表数据的读取、回填和查找

这个专题,我们讲解工作表数据的处理的问题,对于VBA而言,我给予的定位是“实现个人小型数据自动化处理的利器”,对于大多数朋侪而言,使用VBA是与EXCEL相干联的,很多的代码也是用于处理EXCEL内或者相干的各种数据,工作表更是作为和用户的交互对象而存在,那么对于工作表的数据怎样进行查找,以及怎样读取就是一个非常关键的课题,我们这讲就来主要讲解这个问题。

第五节 如安在单个工作表中查找某个给定值

这个专题将的是工作表数据的操作,在前几讲中,我们讲了工作表数据和VBA直接的传输,这讲的内容仍是和工作表相干,就是如安在工作表中查找到某个值,在《VBA代码办理方案》中,我也曾经讲到过FIND方法,乃至提出这是LOOKUP函数的闭幕者。那么怎样使用FIND方法办理问题呢?
1 Find方法和FindNext方法

1) 我们先来看看FIND方法的语法和参数:
语法:expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)
参数expression是必须的,该表达式返回一个Range对象。
参数What是必须的,要搜索的数据,可为字符串或恣意数据范例。
参数After是可选的,表示搜索过程将从其之后开始进行的单元格,必须是地区中的单个单元格。查找时是从该单元格之后开始的,直到本方法绕回到指定的单元格时,才对其进行搜索。如果未指定本参数,搜索将从地区的左上角单元格之后开始。
参数LookIn是可选的,信息范例。xlValues对应 值;xlFormulas 对应 公式;xlComments对应 讲明
参数LookAt是可选的,可为XlLookAt常量的xlWhole 或xlPart之一。
参数SearchOrder是可选的,可为XlSearchOrder常量的xlByRows或xlByColumns之一。
参数SearchDirection是可选的,搜索的方向,可为XlSearchDirection常量的xlNext或xlPrevious之一。
参数MatchCase是可选的,若为True,则进行区分大小写的查找。默认值为False。
参数MatchByte是可选的,仅在选择或安装了双字节语言支持时使用。若为True,则双字节字符仅匹配双字节字符。若为False,则双字节字符可匹配其等价的单字节字符。
参数SerchFormat是可选的,搜索的格式。
必要注意的是:每次使用Find方法后,参数LookIn、LookAt、SearchOrder 和MatchByte的设置将保存。如果下次调用Find方法时不指定这些参数的值,就使用保存的值。因此每次使用该方法时请明确设置这些参数。
2) FindNext方法继承实行用Find方法启动的搜索。查找下一个匹配相同条件的单元格并返回代表单元格的Range对象
语法:expression.FindNext(After)
参数expression是必须的,返回一个Range对象。
参数After是可选的,指定一个单元格,查找将从该单元格之后开始。
2 使用Find方法在工作表中实现单值查找

为了实现在工作表中的单值查找,我们可以使用下面的代码:
Sub MYNZI() '工作表唯一查询
  Dim FJX As Variant
  Sheets("Sheet5").Select
  Range("i2 : I3000").ClearContents
  i = 2
  Do While Cells(i, "h") <> ""
  Cells(i, "h").Select
  UU = Cells(i, "h")
  Set FJX = Sheets("Sheet5").Columns("A").Find(UU, lookat:=xlWhole)
  If Not FJX Is Nothing Then
  Cells(i, "i") = Sheets("Sheet5").Cells(FJX.Row, 2).Value
  End If
  i = i + 1
  Loop
  MsgBox ("OK")
End Sub
代码截图:

代码讲解:上述代码实现了在工作表A列中查找H列的唯一值的方案,起首我们清空了要回填的数据地区Range("i2 : I3000").ClearContents,然后使用:
Set FJX = Sheets("Sheet5").Columns("A").Find(UU, lookat:=xlWhole)
来实现我们的查找,lookat:=xlWhole 是完全匹配,当然我们还可以使用别的参数来实现特定的匹配。
上面的这段代码中我保留了工作表的名称,如许以后大家使用起来可以直接的拷贝代码,进行必要的修改即可。当然,找到唯一的值后可以提取的数据可以根据实际情况必要做进一步的改进。
我们看看程序的运行结果:

3 使用FindNext方法在工作表中实现多值查找

为了实现在工作表中的多值查找我们可以使用FindNext方法,这个方法的好处就是可以查到多个值。在查找的过程中我们要设定起始位置,下面的代码是比较经典的代码,大家可以使用:
Sub MYNZJ() '工作表非唯一查询
  Dim bcontinue As Boolean
  Dim mysearch As Range
  Dim myfind As Range
  Dim fristmyfind As String
  Sheets("Sheet6").Select
  Range("i2 : I3000").ClearContents
  i = 2
  Do While Cells(i, "h") <> ""
  Cells(i, "h").Select
  bcontinue = True
  Set mysearch = Sheets("Sheet6").Range("A1 : A" & Sheets("Sheet6").Range("A1").End(xlDown).Row)
  Set myfind = mysearch.Find(what:=Cells(i, "h"), lookat:=xlWhole)
  If Not myfind Is Nothing Then fristmyfind = myfind.Address
  Do Until myfind Is Nothing Or Not bcontinue
  Cells(i, "i") = Cells(i, "i") & " " & Sheets("Sheet6").Cells(myfind.Row, 2)
  Set myfind = mysearch.FindNext(myfind)
  If myfind.Address = fristmyfind Then bcontinue = False
  Loop
  Set myfind = Nothing
  i = i + 1
  Loop
  Set mysearch = Nothing
  MsgBox ("OK!")
End Sub
代码截图:

代码讲解:
上述代码实现了工作表A列中的多值查找,当在A列中存在H列的值时返回数值,注意这里的查找开始表示是fristmyfind = myfind.Address,一直循环到这个地点再次出现。
下面我们看看代码的运行结果:

使用Find和FindNext方法从而实现了工作表中的单一值查询和多值的查询。
本节知识点回向:怎样实现工作表中的单一值查询?怎样实现工作表中的多值查询?
本专题参考程序文件:004工作表.XLSM
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:








免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表