VBA
•操作单元格对象
![6636eda71e953eebde964ab5c6a98fb6.png](https://i-blog.csdnimg.cn/blog_migrate/72d0e68fb0e2077a8f09126d0773470d.png)
将数据拆分到多表
在工作中我们经常要将同一类别的数据单独放到同一张表格中,对于这种重复性的工作用VBA可以节省很多的时间,现在我们就用部门数据来举例,接下来就让我们来学习这个神奇的技能吧!
![d08a42ca5c929dcb51529bf0737ebfd2.png](https://i-blog.csdnimg.cn/blog_migrate/cb1495d701f374a8b02e60f3b2f4e242.png)
纸上谈兵
在进行VBA编程前我们首先要先理一下思路,现在就让我们来想想这个操作应该怎样进行。
首先,在我们看到部门名称为"一车间"的数据时,我们会复制该行的数据,粘贴到"一车间"这个表格的最后一行数据上,以此类推其他部门的操作方法。
会用到的函数
在进行上述的纸上谈兵之后,我们可以知道我们用到的函数除了之前我们学过的for循环和copy之外,这次还要学会其他一些选取单元格的方法,如End (xlUp)、EntireRow、row和Value。
End (xlUp)
End(xlUp)表示向上检测非空单元格数据,如图所示,当我们输入代码range("a25").End(xlUp).select时,会选中a20单元格,因为a20单元格为向上取不为空的单元格。
![14014ec61cc8547d3121324f4bb329b1.png](https://i-blog.csdnimg.cn/blog_migrate/1f280143eb51545492852d5802b06963.png)
EntireRow和Row
EntireRow表示单元格所在行,如图所示,当我们输入代码range("a25").EntireRow.select时,会选中a25单元格的整行。当我们输入Range("c1") = Range("a25").EntireRow.Row,可以把a25所在单元格的行数输出到c1中,如图所示,值为25。
![45e6ba0bc87ad074e25c5f8e4bcfba40.png](https://i-blog.csdnimg.cn/blog_migrate/5181cf6d72fbaf405aca59e15cf92bc9.png)
Value
Value可以用来表示单元格的值,一般我们在使用range时都不会加Value,因为系统默认参数为Value,但在有些情况下却必须加上Value,否则会出现错误。
如下情况,如果我们输入的是Sheets(Range("d1")).Select,没有加Value就会出现类型不匹配,因为sheets不知道range("d1")是什么。
![425a459109abcaff96fac17450f753a6.png](https://i-blog.csdnimg.cn/blog_migrate/d375039ec04372b749801c36d7c72199.png)
当我们加入Value后,代码改为Sheets(Range("d1").Value).Select后,就会运行正常了。
![9057f9efe48e4979644027ca70bb529c.png](https://i-blog.csdnimg.cn/blog_migrate/2df2e40ff9e943445fa6c390e22b4397.png)
代码编写
在了解上述内容之后我们就开始编写我们的代码了。
因为.xls格式只有65535行数据,因此代码Sheet1.Range("a65535").End(xlUp)表示的一定是最后那行数据所在的行数,根据上述图表,我们应该是从第二行开始循环,因此在定义了数值类型后我们可以输入For i = 2 To Sheet1.Range("a65535").End(xlUp).Row来表示循环所有的数据。
j = Sheets(Sheet1.Range("d" & i).Value).Range("a65535").End(xlUp).Row + 1用来表示选取的数据对应的部门之后,查找这个部门所在表格的最后+1行,并将这个数据赋值给j。
Sheet1.Range("a" & i).EntireRow.Copy Sheets(Sheet1.Range("d" & i).Value).Range("a" & j)表示将选取的数据复制到对应部门表格的最后一行。
完整的代码如下图所示:
![84cf57afb6bf908f661996f892962436.png](https://i-blog.csdnimg.cn/blog_migrate/ef8ee31fe26861f694a2c674cd489e88.png)
思考讨论
上述操作虽然也可以进行数据的整理,但效率未免太低了,而且与我们平时的工作习惯不符合,正常工作的时我们也不可能这样一条一条的复制数据,然后进行粘贴,我们一般会筛选出同一个部门,然后全选复制到新的工作格中,因此我们最快的方法应该是筛选,而筛选操作大家可以试着用录制宏查看宏的方法来自学这个技能,筛选我们在下篇文章中会告诉大家,敬请期待!
—— THE END ——