VBA教程初级

VBA教程初级(一):简单宏 
针对本教程的读着,默认已经知道什么是宏,可以打开宏编辑。如果不会,请百度。百度是万能的。 
进入正题,首先打开代码窗口,然后编辑窗口敲入如下代码:

PublicSub myFirstVBA()

' 第一个vba程序

    MsgBox "hello vba"

EndSub

·       1

·       2

·       3

·       4

step 1: 
 
step 2: 
 
step 3:
 

VBA教程初级(二):数据结构 
举个例子,如果不懂编程的人很难理解数据结构。生活中,装酱油就要用酱油瓶;装米就要用米袋子。你用米袋子装酱油,那就开玩笑了。所以,你可以理解数据结构就是将对应的“东西”放在相应的容器里,然后你就使用容器来工作。 
vba里的常用数据类型有: 
字节型(Byte),整数型(Integer),长整数型(Long),单精度浮点型(Single),双精度浮点型(Double),货币型(Currency),小数型(Decimal),字符串型(String),日期型(Date),布尔型(Boolean)等。 
ps:不要问我为什么有这些类型,要问就问为什么米袋子不能装酱油。 
不同的数据类型可以告诉Excel应该用什么形式保存它。 
举个例子,如何使用数据类型,就跟我们生活中,吃饺子蘸酱油一样。 
有一个员工叫做王大力,年龄55周岁,他所在的国家有14亿人,出生是1988年1月1日。我们可以使用String类型存放名字,使用Integer来存放年龄,由于国家人数太大了,我们使用Long类型来存放人,因为人没有小数点。。不要问我为什么。。。你能给我找一个小数点的人就行。使用Date类型来存放生日。看这样我们就简单实用了数据类型。 
VBA总声明变量很简单语法为:Dim 变量名 As 数据类型,比如我们生命一个日期类型的变量d1就可以这样写 
Dim d1 As Date 
下面我们来做这样一个例子,我们声明一个字符串类型的变量a,然后让MsgBox输出变量a

Public Sub f1()
 
    Dim a As String
    a = "啊哈哈"
    MsgBox a
End Sub
·        1
·        2
·        3
·        4
·        5
·        6
·        7

Step 1: 
 
Step 2:
 
 
我们输出了变量a的结果是“啊哈哈”,你可以试试给a的值变成其他的看能变化么

我们知道了什么是变量。也就可以理解知道了拿酱油瓶,里面有酱油。那么问题来了,你拿谁家的酱油瓶呢?是自己家的,还是隔壁老王家的?这就涉及到了变量的作用域。 
变量的声明很简单,就是告诉计算机,这个变量是存放什么类型的数据,也可以理解为这个空瓶子里面装酱油还是白醋。我们详细的来聊一聊作用域。 
作用域,可以理解为变量可以使用的范围吧,就是在哪里可以使用这个变量。比如我在a的excel中使用了变量age,但是我在b的excel中直接使用age是不可以的,这就涉及到了作用域的概念。 
作用域包括: 
单个过程,在一个过程也可以理解是一个函数中使用Dim或者Static语句声明的变量,这里static是静态的意思,就是说这个变量一旦声明了就不可变,比如身份证,一个人对应一个身份证不可以变。 
单个模块,在模块的第一个过程之前使用Dim或者Private语句声明的变量,可以在这个模块内所有的过程中使用。 
所有模块,在一个模块的第一个过程之前使用Public语句声明的变量,作用域为所有模块,这样所有的模块都可以引用(使用它)。

Option Explicit
Public a3 As String '所有模块可以使用的变量
Dim a1 As String '模块内可以使用的变量
 
Public Sub myFirstVBA()
' 第一个vba程序
    MsgBox "hello vba"
End Sub
 
Public Sub f1()
 
    Dim a As String '过程内的变量'
    a = "啊哈哈"
    Let a1 = "hello(*@ο@*) 哇~"
    Range("A1").Value = a1
End Sub
 
·        1
·        2
·        3
·        4
·        5
·        6
·        7
·        8
·        9
·        10
·        11
·        12
·        13
·        14
·        15
·        16
·        17
·        18

这里就可以看出,f1这个过程中的a变量,只有在f1中可以使用。然后f1中也可以使用a1,和a3的变量,这样你运行一下f1就可以发现a1这个单元格已经被更改了。 
我们在f1中还使用了Let a1 = “hello(@ο@)哇~”这是给变量赋值的语句,就是说这个a1的容器放什么东西,当然let可以省略,写着原因的是为了跟下文的给对象赋值使用Set作为区分。 
总结,我们上述操作是在模块1中进行的,为了证明Public的变量可以在所有模块中进行使用,那么我们创建模块2. 
执行a1后的结果为 
step 1:如图在模块上右键,选择“插入”,然后新建模块。 
 
step 2:在新建的模块中定义一个方法叫module,然后使用a3这个变量。 
 
step 3:执行一下module这个方法可以看到a2被我们更改了 
 
我们现在就可以简单的掌握了作用域。也就是说知道这个容器都在哪里生效了。

数组有大小,你可以简单理解数组是一个班级,里面有多少个学生,大家都有学号,每个学号代表一个学生。 
数组的声明Dim 数组名 (a to b) As 数据类型 
其中a to b是长度例如:Dim 一年七班 (1 to 50) As String.就声明了50个长度的“一年七班”数组。 
给数组赋值,我们生命了一个容器之后得告诉程序,容器里都有什么数据,那么我们就来给数组赋值。一年七班(1) = “邓超” 这样我们就给第一位的数组赋值了。 
我们这样做一个例子,我们一年七班中有跑男的十个嘉宾,然后呢,我们给他们在A这列竖着都显示出来,我们这样实现程序

Public Sub pss_Array()
    '数组的声明和使用
    Dim 一年七班(1 To 10) As String
    一年七班(1) = "邓超"
    一年七班(2) = "陈赫"
    一年七班(3) = "郑凯"
    一年七班(4) = "王祖蓝"
    一年七班(5) = "李晨"
    一年七班(6) = "鹿晗"
    一年七班(7) = "王宝强"
    一年七班(8) = "包贝尔"
    一年七班(9) = "夏雨"
    一年七班(10) = "陈坤"
    '将班级的成员添加到excel的第一行
    Cells(1, "a") = 一年七班(1)
    Cells(2, "a") = 一年七班(2)
    Cells(3, "a") = 一年七班(3)
    Cells(4, "a") = 一年七班(4)
    Cells(5, "a") = 一年七班(5)
    Cells(6, "a") = 一年七班(6)
    Cells(7, "a") = 一年七班(7)
    Cells(8, "a") = 一年七班(8)
    Cells(9, "a") = 一年七班(9)
    Cells(10, "a") = 一年七班(10)
    Range("A1").Select
End Sub
·        1
·        2
·        3
·        4
·        5
·        6
·        7
·        8
·        9
·        10
·        11
·        12
·        13
·        14
·        15
·        16
·        17
·        18
·        19
·        20
·        21
·        22
·        23
·        24
·        25
·        26
·        27

运行这段程序,我们在a这列把这10个 同学都输出了。然后租后一行Range(“A1”).Select是选中了a1.也就是队长邓超被选中了。运行之后的结果是 

上次我们说到了数组。大家可以理解为一列很长很长的存放数据的容器。那么我们可以用多个这样的容器一起来存放数据吗。就像我们上学的时候站的方队,有横有纵。回答是,可以的。我们还是用酱油来举例子,让大家明白,多维数组。 
 
我借用别人的酱油图片了。自己实在是画不出来。大家可以看到,我们有3层酱油,,每一层5列,那么我们就可以说,一个二维数组存放了酱油。 
这样的好处是,我想要第一层第四个酱油,就可以酱油(1,4)这样拿到了。 
下面我们使用vba来操作数组。 
声明数组:Dim 酱油 (1 to 3,1 to 20)。说明这个数组是3*20个空间的变量。大家要记住。 
代码片段:

PublicSub pss_dArray()

    Dim酱油(1To3, 1To20) AsString

    酱油(4, 20) = "一品海鲜"

    MsgBox 酱油(3, 20)

EndSub

如果在声明数组的时候,不能确定会往这个数组里存储多少个元素,就是说不能预知数组大小。我们可以在定义数组是括号内写空,就是:Dim 数组名 (); 
然后在程序里试用ReDim语句来重新制定它大小。

Public Sub pss_Dynamic_Array()
    '定义一个未知长度的数组arr
    Dim arr() As String
    Dim n As Long
    '统计a列有多少个非空单元格
    n = Application.WorksheetFunction.CountA(Range("A:A"))
    ReDim arr(1 To n) As String
    MsgBox (UBound(arr) - LBound(arr) + 1)
    '统计a2到a15不为空的单元格
    n = Application.WorksheetFunction.CountA(Range("A2:A15"))
    ReDim arr(1 To n) As String
    MsgBox (UBound(arr) - LBound(arr) + 1)
End Sub
·        1
·        2
·        3
·        4
·        5
·        6
·        7
·        8
·        9
·        10
·        11
·        12
·        13

这里的n就是动态长度。这里你运行一下就可以看到动态数组的神奇功能了。

如果运行不出来,请如图添加数据: 

数组的使用是很频繁的,下面介绍两种常用的使用数组的方法。

首先利用split

'使用split函数创建数组
Public Sub pss_split()
    Dim arr As Variant
    ' 利用split创建数组
    arr = Split("邓肯 科比 麦迪", " ")
    MsgBox "arr第二个元素为:" & arr(1)
End Sub
·        1
·        2
·        3
·        4
·        5
·        6
·        7

其次利用Range

' 区域复制
Public Sub pss_copy()
    Dim arr As Variant
    '通过Range对象直接创建数组
    arr = Range("A1:C3").Value
    Range("D1:F3").Value = arr
End Sub
·        1
·        2
·        3
·        4
·        5
·        6
·        7

请大家自行准备数据,也可以利用第六讲的数据来操作利用Range的数组复制

 

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值