excel-VBA知识点记录

1、计算机硬件的组成部分

内存,一旦断电,存储在里面的数据就消失了,而硬盘是永久存储数据的,所以刚开始我们在文件里面编辑没有按保存的时候,数据是在内存里面的,一旦断电数据就没了,但我们点了保存,数据就会存储到硬盘里面,永久保存啦。

2、数据存储方式

计算机最小存储单元:字节(单位:B),最小单位:位(单位:b),1字节=8位=1B=8b

3、数据类型及变量

:布尔型、整数型、浮点型、字符型、数组、对象、类

4、布尔运算符

5、高级语言不能直接被计算机执行,高级语言需要编译成为机器语言才能被计算机执行,程序运行过程图示:

6、 VBA命名方式

(1)可用字母,数字或一些标点符号命名,但第一个字符必须是字母

(2)不能使用空格

(3)不含有特殊类型的声明字符(#$%&!)

(4)变量名不区分大小写

7、运算符

(1)算术运算符

+、--、*、/、\(取商运算符)、Mod(取余运算符)

\取商运算符:7\2=3 Mod取余运算符:7 Mod 2 =1

(2)赋值运算符的优先级高于算术运算符

的含义是把8赋值给b,然后a+b

8、流程控制语句

(1)分支控制语句:if语句 select case语句

(2)循环语句:while循环语句 for next循环语句

小插曲:excel中时间表示:

1天=1 1小时=1/24 12点=12/24=0.5

在excel中时间的实质就是数值,

9、if条件判断语句使用:

(1)if 条件 then 结果

(2)if 条件 then

结果

end if

ps:这里注意两种写法的区别:如果"结果"在下面,就需要加end if结束语句,如果"结果"在上面,就不需要写end if

(3)多条件分支:

vbnet 复制代码
if 条件 then 
        结果
else 
        结果
end if 
vbnet 复制代码
if 条件 then 
        结果
elseif 条件 then
       结果
else 
       结果
end if 

多条件嵌套语句:

10、select case语句

当判断条件太多时,用if看起来就太麻烦,代码可读性太差,这时就可以用select case 语句,进行多条件判断

语法:

vbnet 复制代码
select case 条件判断对象
case 条件1 结果
case 条件2 结果
case 条件3 结果
...
case else 全部条件都不满足的结果
end select

图示:

图一: 图二:

图三:

ps:

(1)select case 条件判断对象,这个对象只是一个对象,不在这里进行条件判断,在下面的case后面进行判断,写法:<0.5,is是系统自动补足的

(2)如果结果跟case写在同一行,那条件后面一定要加" 冒号:",见上面图二

如果结果放在case的下一行,那条件后面可以不用加" 冒号:",见上面图三

11、循环语句Do...Loop循环

11.1、Do while...Loop的用法:

语法一:条件体在Do后面

vbnet 复制代码
Do While 条件表达式
    循环体
Loop

语法二:条件体在Loop后面

vbnet 复制代码
Do
    循环体
Loop While 条件表达式

两者的区别是:语法一是先判断条件,再进入循环,循环有可能一次都不执行;语法二是先进入循环再判断条件,循环至少循环一次。

案例:(这里只举语法一的例子)

vbnet 复制代码
Sub 求和()

    Dim i As Integer
    Dim sum As Integer
    i = 1
    sum = 0
    
    Do While i <= 100
        sum = sum + i
        i = i + 1
    Loop
    
    MsgBox sum
    
End Sub

ps:

(1)Msgbox 在vba里表示弹出一个显示框,类似于print打印的意思

(2)Do while ...Loop循环是,执行完一次循环体,执行Loop,然后再Do whlie 条件判断

(3)vba中添加注释的方法有两种:(1)加单引号' (2)Rem+注释

例:

vbnet 复制代码
Sub Example()
    ' 这是单行注释
    Rem 这也是单行注释
    ' 可以在单行的开始使用Rem,但不能在其他位置
    Dim i As Integer
    i = 10 ' 这是行内注释
End Sub

循环结束设置:

标志法:主要用在循环次数不确定的情况下。其基本思想是:设置一个标志变量,标志变量的值随着循环发生变化,每循环一次,就测试一次标志变量的值,当标志变量的值等于指定标志值时,结束循环。

计数法:主要用在循环次数确定的情况下。其基本思想时:设置一个计数变量,称为计数器,循环开始前给出初始值,每循环一次,计数变量增1,直到计数变量的值达到指定次数。

上述代码中的i就是标志变量,用的就是标志法:

11.2、Do Until...Loop的用法:

Until跟while的用法一样,不一样的是条件,Until后面的条件满足条件时,跳出循环,Until是"直到"的意思 ,while是满足条件执行循环,Until是满足条件跳出循环。

例子:下面循环的含义是当i>100时,跳出循环

vbnet 复制代码
Sub 求和2()

    Dim i As Integer
    Dim sum As Integer
    i = 1
    sum = 0
    
    Do Until i > 100
        sum = sum + i
        i = i + 1
    Loop
    
    MsgBox sum

End Sub

12、For Next循环

语法:

vbnet 复制代码
Dim 变量 '定义一个变量
For 变量=初始值 To 最大值 (step 步长)
    循环体
Next

for next循环用于有确定的循环次数的语句,

例:

vbnet 复制代码
'默认步长为1
Sub 求和2()
    Dim i As Integer
    Dim sum As Integer

    For i = 3 To 5
        sum = sum + i
    Next
    MsgBox sum
    
End Sub

'步长为2
Sub 求和2()
    Dim i As Integer
    Dim sum As Integer

    For i = 1 To 100 step 2
        sum = sum + i
    Next
    MsgBox sum
    
End Sub

'步长为-2
Sub 求和2()
    Dim i As Integer
    Dim sum As Integer

    For i = 100 To 1 step -2
        sum = sum + i
    Next
    MsgBox sum
    
End Su

ps:

(1)步长可以为负,

(2)在VBA中对于整型变量,可以不用赋初值,默认是0,不写步长,默认是1,只是在VBA里面,如果在C语言里,一定要赋初值

13、循环语句 For Each ... in Next

作用:针对一个集合或是数组中的每个元素重复执行操作

语法:

例:

vbnet 复制代码
Sub 循环()
    Dim rng As Range
    For Each rng In Range("A1:A3")
        rng.Value = 1
    Next
End Sub

结果:

ps:

(1)Range是对象类型,rng是对象变量,

(2)代码的含义是:rng=A1时,给单元格赋值1,当rng=A2时,给单元格赋值1,rng=A3时,给单元格赋值1,结束循环

总结:几个语句的区别:

14、变量定义

(1)变体型:Variant

语法:

vbnet 复制代码
Dim a as Variant

当你不知道输入数据是什么类型时,可以定义为变体型,到时候系统会根据用户输入的数据,来自动判断数据类型,但是变体型的存储空间会很大,都使用变体型的话会使得系统变慢,如果你没有明确一个变量的类型,那变量的类型默认是变体型。

(2)数组类型

定义:

vbnet 复制代码
Dim a(2) as integer

ps:

① 关于存储空间,定义变量,系统给每个变量分配的存储空间是随机的,但是数组不一样,定义一个数组,那系统就会给这个数组分配一个连续的存储空间,里面的元素按照从a[0]开始往后顺序存储,是有序的

② 一个数组里面只能放相同的数据类型

(3)结构体

① 作用:是一种聚合数据类型,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为不同的类型,成员一般用名字访问。

② 语法:

vbnet 复制代码
'自定义一个数据类型
Struct student{
    char name
    int age
    char sex
    float score
}

'定义一个变量
Struct student zhangru

'给变量赋值
zhangru.name="林耶"
zhangru.age=18
zhangru.sex="女"
zhangru.score=99

这个Struct student是用户自定义的student的数据类型,系统内存分配图示:

③ 结构体嵌套

vbnet 复制代码
'结构体嵌套
Struct student{
    char name
    int age
    char sex
    float score
    Struct date{
        int year
        int month
        int day
    }bir
}

'定义一个变量
Struct student linye

'给嵌套变量赋值
linye.bir.year = 2005
linye.bir.month = 2
linye.bir.day = 5

重点:一个对象的属性可能是一个值,也可能是另一个对象

点运算符:结构体变量名.成员名

15、函数调用

vba里面的sub过程就相当于函数过程

调用方式:

vbnet 复制代码
call 函数名

call可以省略,直接写一个函数名,可以进行传参,函数调用和传参过程如下:

16、变量的作用域和生命周期

(1**)过程变量:**定义在过程中的变量叫做过程变量,该变量只能使用在该过程中,不用被其他过程使用,例如下面的demo2中不能使用demo1中的a

在不同的过程中,可以定义相同的变量名,不会相互影响

(2) 模块变量:在模块里面定义的变量,在过程之外,每个过程都可以调用,图示:

(3)全局变量:在模块里面定义一个全局变量,在过程之外,每个模块都可以调用,图示:

各个变量的生命周期:

ps:过程的调用:

在过程前面加上Public或者省略,都是代表这个过程是公共过程,所以模块都可以调用这个过程;

如果在过程前面加上private代表这个过程是私有过程,只能在本模块中被调用,图示:

vbnet 复制代码
Option Explicit

Public a As Integer

'私有过程
Private Sub demo1()
    a = 100
    MsgBox a
End Sub

'公共过程
Public Sub demo2() 
    MsgBox a 
End Sub

'公共过程
Sub demo2()  
    MsgBox a
End Sub

17、静态变量

普通变量和静态变量的区别:

(1)静态变量

代码: 关键字static

vbnet 复制代码
Sub 静态变量()

    Static a As Integer
    Dim i As Range
    
    a = a + 3
    Cells(1, 1) = a
    
End Sub

静态变量的特点是:可以保留上一次变量的值,也就是上一次变量的值会保留在内存中,不会被释放,如果要释放可以手工写代码让他释放,,或者等整个程序关闭的时候就会释放。

图示:

区别:程序执行第一次,执行完a不会被释放,会保留值,当第二次再运行的时候,就在a=3的基础上计算,但是普通变量是程序执行完一次a就会被释放,释放完第二次再运行的时候,还从新定义变量a

(2)普通变量

代码:cells(1,1):选取单元格A1,cells函数就是选取excel单元格的函数

vbnet 复制代码
Sub 普通变量()

    Dim a As Integer
    a = a + 3
    Cells(1, 1) = a
    
End Sub

结果:

代码在内存执行过程:

dim a as integer以后在内存分配一块空间给a存储----->>>>然后执行a=a+3----->>>>然后把a赋值给A1单元格,结束后执行end sub,过程结束,变量a的空间被释放,过程图示:

18、excel定义常量、ByVal按值传递、ByRef按引用传递

(1)定义常量:公式-定义名称-名称用于计算

(2) 在VBA中定义常量的写法:

vbnet 复制代码
Const PI=3.1415926

(3) ByVal按值传递

代码:

vbnet 复制代码
Sub usechage()
    Dim x As Integer
    x = 5
    change x '输出change过程的x值
    MsgBox x '输出本过程的x的值
End Sub

Sub change(ByVal x As Integer)
    x = x + 2 '更改x的值
    MsgBox x
End Sub

结果:第一个x的结果是7(change过程的x值),第二个x的结果是5(本过程x)

在形参前面加上ByVal后,传递的x就只传递x的值,也就是复制一个x的值,给形参x,形参x和实参x不是同一个值,这就是按值传递。

当形参前面不加ByVal的时候,是按引用传递(默认),关键字:ByRef,按引用传递是,形参和实参存储在两个空间,形参引用的是实参的地址,所以当change过程更改了x的值,实参的值也会变,代码:

vbnet 复制代码
Sub usechage()
    Dim x As Integer
    x = 5
    change x
    MsgBox x
End Sub

Sub change(ByRef x As Integer)
    x = x + 2
    MsgBox x
End Sub

结果:

图示:

相关推荐
杜子腾dd9 小时前
10.Excel:快速定位目标值
数据分析·excel
春眠不觉晓♞9 小时前
使用多线程快速向Excel中快速插入一万条数据案例
java·学习·excel
蜗牛沐雨10 小时前
Pandas 数据导出:如何将 DataFrame 追加到 Excel 的不同工作表
python·excel·pandas
JavaDog程序狗11 小时前
【java】easypoi导出excel单元格,填充动态下拉列
java·spring boot·excel
engchina15 小时前
Dify 使用 excel 或者 csv 文件创建知识库
excel·dify
过期的秋刀鱼!1 天前
数据分析之技术干货业务价值 powerquery 分组排序后取TOP
数据挖掘·数据分析·excel·数据清洗·分组排序·powerquery·电商货品分析
凯子坚持 c2 天前
Trae 宝藏功能实测:从 Mcp 搭建天气系统,到 AI 重塑 Excel 数据处理
java·人工智能·excel
二狗哈3 天前
制作一款打飞机游戏23:编辑器ui
ui·编辑器·excel
CodeCraft Studio3 天前
Excel处理控件Spire.XLS系列教程:Java设置Excel活动工作表或活动单元格
java·python·excel
CodeJourney.3 天前
深度探索:DeepSeek赋能WPS图表绘制
数据库·人工智能·算法·信息可视化·excel