打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【20171219】- 你会使用VBA实现有条件的数据筛选吗?

        群里有位哈尔滨的小伙伴咨询了一个有条件筛选数据,就是根据输入的流转单号,得到对应单号的明细数据,为了保护该小伙伴提供的数据,我模拟的数据如下:



        其实该小伙伴的需求就是根据【新流转单号】得到后面B:G列的明细数据,因为单号对应的明细数据不止一条。其实该问题不用VBA得到也是可以的,可以利用Excel提供的筛选功能即可达到。筛选演示如下(得到单号为2017SUT00002的明细数据):



        其实小伙伴需要的是根据输入的单号,得到对应的B:G列明细数据,其实实现的效果同筛选的结果一样,那怎么使用VBA实现类似筛选单号的功能呢?

        ① 接受单号;为了让客户输入单号,我们可以使用Application.InputBox来接受客户输入的单号。

        代码为:Application.InputBox('请输入新流转单号:', 'SUT事务所', '2017SUT00002', Type:=2)

        对于代码最后面的Type是用来接受字符串类型,如果Type的值为8,则表示接受单元格(区域)哦。

        如果不知道InputBox的使用语法,可以在VBE中选中InputBox后,按下键盘上的F1键哦,既可以打开该方法的详细语法和使用说明哦。

        ② 把A列单号数据区域放到数组中;为了能够找到单号对应的明细数据,所以需要遍历A列单号数据区域,从而找找到所需要的明细数据。

        代码为:arrNum = Worksheets('SUT事务所').Range('A3', Range('A3').End(xlDown))

        这里使用Range来获取A3最大数据区域,类似选中A3单元格,然后按下键盘上的Ctrl Shift ↓。把单号数据区域放到数组变量arrNum中。

        ③ 通过循环判断用户输入的单号是否在数组arrNum中;如果单号不在,则直接返回,否则才会去找客户的明细数据。代码如下:


    For i = 1 To UBound(arrNum)

        If strNum = arrNum(i, 1) Then

            iCount = iCount 1

        End If

    Next

    'Debug.Print iCount

    If iCount <= 0 Then

        MsgBox '请检查输入的单号是否正确!', vbQuestion, 'SUT事务所'

        Exit Sub

    End If


        这里使用For…Next循环遍历数组arrNum,如果能找到单号,则iCount加1,循环结束后,去判断iCount是否小于等于0,如果为真,表示用户输入的单号不存在,直接退出即可。

        ④ 定义存放明细数据的数组arrData;可以使用ReDim arrData(1 To iCount, 1 To 7)来重新定义明细数据大小。

        ⑤ 把订单相同的明细数据放入arrData数组;再次遍历arrNum数组,判断用户输入的单号是否一致,如果一致,则把相应行的明细数据存放到数组arrData中。代码如下:


    For i = 3 To UBound(arrNum) 2

        If strNum = arrNum(i - 2, 1) Then

            arrTmp = Range(Cells(i, 1), Cells(i, 7))

            For j = 1 To UBound(arrTmp, 2)

                arrData(iCount, j) = arrTmp(1, j)

            Next

            iCount = iCount 1

        End If

    Next


        这里使用嵌套的For循环,第一层循环遍历arrNum数组,判断单号是否一致,如果一致,就把改行明细数据放入数组arrTmp中,然后使用For循环放入到arrData这个二维数组中。

        ⑥ 结果展示到指定单元格区域;通过上面两层循环的结束,二维数组arrData中存放的就是单号对应的明细数据了。可以把明细数据放入指定的Excel单元格区域中,这里我放到了J3单元格区域中。

        代码为:Range('J3').Resize(UBound(arrData, 1), UBound(arrData, 2)) = arrData

        这里使用Range的Resize属性来设定需要存放明细数据的单元格区域。


        为了更加方便的展现,可以选择该区域并复制该区域,详细的演示如下动态图所示:



        怎么样?看过如上动态图的效果演示,是不是发现可以利用到其他场合?其实有很多使用Excel做的财务软件,都有类似的查询功能,只要学会了今天的内容,其他查询功能都可以适当修改代码即可实现哦。

        今天的代码我没有整段贴出来,很多小伙伴可能看的比较难受,所以决定拆分讲解,看看效果,如果效果比较好,以后就拆分讲解好了。

        今天的介绍就到这里了,大家如果在学习过程中遇到任何问题欢迎留言或加入QQ群(群号:615356012)进行交流,希望大家能够通过今天的学习对VBA处理条件的筛选有更加深刻的理解。期待您的进步,节约您的时间^_^


广告一下

        喜大普奔:凡是购买VBA视频课程的同学都可以免费获得任意一款插件(详情请见后续介绍)的授权,仅供学习交流使用,如果觉得插件好用,请支持正版。请私聊管理员小S!

        Excel必备工具箱功能:密码去除、阴阳历转换、将选区存储为图片、工作表排序及生成目录、人工双面打印、专业水准的套表数据汇总、穿透查询等众多实用功能……

        Excel群发邮件助手功能:群发邮件(最典型的应用场景为群发员工工资单)、数据拆分(支持拆分成工作表和工作簿)、数据合并、格式转换、批量加密、提效工具……

        慧办公功能:『慧办公』软件是增强Office办公效率的辅助工具,通过该软件可以10倍、100倍的提高你的工作效率。本软件操作简单,就像傻瓜相机一样,只要轻松按一键,就可以将很复杂的数据处理工作交给计算机自动完成,让您事半功倍。里面包含数十个实用的部件,多个批处理功能,如批量合并、批量命名、批量删除、批量打印、批量克隆、批量导出、批量插图等等.....

        O啦DataMapADataMapB流耘EXCEL财务软件思必达EXCEL账务处理系统等等……更多插件,请联系管理员小S哦~


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
EXCEL表中的数据怎么根据条件提取相关记录?
VBA编程基础(四)
Excel VBA Excel表数据导入Access数据库
js中数组,对象,json区别
Excel VBA 班级考场座次重排、每班一页分两列打印
VBA进阶 | 数组基础04: 运用数组处理工作表数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服