zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Excel VBA学习

2023-09-27 14:27:14 时间

资源

github工程
VBA 文档

环境配置

1.新建excel;
2.启用开发工具
在这里插入图片描述
在这里插入图片描述
3.新建宏
在这里插入图片描述
4.程序编辑
在这里插入图片描述

练习

练习1

1.利用Array函数创建一个数组,将A1:C3单元格的数组赋值给这个数组,并进行以下操作:
在这里插入图片描述

  • (1)将数组的元素存放到E1:G3单元格;

  • (2)将数据元素转置并存放到A5:C7单元格;

  • (3)将数组第一维(行)第3个元素,第二维(行)第2个元素用消息框显示出来;

  • (4)用消息框显示数组的第一维(行)最大索引号和第二维最小索引号;

  • (5)用消息框显示数组包含的元素个数。

Dim arr() As Variant '声明数组变量
arr = Array() '创建化数组(没填参数创建的是零长度的数组)

arr = Range("A1:C3").Value '用excel数据初始化数组

Range("E1:G3").Value = arr '把数组数据填入excel

Range("A5:C7").Value = Application.Transpose(arr) '转置数组并填入excel

Dim v1_3, v2_2 As String '声明字符串变量v1_3和v2_2,用来保存数组元素值
v1_3 = arr(1, 3) '取出数组中第一行第3个元素值
v2_2 = arr(2, 2) '取出数组中第二行第2个元素值
MsgBox "数组第一维第3个元素:" & v1_3 & Chr(13) & "数组第二维第2个元素:" & v2_2

Dim max_1, min_2 As Integer
max_1 = UBound(arr, 1)
min_2 = LBound(arr, 2)
MsgBox "第一维最大索引号:" & max_1 & Chr(13) & "第二维最小索引号:" & min_2



Dim d_1, d_2, sum As Integer
d_1 = UBound(arr, 1) - LBound(arr, 1) + 1 '行数(一维长度) = 一维最大可用下标 - 一维最小可用下标 + 1
d_2 = UBound(arr, 2) - LBound(arr, 2) + 1 '列数(二维长度) = 二维最大可用下标 - 二维最小可用下标 + 1
sum = d_1 * d_2 '二维数组元素个数 = 行数 * 列数
MsgBox "数组包含的元素个数:" & sum

2.用split函数创建一个函数,并将“我是一名学生”每一个字作为一个数组的元素存放到这个数组中,并进行以下操作:

  • (1)将数组元素显示在单元格A9:F9中;
  • (2)用消息框显示数组的最大索引号和最小索引号;

Dim fullStr As String

fullStr = "我 是 一 名 学 生"

Dim arr() As String

arr = Split(fullStr, " ") '分割字符串fullStr

Range("A9:F9") = arr '将数组元素显示在单元格

Dim maxIndex, minIndex As Integer
maxIndex = UBound(arr, 1)
minIndex = LBound(arr, 1)
MsgBox "最大索引号:" & maxIndex
MsgBox "最小索引号:" & minIndex


3.声明一个动态数组,然后将下图的值赋值给这个数组。
在这里插入图片描述

Dim arr() '声明0长度数组

ReDim arr(2, 3) '重新分配数组维度、大小, 注意事项:https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/redim-statement

arr = Range("A1:C2") '数组赋值

Range("E1:G2") = arr '验证

4.创建一个一维数组,数组的元素为1~9,然后用join函数将数组元素以“&”符号分隔,合并成一个字符串,然后用消息框显示出来。

Dim arr(9), I As Integer

For I = 1 To 9 '数组赋值
arr(I) = I
Next I

Dim arrStr As String
arrStr = Join(arr, "&") 'https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/join-function

MsgBox arrStr

笔记

自定义类

在这里插入图片描述
修改类名
在这里插入图片描述
给类添加字段
在这里插入图片描述

换行符

Chr(13)

MsgBox "第一行" & Chr(13) & "第二行"

字典操作

Sub Test()
Dim dic As New Dictionary

Add2Dic dic:=dic, key:="1", item:="1-0"

Add2Dic dic, "1", "1-1"

Add2Dic dic, "2", "2-0"

Add2Dic dic, "2", "2-0"


End Sub

Function Add2Dic(dic As Dictionary, key As String, item As String) As Integer
    Dim list As New Collection
    If dic.Exists(key) = True Then
        Debug.Print "已存在key: " + key
        Set list = dic(key)
        list.Add item
        PrintList list:=list
    Else
        list.Add item
        dic.Add key:=key, item:=list
        Debug.Print "不存在key: " + key
        PrintList list:=list
    End If
    Add2Dic = 1
End Function

Function PrintDic(dic As Dictionary)
    For Each key In dic.Keys
        Debug.Print key + ":" + dic(key)
    Next key
End Function

Function PrintList(list As Collection) As Integer
    Dim item As String
    For Num = 1 To list.Count
        item = list(Num)
        Debug.Print "item:" + item
    Next
    PrintList = 1
End Function

不存在key: 1
item:1-0
已存在key: 1
item:1-0
item:1-1
不存在key: 2
item:2-0
已存在key: 2
item:2-0
item:2-0