zoukankan      html  css  js  c++  java
  • Excel VBA入门(二)数组和字典

    数组和字典也是VBA的常用到数据类型之一。但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典。
    事实上,字典不是VBA内置的类型,它是Windows脚本语言的。但其实字典在VBA中也是非常重要的,它非常适用于需要进行非重复性数据的操作。我多次需要使用到字典,但很少用到数组。

    1. 数组

    如果有学过其它编程语言,应该对数组不陌生。其实数组就是多个变量的集合,而且它是有顺序的,通过索引来访问一个数组中的各个值。
    但应该记住的是:数组中的各个数据,它们的类型必须是相同的。

    数组也应当要先声明,后使用。VBA中的数组有动态数组和静态数组之分。

    1.1 静态数组

    所谓静态数组,即它的长度是固定不可变的。
    声明语法如下:

    Dim 数组名(a to b) As 数据类型
    

    其中a和b均为数字,表示数据的索引起始值。也可以只写一个数字,则此时数组使用默认索引,从1开始,数字表示它的长度。
    例如:

    Dim MyArray1(10) As String
    Dim MyArray2(10 to 20) As String
    

    1.2 动态数组

    如果在定义时并不知道需要使用的数组的长度是多少,则可以定义它为动态数组:

    Dim Myarr3() As String
    

    可以看到,定义动态数组,只需要在括号里面留空就行了。
    待确定了数组的长度之后,可以使用ReDim来重新定义数组

    1.3 数组的赋值与取值

    虽然都是通过索引来对数组进行赋值,但与其它主流的编程语言不同的是,VBA中不是使用中括号[]而是使用小括号()进行的。

    Dim arr(5) As String
    
    For i = 1 to 5
         '赋值
         arr(i) = i
    Next
    
    '取值
    Debug.Print arr(1)
    

    此外,也可以直接把Excel单元格中的数据赋值给数组。如上面定义的长度为5的一维数组,可以以以下方式把单元格中A1到A5的数据分别载入到数组arr中:

    arr = Range("A1:A5")
    

    1.4 多维数组

    VBA中也支持多维数组。
    如,定义一个四行五列的二维数组如下:

    Dim Myarr(4, 5) as String
    

    或者:

    Dim Myarr(1 to 4, 5 to 8) As String
    

    定义一个三维数组:

    Dim Myarr(3, 4, 5) As String
    

    或者:

    Dim Myarr(1 to 3, 4 to 6, 7 to 9) As String
    

    1.5 其它

    网上有说到很多对数组的操作,例如求数组的上下界,对数组求和等,我觉得这些都不算是数组的特有操作,因为它对其它数据类型也是可以使用的,所以就不打算再介绍了。有需要用到的,可以再查询

    2 字典

    字典其实就是一些“键-值”对。在很多场合,它都能起到很大的作用,使用起来非常方便,有类似于微型数据库的作用,可用于临时保存一些数据信息。

    2.1 创建字典

    VBA中创建字典有两种方法

    2.1.1. 引用声明

    在VBE菜单中,选择“工具-引用”,在弹出的对话框中选择中边的“浏览”,此时会打开Windows系统的驱动目录(C:WindowsSystem32),然后找到scrrun.dll,确定确定返回就行了。
    添加引用后,就可以像定义其它变量一样声明使用字典了。

    Dim d As New Dictionary
    

    2.1.2. 直接创建

    我目前基本上都使用的这种方法。可如下定义:

    Dim d As Object
    Set d = CreateObject("Scripting.Dictionary")
    

    2.2 字典的方法

    字典有6个方法,分别是Add、Exists、Keys、Items、Remove、RemoveAll。使用方法如下:

    2.2.1 Add

    用于添加内容到字典中。

    d.Add key, item
    

    第一个参数为键,第二个参数为键对应的值

    2.2.2 Exists

    用于判断指定的关键词是否存在于字典(的键)中。

    d.Exists(key)
    

    如果存在,返回True,否则返回False。通常会在向字典中添加条目的时候使用,即先判断字典中是否已存在这个记录,如果不存在则新增,否则进行其它的操作。

    2.2.3 Keys

    获取字典所有的键,返回类型是数组。

    d.Keys()
    

    2.2.4 Items

    获取字典所有的值,返回类型是数组。

    d.Items()
    

    2.2.5 Remove

    从字典中移除一个条目,是通过键来指定的。

    d.Remove(key)
    

    如果指定的键不存在,会发生错误。

    2.2.6 RemoveAll

    清空字典。

    2.3 字典的属性

    字典有4个属性:Count、Key、Item、ConpareMode

    2.3.1 Count

    用于统计字典中键-值对的数量。也可以简单理解为统计字典中键的个数。

    d.Count
    

    2.3.2 Key

    用于更改字典中已有的键。如:

    d.Key("apple") = "Orange" 
    

    如果指定的键不存在,则会产生错误。

    2.3.3 Item

    用于写入或读取字典中指定键的值,如果指定的键不存在,则会新增。如:

    '读取
    Debug.Print d.Item("apple")
    
    '写入
    d.Item("apple") = 10
    

    2.3.4 CompareMode

    CompareMode用于设置或者读取字典对象中比较字符串时的比较模式。
    这个到目前为止我还没有用过。所以不讨论了。


    本系列教程其它文章

    Excel VBA 入门(零)
    Excel VBA 入门(一)数据类型
    Excel VBA 入门(二)数组和字典
    Excel VBA 入门(三) 流程控制1-条件选择
    Excel VBA 入门(四)流程控制2-循环控制
    Excel VBA 入门(五)Excel对象操作
    Excel VBA 入门(六)过程和函数
    Excel VBA 入门(七)注释、宏按钮及错误处理
    Excel VBA 入门(八)单元格边框
    Excel VBA 入门(九)操作工作薄
    Excel VBA 入门(十)用户窗体开发

  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/vba_two.html
Copyright © 2011-2022 走看看