excel-VBA知识点记录

news2024/9/28 22:11:20

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)多条件分支:

if 条件 then 
        结果
else 
        结果
end if 
if 条件 then 
        结果
elseif 条件 then
       结果
else 
       结果
end if 

多条件嵌套语句:

10、select case语句

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

语法:

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后面

Do While 条件表达式
    循环体
Loop

 语法二:条件体在Loop后面

Do
    循环体
Loop While 条件表达式

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

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

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+注释   

例:

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时,跳出循环

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循环

语法:

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

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

例:

'默认步长为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

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

语法:

例:

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

语法:

Dim a as Variant

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

(2)数组类型

定义:

Dim a(2) as integer

 ps:

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

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

(3)结构体

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

② 语法:

'自定义一个数据类型
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的数据类型,系统内存分配图示:

 ③ 结构体嵌套

'结构体嵌套
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过程就相当于函数过程

调用方式:

call 函数名

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

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

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

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

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

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

各个变量的生命周期:

ps:过程的调用:

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

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

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

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单元格的函数

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中定义常量的写法:

Const PI=3.1415926

(3) ByVal按值传递

代码:

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的值,实参的值也会变,代码:

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

结果:

                                     

 图示:

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2174916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型知识点分享

1 目前主流的开源模型体系有哪些&#xff1f; Prefix Decoder 系列模型 核心点&#xff1a; 输入采用双向注意力机制&#xff0c;输出为单向注意力。双向注意力意味着输入的每个部分都可以关注到输入的所有其他部分&#xff0c;这在理解上下文时具有很强的优势。 代表模型&a…

六级翻译 高分笔记

第一节 句子的拆分与重组 核心原则&#xff1a;拆主干&#xff0c;补修饰 一、句子的拆分与重组 1.青藏铁路是世界最高最长的高原铁路。&#xff08;“的”字前面所有去掉&#xff0c;就是句子主干&#xff09; The Qinghai-Tibet Railway is the highest and longest plate…

css 数字比汉字要靠上

这个问题通常是由于数字字体的下排的问题造成的&#xff0c;也就是数字的底部边缘位置比汉字的顶部边缘位置更靠下。为了解决这个问题&#xff0c;可以尝试以下几种方法&#xff1a; 使用CSS的vertical-align属性来调整对齐方式。例如&#xff0c;可以将数字的对齐方式设置为to…

数组的练习

1.使用函数的递归方法&#xff0c;输出给定字符串的逆序&#xff0c;如"abcdefg"&#xff0c;输出为“gfedcba”. 方法一&#xff1a;首先不采用递归的方法&#xff0c;如何完成上述要求 #include<stdio.h> #include<string.h> int main() {char arr[]…

3.数据结构与算法-基本概念和术语

数据、数据元素、数据项和数据对象 数据 数据元素 学生表-记录 数-节点 图&#xff1a;顶点 数据项 数据对象 数据对象与数据元素的关系 数据结构 数据结构的三个部分 逻辑结构的种类 存储结构分类 顺序存储结构 链式存储结构 索引存储结构 散列存储结构 数据类型和抽象数据类…

Linux中的文件缓冲区

目录 使用 dup2 系统调用 为命令行解释器添加重定向功能 理解缓冲区问题 缓存区的刷新策略 FILE的本质 尝试封装C语言的FILE 小共识&#xff1a; cd->当前路径->当前进程的工作路径->工作路径可以被修改->每个进程都有当前路径->故cd改的是子进程的路径-…

算力共享平台的控制流程,业务流程

目录 控制流程 业务流程 在提供的计算机网络系统结构示意图和描述中,我们可以区分出控制流程和业务流程的组成部分。 控制流程 控制流程主要涉及系统内部的管理、调度和监控操作,以确保系统能够按照预定的规则和策略运行。在这个例子中,控制流程可能包括但不限于以下部分…

K8S真正删除pod

假设k8s的某个命名空间如&#xff08;default&#xff09;有一个运行nginx 的pod&#xff0c;而这个pod是以kubectl run pod命令运行的 1.错误示范&#xff1a; kubectl delete pod nginx-2756690723-hllbp 结果显示这个pod 是删除了&#xff0c;但k8s很快自动创建新的pod,但是…

【C++算法】5.双指针_乘最多水的容器

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解&#xff1a; 题目链接&#xff1a; 11.盛最多水的容器 题目描述&#xff1a; 解法 7x749 解法一&#xff1a;暴力枚举 输入&#xff1a;[1&#xff0c;8&#xff0c;6&#xff0c;2&#xf…

大厂AI必备数据结构与算法——链表(三)详细文档

冲冲冲&#xff01;开干 神马&#xff01;神马&#xff01;神马&#xff0c;一向让我们学习起来抓耳挠腮的数据结构课程竟然也有教程&#xff1f;还那么详细&#xff1f;&#xff1f;真的假的&#xff1f; 那么好&#xff0c;胡广告诉你是假的&#xff0c;哈哈哈哈哈哈哈哈哈…

付费计量系统通用处理类(下)

普通处理类如下定义&#xff1a; 10.11 Class 11: Customer _Delivery process 用户交付过程 The processes associated with transferring delivered electrical energy to the customer’s load circuit. 是关于将传输的电能传递到用户的负荷电路。 Examples…

告别熬夜,追求高效写作:芝士AI写作,效率与质量的双重提升

好的工具&#xff0c;真得能够让我们的学习事半功倍&#xff0c;有了芝士AI&#xff08;paperzz&#xff09;工具的加持&#xff0c;妈妈再也不用担心我熬夜写论文了 。 芝士AI官网&#xff1a;https://www.paperzz.cn/ 不愧是由985硕博团队开发的AI大模型功软件&#xff0c;…

LeetCode 427. 建立四叉树

LeetCode 427. 建立四叉树 &#xff08;题干略&#xff09; """ # Definition for a QuadTree node. class Node:def __init__(self, val, isLeaf, topLeft, topRight, bottomLeft, bottomRight):self.val valself.isLeaf isLeafself.topLeft topLeftself.t…

04_OpenCV图片缩放

import cv2 import matplotlib.pyplot as plt # Python 的 2D绘图库# 读入原图片 img cv2.imread(libarary.JPG) # 打印出图片尺寸 print(img.shape) # 将图片高和宽分别赋值给x&#xff0c;y x, y img.shape[0:2]# 显示原图 #cv.imshow(OriginalPicture, img)# 缩放到原来的…

模拟实战数据落地:MSsql通过存储过程获得销售数据视图

话不多说 目标需求:通过传递参数(查询条件及查询时间)调用存储过程获得销售数据视图,并且在视图中有时间字段供后续引用,实现数据对接获取任务 最终结果如图: 实现以上结果步骤如下: 1)建立users表和orders表分别代表用户及订单,其中订单中用户id与用户表中用户id关联,并随机…

C++初阶:STL详解(九)——stacke和queue的模拟实现

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 我们已将了解了 stack和q…

PHP爬虫:获取商品销量详情API的利器

在电子商务时代&#xff0c;商品的销量数据对于商家来说至关重要。它不仅能够帮助商家了解市场动态&#xff0c;还能够指导库存管理和营销策略。PHP作为一种流行的服务器端脚本语言&#xff0c;结合其强大的HTTP请求处理能力&#xff0c;可以有效地用于编写爬虫程序&#xff0c…

【教学类-18-04】20240508《蒙德里安“黑白格子画” 七款图案挑选》

背景需求 最近有2位客户买了蒙德里安黑白格子画的素材&#xff0c;其中一位问是否是1000张。 【教学类-18-03】20240508《蒙德里安“红黄蓝黑格子画”-A4横版》&#xff08;大小格子&#xff09;_processing简单图形画蒙德里安-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞35次…

记忆osi七层模型的口诀/方法/谐音

物理层、数据链路层、网络层、传输层、会话层、表示层和应用层 物数网传会表应&#xff08;无数网船会飙英&#xff08;语&#xff09;&#xff09; 记忆方法&#xff1a; 想象面前有很多挂着渔网的船&#xff0c;船上的人会说英语。 无数的网船上会有人飙英语。

【Android】多角度看handler--looper的阻塞

在【Android】app中阻塞的looper为什么可以响应touch事件_消息队列阻塞为什么还能响应点击事件-CSDN博客 里面&#xff0c;我们查看到input事件唤醒应用中的looper阻塞&#xff0c; 作为对比&#xff0c;我们再看看广播中的唤醒&#xff0c;我们知道&#xff0c;在注册的广播…