首页 > 编程知识 正文

vba批量处理,VBA自动化

时间:2023-05-04 21:51:20 阅读:205479 作者:3129

excel数据整理

我们在日常工作中经常会碰到excel自带公式无法解决的问题,在面对大量数据需要整理计算的时候会消耗大量的时间,如果你了解vba的一些技巧,就可以减少很多工作量。本篇文章将会带你进入一个简单、易懂的自动化世界。
如果在工作中,你遇到了几列数据需要转置,如这样的数据:
需要转换成下图:

常规的方法可以进行选择12个月的数据进行选择性粘贴,如果数据量大的话,这可是一个十分耗费时间的过程。有了vba,我们就可以事半功倍的解决这一系列问题。
在excel界面中安alt+f11即可打开vba编程界面,然后在左侧的目录框中右键点击创建模块,即可出现一下界面。

ttdbl插入以下代码即可完成上述工作。

Sub excel数据整理()start_row = 2start_col = 3end_col = 5counts = 40 For i = 0 To counts Range(Cells(start_row + 12 * i, start_col), Cells(start_row+12 + 12 * i, start_col)).Select Selection.Copy Cells(i + 2, end_col).Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Next i End Sub 定义过程

sub+过程名称+()为vba过程的开始,end sub为过程的结束。每个过程在编写之前都需要先把开始和结束语句写完。

写入变量

start_row为开始行号,start_col为开始列号,end_col为结束列号,counts 为循环次数。

for循环设定

for和next构成了循环语句,简单来说就是这个粘贴的过程需要进行多少次,i = 0 to counts就定义了该过程需要进行counts+1次。

利用range和cells进行范围选择

range为范围函数,里面的cells为单元格定位函数。range可以用两个cells函数来定义范围,开始为起始单元格,第二个为终止单元格。而cells函数则需要行号和列号两个参数来定义单元格位置。两个函数加在一起就可以定义一个范围,上述定义的范围为第3列的2行到13行这一个矩形区域。后面跟的12*i为循环变量。在i=0的时候定义范围为第3列的2行到13行,在等于1的时候定义范围变为第3列的14行到25行依次类推,直到i=counts时停止。

excel自带函数进行转置粘贴

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True为excel自带的选择性粘贴函数,我们需要转置,所以把Transpose:参数改为True。

总结

整体的过程可以概括为先利用range函数选中特定位置 Range(Cells(start_row + 12 * i, start_col), Cells(start_row+12 + 12 * i, start_col)),再利用 Selection.Copy进行复制,然后通过Cells(i + 2, end_col).Select选择要粘贴的位置,最后利用 Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=True进行转置操作。
如果想进行改动以适应更广泛的情况,可以进行如下更改。
1.counts值随动,改变后可进行循环次数的改变
2.单元格中12可以改动,改动后可以选择更广阔的范围
3.end_col可以改动,改动后可以改变结果的位置
4.选择位置的操作可以进行省略,可以直接把复制单元格赋值给数组

笔者也是vba的初学者,编程大佬可以略过这篇文章啦,希望对从没有这方面经验的碧蓝的乌龟有所帮助。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。