美文网首页
VBA学习心得2

VBA学习心得2

作者: Walteverything | 来源:发表于2022-03-21 22:39 被阅读0次

6. 读取不同数据格式并合并。

很多关于合并不同工作簿的教程都有一个共同之处,就是文件的格式几乎都是相同的,能判断出具体的单元格在第几行第几列,笔者查阅多方资料,不管是网上还是书,都没找到对不同的工作簿格式进行合并,十分失望,所以在此记录,希望帮到需要的朋友。

首先,先放图,不同的格式如下,

图1 图2

可见,无法确定姓名、银行卡等所在列。所以笔者想的方法是先查找到有关姓名等信息,然后定位到单元格的所在行列,再来将信息复制粘贴出来。

笔者第一次尝试用的find方法,部分代码如下

1.find方法通配符查找,Offset 操作进行位移定位,end(xlDown) 相当于Ctrl + ↓ 操作。

col = tws.UsedRange.SpecialCells(xlCellTypeLastCell).column                                                              '当前工作表中所有已使用的单元格区域列

row = tws.UsedRange.SpecialCells(xlCellTypeLastCell).row                                                                '当前工作表中所有已使用的单元格区域行

ws.Cells.Find("*姓*名*").Offset(1, 0).Select

        Range(Selection, Selection.End(xlDown)).Select

        wb_rows = Selection.Rows.Count

        If wb_rows = 0 Then

            ws.Cells.Find("*姓*名*").Offset(1, 0).Select

            Selection.Copy tws.Cells(row + 1, 2)

        Else

            Selection.Copy tws.Cells(row + 1, 2)

        End If

其中,

wb为导入文件的Workbooks,ws为导入文件的Workbooks.sheets;

Offset(1, 0)为定位的单元格的下面一格,相当于做一个位移操作;

Range(Selection, Selection.End(xlDown)) 相当于将定位到的单元格下面一格开始用键盘进行Ctrl + ↓ 全选操作;

wb_rows 记录了上一步所全选的行数,相当于记录导入表的姓名信息行数(有多少人)。

一开始笔者用了几个文件做的一个简单的测试,加了 if 语句是因为发现有的文件就只有一行人员信息,导致End(xlDown)操作后,全选了整个Excel的列,并且将wb_rows变为了0。。再之后的测试,发现定位查找,名称都不一样,连find通配符都没用了。。。笔者就各种查啊,有没有定位能多个关键字的或操作,发现没有。。并且,有的文档使用find方法明明文档中有但是依旧无法查到,有点奇怪,这里笔者没有解决,直接换了第二种操作。。直接用for each循环 + if 判断所有活动的单元格和姓名所在行的交集是否含有关键字。然后用循环复制粘贴,部分代码如下。

2. 强行 if 判断。

For Each title In titles

            If title = "姓名" Then

                For i = 1 To TempRowNum

                    ws.Cells(title.row + i, title.column).Copy

                    tws.Cells(row + i, 2).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

                Next

            End If

Next

这样,遇到一个不一样的使用or操作不停的加关键字就好了^ ^..经过592条数据的测试,发现可以正常使用。

不过还有可以优化的地方,if 判断也许可以使用find方法来,毕竟find方法可以使用通配符,也许可以少些几个关键字,但是可能还需要解决部分文档find方法无法查找定位的问题;使用了 if 和 elseif 来判断,也许可以改为 Select Case 语句。

下两篇直接丢代码。

相关文章

  • VBA学习心得2

    6. 读取不同数据格式并合并。 很多关于合并不同工作簿的教程都有一个共同之处,就是文件的格式几乎都是相同的,能判断...

  • VBA 知识

    VBA 编程基础 Excel VBA入门(二)数组和字典 Excel VBA 的可变类型Variant ed2k:...

  • 2016-01-27桌面GIS应用软件的开发方式

    1、VBA桌面扩展 1)VBA是简化的Visual Basic语言及其子集 2)用于支持VBA扩展的Windows...

  • VBA学习心得1

    最近一起创业的朋友又回去做老本行了,感谢她陪我一起创业的经历,寻思帮她把一些日常的工作变得自动化以节约时间,她做财...

  • VBA学习心得3

    V0.9 版 Option Explicit Sub 导入文件_全部复制到表2() '合并多工作簿中指定工作表 ...

  • VBA学习心得4

    干%…………¥#……&*……&*@#万门跑路了,我最近看的课还没看完啊真狗 V1.0 版 Option Expli...

  • 第一章-環境設置

    了解VBA 學習VBA之前,先了解一下VBA到底是啥玩意。VBA(Visual Basic Application...

  • excel表格同一单元格里剔除重复词怎么做?

    1. 首先调出"开发工具"这个菜单. 在选项里面. 2. 点开VBA, 进入VBA界面 3. 插入一个模块, 处女...

  • excel下拉框多选

    1. 鼠标右击下面的工作表(如sheet1)。选择“查看代码”,就可打开VBA编辑界面 2. 复制下面代码到VBA...

  • VBA——事件(2)

    单纯的工作表事件和工作簿事件我在实际运用中代码不知道为什么不是特别的稳定(时灵时不灵)。而事件结合控件运用还是比较...

网友评论

      本文标题:VBA学习心得2

      本文链接:https://www.haomeiwen.com/subject/gotxjrtx.html