百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

在同一工作表中进行数据查找(一个工作表内数据,筛查重复数据)

cac55 2024-09-19 16:58 150 浏览 0 评论

【分享成果,随喜正能量】人不该太清醒,过去的事情就让它过去,不必反复咀嚼。一生不长,重要的事儿也没那么多。天亮了,又赚了。人可以真实地活着,但不要太认真。水至清则无鱼,人至察则无徒。完美主义者最大的悲哀,就是活得不真实。在真实的世界里,有苦有乐,有酸有甜。人活着最大的乐趣,就是从痛苦中把快乐找出来。什么都追求好,是一种积极的思想,却不是最好的活法。你随和,生活才随和。

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

教程共两册,八十四讲。今日的内容是专题四“EXCEL工作表数据的读取、回填和查找”的第5讲:在同一工作表中进行数据查找

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

这个专题将的是工作表数据的操作,在前几讲中,我们讲了工作表数据和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实践经验,全部浓缩在下面的各个教程中,教程学习顺序:

① 7→1→3→2→6→5或者7→4→3→2→6→5。

② 7→8

各套教程内容简介:

第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解

第1套教程(共三册):《VBA代码解决方案》是入门后的提高教程

第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)

第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解

第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解

第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用

第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解

第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用

  • 第六套教程:VBA信息获取与处理,是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。

相关推荐

如何屏蔽色情网站?_怎么能屏蔽网站

一、基础防御:全网DNS劫持阻断1.修改全网DNS服务器推荐DNS:安全DNS:CleanBrowsing(成人内容过滤):185.228.168.168/185.228.169.168Open...

容器、Pod、虚拟机与宿主机网络通信全解:看这一篇就够了

在日常开发与部署过程中,很多人一开始都会有这样的疑惑:容器之间是怎么通信的?容器怎么访问宿主机?宿主机又如何访问容器?Kubernetes中Pod的网络和Docker容器一样吗?容器跨机器是...

Win11专业版找不到共享打印机的问题

有很多深度官网的用户,都是在办公室上班的。而上班就需要使用打印机,但更新win11系统后,却出现同一个办公室里面的打印机都找不到的问题,这该如何处理呢?其实,可能是由于我们并没有打开共享打印机而造成的...

常用电脑快捷键大全,摆脱鼠标依赖,建议收藏

Ctrl+C复制Ctrl+X剪切Ctrl+V粘贴Ctrl+Z撤销Ctrl+Y重做Ctrl+B加粗Ctrl+A全选所有文件Ctrl+S保存Ctrl+N新建Ctrl+O打开Ctrl+E...

Win11实现自动追剧Jellyfin硬解,免NAS复杂操作

大家好,欢迎来到思赞数码。本期将详细介绍如何通过安装和配置Sonarr、Radarr、Prowlarr、qBittorrent和Jellyfin,打造一套自动化的影视管理系统。很多人认为,要实现自动追...

微软Win11安卓子系统WSA 2308.40000.3.0更新推送下载

IT之家9月21日消息,微软官方博客今日宣布,已面向所有WindowsInsider用户推送了Windows11安卓子系统的2308.40000.3.0版本更新。本次更新和之前...

路由器总掉线 一个命令就能猜出八九分

明明网络强度满格或有线图标正常,但视频卡成PPT、网页刷不开、游戏动不了,闲心这些问题很多小伙伴都碰到过。每次都要开关路由、宽带/光猫、插拔网线……一通忙。有没有啥办法能快速确定故障到底在哪儿,方便处...

windows电脑如何修改hosts文件?_windows怎么修改hosts

先来简单说下电脑host的作用hosts文件的作用:hosts文件是一个用于储存计算机网络中各节点信息的计算机文件;作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中...

win10广告弹窗ShellExperienceHost.exe

win10右下角老是弹出广告弹窗,排查为以下程序引起,但是这个是系统菜单的程序不能动:C:\Windows\SystemApps\ShellExperienceHost_cw5n1h2txyewy\S...

Win10 Mobile预览版10512/10166越狱解锁部署已被黑客攻破

看起来统一的WindowsPhone和Windows越加吸引人们的关注,特别是黑客们的好奇心。XDA论坛宣称,在Win10Mobile预览版10512/10166上,已取得越狱/解锁部署突破,比如可...

6款冷门小众软件,都是宝藏,建议收藏

真的很不错(。-ω-)zzzBearhttps://bear.app/cn/Bear是一个漂亮,灵活的Markdown的写作工具。它一样只支持苹果家的全平台。它一出现就惊艳四方,就被AppSto...

如何让不符合条件的设备升级Windows 11

如果你是最近(6月24日之后)加入WindowsInsider项目并且你的设备并不符合升级条件,那么当你在尝试升级Windows11的时候可能会看到以下错误:你的PC不符合Wi...

windows host文件怎么恢复?局域网访问全靠这些!

windowshost文件怎么恢复?windowshost文件是常用网址域名及其相应IP地址建立一个关联文件,通过这个host文件配置域名和IP的映射关系,以提高域名解析的速度,方便局域网用户使用...

Mac Hosts管理工具---SwitchHosts

switchhosts!formac是一款帮助用户快速切换hosts文件的工具,switchhosts!formac能够帮助你快速方便的打造个人专用的网络环境,支持本地和在线两种方式,并且支持...

「浅谈趣说网络知识」 第十二弹 老而不死的Hosts,它还很有用

【浅谈趣说网络知识】第十二弹老而不死的Hosts,它还很有用什么时候才觉得自己真的老了,不是35岁以上的数字,不是头上的点点白发,而是不知觉中的怀旧。风口上的IT界讲的就是"长江后浪推前浪...

取消回复欢迎 发表评论: