VBA在实际工作中的运用

发表于2015-07-08
评论4 2k浏览
VBA在实际工作中的运用
 一、概要
阅读定位:
学习VBA的伙伴。
尝试制作模拟器的伙伴。
目前在转换数据库数据的伙伴。
简要阐述:
VBA数组:类似于单元格的行和列,是一组有维度的数据,由一个符号代表,并且可以在别的地方使用,比如调出数据,更改数据。
二、维度演示
分为一维数组演示与二维数组演示。
a)一维数组
准备工作:
打开 1 个工作表。
ALT+F11 打开代码窗,单击sheet1,进入编辑。
Sub 一维数组()
Dim arr
arr = Array(1, 2, 3,4)
MsgBox arr(1)'一维数组,注释语句用单引号
End Sub
VBA里面不存在大写,注意更正。
输入代码后按F8调试,黄色条代表进度。
F9是断点,即按F9后再按F5,即可运行至此。(寻BUG)
a)二维数组
准备工作:
打开 1 个工作表。
在sheet1,A1位置输入“我在学习”
ALT+F11 打开代码窗,单击sheet1,进入编辑。
代码展示:
Sub 二维数组()
Dim x As byte, y As byte
Dim arr(1 To 3, 1 To 2)  '32,第一个代表行:行列,行在前。
For x = 1 To 3
For y = 1 To 2
arr(x, y) = Cells(x, y)  'a1:b3的数据装进数组中
Next y
Next x
 MsgBox arr(1,1) '根据提供的行数和列数显示数组
arr(2, 1) = "do my best" 
 MsgBox arr(1, 2)
End Sub
VBA里面不存在大写,注意更正。
输入代码后按F8调试,黄色条代表进度。
综上:上面是介绍数组的概念,即了解数组是什么情况。
三、装入数据
分为动态数组装入与循环装入。
a)动态数组
sub 动态数组()
dim arr
arr= range("a1:b3")'直接装入,3行2列
redim preserve arr(1 to 3,1 to 2)
msgbox arr(1,1)'显示单元格A1的数据
erase arr
endsub
动态数组装入的结构为
声明 dim arr
暴力装入  arr= 单元格区域
重新定义数组行列(对应)
使用后释放数组内存
b)循环装入
sub 循环装入()
dim arr(1 to 2,1 to 3)
dim i as byte,j as byte 
for I =1 to 2
for j =1 to 3
arr(I,j)=cells(I,j)’把a1:c3区域装入数组
next
next
msgbox arr(1,1)'显示A1数据
erase arr
end sub
循环装入的结构为
声明 dim arr(1 to M,1 to N)
循环装入  arr= 单元格区域
使用后释放数组内存
两者各有各的好,装数据自然是动态方便一点。
四、搬出数据
方式分为两种:a)循环赋值;b)对应行和列相同,直接赋值
a)循环赋值
这一段我心虚,略过
参考如下
for I = 1 to m
for j 1 to n
cells(I,j)=arr(I,j)
next
next
运用时的问题:繁琐。
为什么运用:其他方法赋值没用好,出现了BUG。
b)直接赋值
sub 动态数组()
dim arr
arr= range("a1:b3")'直接装入,3行2列
redim preserve arr(1 to 3,1 to 2)
msgbox arr(1,1)'显示单元格A1的数据
erase arr
endsub
引用这个更改一下:
sub 动态数组()
dim arr
arr= range("a1:b3")'直接装入,3行2列
redim preserve arr(1 to 3,1 to 2)
range("c1:d3")=arr '原封不动直接装出。
erase arr
endsub
刚开始使用容易把行列搞混,或者对应不上。
解决办法:F8调试。
五、题外延生【转换数据库数据】
上面的介绍可以满足一般模拟器的制作需求。
但在实际工作中,可能下面的延生更加能帮助我们。
问题举例:
 123
组合成{1,2,3}
相信类似的工作,每个同行都会遇到。
一般处理为 & 衔接(excel表里)
123
="{"&C129&","&D129&","&E129&"}"
实际项目中,这个方法较为繁琐。
但我们可以用Function来解决。
代码:
Function wayne_linknum(rng As Range)
y$ = rng(1, 1)
    i% = 2
    Do Until rng(1, i) = ""
    y = y & "," & rng(1, i)
            i = i + 1
            Loop
wayne_linknum = "{" & y & "}"
End Function
情况对比:
123
{1,2,3}
=wayne_linknum(C142)
注释:上面的情况可以用数组的join方式解决。
灯下黑
2015/7/8

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引