例解Excel VBA 联系客服

发布时间 : 星期四 文章例解Excel VBA更新完毕开始阅读031b8adff111f18582d05a8f

Sheets(1).Cells(t + 1, 3) = k Sheets(1).Cells(t + 1, 4) = l Sheets(1).Cells(t + 1, 5) = m Sheets(1).Cells(t + 1, 6) = n End If

Next

Next

Next

Next

Next

MsgBox \元换为零钱共有\种方法!\

End Sub

(8)以上程序中内循环的执行数数如下: 51×21×11×6×3=212058次

可以看出减少最外层循环的101次,可使用内循环体提高100倍的执行效率。 本例程序还有很多优化方法,这里就不再介绍。

完全手册Excel VBA典型实例大全:通过368个例子掌握

3.4 使用数组

http://book.csdn.net/ 2008-7-31 15:35:00

图书导读 当前章节:3.4 使用数组 ·3.1 常用输入/输出语句 ·3.2 分支结构 ·3.3 循环结构 ·12.1 处理公式 ·12.2 数据查询 ·12.3 数据排序 3.4 使用数组

在程序中,如果要处理大量的数据,为每个数据定义一个变量将使程序变得很难阅

读,并且代码很烦琐。 对于大量有序的数据,可以使用数组对其进行存储和处理。在其他程序设计语言中, 数组中的所有元素都必须为同样的数据类型,在VBA中,数组中各元素可以是相同的数据类型,也可以是不同的数据类型。

例029 数据排序

1.案例说明

在Excel中可以方便地对单元格区域中的数据进行排序。本例使用VBA程序首先让

用户输入10个数据,然后使用冒泡排序法对这10个数进行排序。 2.关键技术

在程序中处理大量数据时,使用数组来保存是比较好的方法。数组使用之前可以使 用Dim、Static、Private或Public语句来声明。在VBA中,数组最大可以达到60维,最常用的是一维数组和二维数组。

定义一维数组的语法格式如下:

Dim 数组名([下界 To] 上界) As 数据类型

其中―下界‖可以省略,只给出数组的上界(即可以使用的最大下标值),这时默认

值为0,即数组的下标从0开始至定义的上界,如: Dim MyArray(10) As String

定义了一个名为MyArray的数组,共有11个元素,分别为MyArray(0)、

MyArray(1)、…、MyArray(10)。

如果希望下标从1开始,可以通过Option Base语句来设置,其语法格式如下: Option Base 1 使用该语句指定数组下标的默认下界,只能设为0或1。 —

该语句只能出现在用户窗体或模块的声明部分,不能出现在过程中,且必须放在数

组定义之前。

3.编写代码

(1)新建Excel工作簿,按快捷键―Alt+F11‖进入VBE环境。 (2)单击菜单―插入/模块‖命令向工程中插入一个模块。 (3)在模块中编写以下代码:

Option Base 1

Sub 数据排序() Dim i As Integer, j As Integer

Dim k

Dim s(10) As Integer

For i = 1 To 10

s(i) = Application.InputBox(\输入第\个数据:\输入数组\

Next

For i = 1 To 9

For j = i + 1 To 10 If s(i) < s(j) Then

t = s(i)

s(i) = s(j)

s(j) = t

End If

Next

Next

For Each k In s

Debug.Print k

Next

End Sub

在VBA中使用Inputbox函数接受用户输入数据时,返回的值为文本型。以上代码 中使用了Application对象的InputBox方法来接受用户输入数据,该方法的语法格式如下:

Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID,

Type)

设置Type参数可指定返回的数据类型,如本例设置其值为2,则返回的值为数值型。

(4)运行上面的宏,弹出如图3-33所示的对话框,提示用户输入数据。循环程序要求用户输入10个数据。

(5)最后在―立即窗口‖输出排序的结果,如图3-34所示。

图3-33 输入数据 图3-34 排序结果

例030 彩票幸运号码

本例结合数组和随机函数的知识,生成指定数量的彩票幸运号码。本例生成的彩票号码每注由7位数构成,首先让用户输入产生的注数,再使用循环语句生成指定注数的号码。

2.关键技术

本例代码中使用了两个关键技术:动态数组和随机函数。 (1)动态数组 本例使用二维数组保存所有的彩票号码,二维数组的定义格式如下: Dim 数组名(第1维上界, 第2维上界) As 数据类型 或

Dim 数组名(第1维下界 To 第1维上界, 第2维下界 To 第2维上界) As 数据类型

在本例中,因为生成的彩票数量是由用户输入的数据决定的。因此这里使用动态数组。

动态数组是指在程序运行时大小可以改变的数组,定义动态数组一般分两个步骤:首先在用户窗体、模块或过程中使用Dim或Public声明一个没有下标的数组(不能省略括号),然后在过程中用ReDim语句重定义该数组的大小。

ReDim语句在过程级别中使用,用于为动态数组变量重新分配存储空间。其语法格式如下:

ReDim [Preserve] 数组名(下标) [As 数据类型]

可以使用ReDim语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用ReDim将该数组改为其他数据类型,除非是Variant所包含的数组。

在默认情况下,使用ReDim语句重定义数组的维数和大小时,数组中原来保存的值将全部消失,如果使用Preserve关键字,当改变原有数组最后一维的大小时,可

1.案例说明

以保持数组中原来的数据。 如果使用了Preserve关键字,就只能重新定义数组最后一维的大小,并不能改变维数的数目。

(2)随机函数Rnd 随机函数Rnd可返回小于1但大于或等于0的一个小数。其语法格式如下:

Rnd[(number)]

可选的number参数是Single或任何有效的数值表达式。根据number参数值的不同,Rnd函数生成的随机数也不同:

— number<0,则每次使用相同的number作为随机数种得到的相同结果。 — number>0,则将生成随机序列中的下一个随机数。 — number=0,则将生成最近生成的数。

— 省略number,则生成序列中的下一个随机数。

在调用Rnd之前,先使用无参数的Randomize语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子。 为了生成某个范围内的随机整数,可使用以下公式: Int((上限 – 下限 + 1) * Rnd + 下限)

3.编写代码

(1)新建Excel工作簿,按快捷键―Alt+F11‖进入VBE环境。 (2)单击菜单―插入/模块‖命令向工程中插入一个模块。 (3)在模块中编写以下代码:

Option Base 1

Sub 幸运号码() Dim n As Integer, i As Integer, j As Integer

Dim l() As Integer

n = Application.InputBox(\请输入需要产生幸运号码的数量:\幸运号码\

ReDim l(n, 7) As Integer

For i = 1 To n

For j = 1 To 7

Randomize

l(i, j) = Int(10 * Rnd)

Next

Next

For i = 1 To n

For j = 1 To 7

Debug.Print l(i, j);

Next

Debug.Print

Next

End Sub

(4)运行上面的宏,弹出如图3-35所示的对话框,提示用户输入数据。输入生成