欢迎光临!弹性体技术站 PHPv3.0版
服务热线全国服务热线:

15015691537

您的位置: HOME > 文章导读 > 职场办公 > VBA数组函数学习及数组的常见问题

本站新闻

VBA数组函数学习及数组的常见问题

Excel VBA中数组的常见问题集锦:
1.数组定义中Dim Arr() As Variant与Dim Arr As Variant的区别

Dim Arr As Variant只是定义了一个Variant型变量,不代表这是数组

Dim Arr() As Variant是定义了一个动态数组,数组中的元素是Variant型

2.数组下标的区别

数组默认下标可能为0或者1,具体情况如下

(1)使用方括号赋值或者从工作表Range读入数据并赋值给数组时,下标为1

方括号赋值举例:

[{“一”, “二”, “三”, “四”}] ‘一维数组

[{“五”, “六”;”七”, “八”}] ‘二维数组

工作表Range赋值时,即使只有一列数据,也是一个二维数组。

(2)利用Array()函数为数组赋值时,下标取决于Option Base语句

如有Option Base 1,数组下标为1;如有Option Base 0或省略该句,数组下标为0。

其中Option Base语句是模块级语句,必须写在模块的最前部分,且不能后续更改。

(3)如果未指定Option Base 1,且想用Array()函数批量赋值,并使下标为1,是做不到的,只能先定义下标为1的数组(动态数组Redim亦可),然后对元素依次赋值。

3.静态数组不允许Redim,动态数组允许Redim,Redim只允许改变最高维

例如:

Dim Arr(1 To 2) As Variant,不允许Redim Arr(1 To 3)

Dim Arr() As Variant,允许Redim Arr(1 To 3)

4.二维数组与数组嵌套

(1)方括号赋值可以直接对二维数组赋值,举例见2(1)部分

(2)Array()函数不能形成二维数组,只能是数组的嵌套

(3)二维数组必须是一个“矩形”,而数组嵌套则无此限制

举例:

Arr1=[{“一”, “二”; “三”, “四”}] ‘允许

Arr2=[{“一”, “二”; “三”, “四”, “五”}] ‘不允许

Arr3=Array(Array(“一”, “二”), Array(“三”, “四”, “五”)) ‘形成的是一维数组的嵌套,Arr3()有两个元素,都是数组,其中第一个数组有两个元素,第二个数组有三个数组

如果要引用Arr1中值为”三”的元素,代码为Arr(2,1);要引用Arr2中值为”三”的元素,代码为Arr(2)(1)。

VBA中的5个内置数组函数:

Array函数
Array函数允许你在代码执行中间创建一个数组,而不必事先确定其大小。该函数总是返回一个Variant数组。使用Array函数你可以快速地将一系列数据放置在一个清单里面。下面的过程创建了一个叫做auto的固定大小,一维的三个成员的数组。

1. 在当前工程里插入一新模块
2. 输入下列过程 Array函数:
Option Base 1
Sub Array函数()
Dim arr As Variant
arr= Array(“再战”, “江湖”, “2021”)
MsgBox arr(2) & ” ” & arr(1) & “, ” & arr(3)
arr(2) = “龙争虎斗”
MsgBox arr(2) & ” ” & arr(3) & “, ” & arr(1) & arr(2)
End Sub
另外一个例子,示范如何使用Array函数将列标输入到工作表里:
Sub ColumnHeads()
Dim heading As Variant
Dim cell As Range
Dim i As Integer
i = 1
heading = Array(“First Name”, “Last Name”, “Position”, _
“Salary”)
Workbooks.Add
For Each cell in Range(“A1:D1”)
cell.Formula = heading(i)
i = i+1
Next
Columns(“A:D”).Select
Selection.Columns.AutoFit
Range(“A1”).Select
End Sub
IsArray函数
Sub IsThisArray()
‘declare a dynamic array 声明一动态数组
Dim sheetNames() As String
Dim totalSheets As Integer
Dim counter As Integer
‘count the sheets in the current workbook 计数当前工作簿里的工作表数目
totalSheets = ActiveWorkbook.Sheets.Count
‘specify the size of the array 明确数组大小
ReDim sheetNames(1 To totalSheets)
‘enter and show the names of sheets 输入和显示工作表名称
For counter = 1 to totalSheets
sheetNames(counter) = ActiveWorkbook.Sheets(counter).Name
MsgBox sheetNames(counter)
Next counter
‘check if this is indeed an array 检查它是否确实为数组
If IsArray(sheetNames) Then
MsgBox “The sheetNames is an array.”
End If
End Sub

Erase函数
当你要清除数组里的数据时,应该使用Erase函数。该函数删除静态或动态数组储存的所有数据,另外,对于动态数组,Erase函数将重新分配原来分配给该数组的所有内存。下面的例子教你如何删除数组cities里的数据。

1. 在当前工程里插入一新模块,重命名为Erase_Function
2. 输入如下过程FunCities:
‘ start indexing array elements at 1
Option Base 1
Sub FunCities()
‘declare the array
Dim cities(1 to 5) As String
‘assign the values to array elements
cities(1) = “Las Vegas”
cities(2) = “Orlando”
cities(3) = “Atlantic City”
cities(4) = “New York”
cities(5) = “San Francisco”
‘display the list of cities
MsgBox cities(1) & Chr(13) & cities(2) & Chr(13) _
& cities(3) & Chr(13) & cities(4) & Chr(13) _
& cities (5)
Erase cities
‘show all that was erased
MsgBox cities(1) & Chr(13) & cities(2) & Chr(13) _
& cities(3) & Chr(13) & cities(4) & Chr(13) _
& cities (5)
End Sub
在函数Erase清除数组里的数据后,函数MsgBox就显示一个空信息框了。

LBound函数和UBound函数
LBound函数和UBound函数分别返回表明数组的下界和上界的数字。

1. 在当前工程里插入模块,命名为L_and_UBound_Function
2. 输入如下代码FunCities2:
Sub FunCities2()
‘declare the array
Dim cities(1 to 5) As String
‘assign the values to array elements
cities(1) = “Las Vegas”
cities(2) = “Orlando”
cities(3) = “Atlantic City”
cities(4) = “New York”
cities(5) = “San Francisco”
‘display the list of cities
MsgBox cities(1) & Chr(13) & cities(2) & Chr(13) _
& cities(3) & Chr(13) & cities(4) & Chr(13) _
& cities (5)
‘display the array bounds
MsgBox “The lower bound: ” & LBound(cities) & Chr(13) _
& “The upper bound: ” & UBound(cities)
End Sub
当你要确定一个二维数组的上下界时,你就必须明确维数:1表示第一维,2表示第二维。在本章早先时候将的Exchange过程里的后面加上如下语句,可以确定该二维数组的上下界(将下列代码加入到关键字End Sub之前):
MsgBox “The lower bound (first dimension) is ” _
& LBound(Ex, 1) & “.”
MsgBox ” The upper bound(first dimension) is ” _
& UBound(Ex, 1) & “.”
MsgBox “The lower bound (second dimension) is ” _
& LBound(Ex, 2) & “.”
MsgBox ” The upper bound(second dimension) is ” _
& UBound(Ex, 2) & “.”

扫一扫,加站长微信!关闭
二维码
xhmsater liebelib.net hardx.com
chachi ko choda onlyindianporn2.com tamilnadu sex film
indiangaysex videos apacams.com haryana chut
xvideo free porn dirtyindianporn2.com 3gp xxx sex videos
reshma and salman sex video freeindianporn3.com nice girl sex video
malllu porn hindiporn2.com hindi video sexy chudai
indians real sex videos kings-porno.com roshni prakash
joinsex bananocams.com bazigar film
www new hindi sex video com freeindianporn3.com kashmiri girl sex
x vdieos dirtyindianporn.info sexfalm
nude bangali girl pakistanporn.info hot call girl video
vedo javmobile.mobi www.indian uncovered.com
xxx indin kashtanka.mobi kuttywapcom
xossiop 2beeg.me sex with house maid
damp lips fuckindiantube.mobi porn hup.com