|
回复楼主 第1840楼问题
可能是我没表达清楚,嘿嘿!
我并没说arr = [A1:B3] 就是对某个单元格区域命名,而是说这样直接将某个区域赋值给数组,对数组的引用和单元格区域命名的引用极为相似!看了一些其他的帖子,同时自己实践得出的,将“直接将某个区域赋值给数组”的各种情况汇总。
请看下面的这几段代码(附件中已经有):
'赋给数组的区域为多行多列,变量定义为arr()
Sub test1()
Dim arr()
arr = [A1:B3].Value '必须加.value才能正确运行,且arr默认为二维数组,,起始标号均为1
MsgBox arr(2, 1) '分别为arr(1, 1),arr(1, 2),arr(1, 3),arr(2, 1),arr(2, 2),arr(2, 3)六个元素
End Sub
'赋给数组的区域为一行,变量定义为arr()
Sub test2()
Dim arr()
arr = [A1:C1].Value '必须加.value才能正确运行,且arr默认为二维数组,起始标号均为1
MsgBox arr(1, 1) '分别为arr(1, 1),arr(1, 2),arr(1, 2)三个元素
End Sub
'赋给数组的区域为一列,变量定义为arr()
Sub test3()
Dim arr()
arr = [A1:A3].Value '必须加.value才能正确运行,且arr默认为二维数组,起始标号均为1
MsgBox arr(3, 1) '分别为arr(1, 1),arr(2, 1),arr(3, 1)三个元素
End Sub
'赋给数组的区域为多行多列,变量定义为arr
Sub test4()
Dim arr
arr = [A1:B3] '加不加.value都能正确运行,且arr默认为二维数组,起始标号均为1
MsgBox arr(2, 1)
End Sub
'赋给数组的区域为一行,变量定义为arr
Sub test5()
Dim arr
arr = [A1:C1] '加不加.value都能正确运行,且arr默认为二维数组,起始标号均为1
MsgBox arr(1, 1) '分别为arr(1, 1),arr(1, 2),arr(1, 3)三个元素
End Sub
'赋给数组的区域为一列,变量定义为arr
Sub test6()
Dim arr
arr = [A1:A3] '加不加.value都能正确运行,且arr默认为二维数组,起始标号均为1
MsgBox arr(3, 1) '分别为arr(1, 1),arr(2, 1),arr(3, 1)三个元素
End Sub
'赋给数组的区域为一行,变量定义为arr
Sub test7()
Dim arr
arr = [A1:C1&""] 'arr为一维数组,起始标号为1
MsgBox arr(2) '分别为arr(1),arr(2),arr(3)三个元素
End Sub
'赋给数组的区域为一列,变量定义为arr
Sub test8()
Dim arr
arr = Application.WorksheetFunction.Transpose([A1:A3]) 'arr为一维数组,起始标号为1
MsgBox arr(3) '分别为arr(1),arr(2),arr(3)三个元素
End Sub
大家仔细对比就会发现“直接将某个区域赋值给数组”的不同方式:
1、变量定义有两种:dim arr 或者 dim arr(),建议采用dim arr 的定义,省事且不易出错;
2、区域直接赋值给数组时,若采用如下类似形式:
arr = [A1:A3] (单列)或arr = [A1:C1] (单行)或 arr = [A1:B3] (多行多列)
则数组为二维数组,引用时采用二维数组arr(i,j)的形式既可,但一定要注意起始标号为1,同时,数组有多少元素与赋给的单元格数目一致。这时就“对数组的引用和单元格区域命名的引用极为相似!”
3、若将一行或一列区域赋值给一维数组,
一行的形式为:arr = [A1:C1&""] ,一列的形式为:arr = Application.WorksheetFunction.Transpose([A1:A3])
引用时采用一维数组arr(i)的形式既可,但一定要注意起始标号为1,同时,数组有多少元素与赋给的单元格数目一致。
其中情况二,区域不做任何处理赋给数组,数组就是二维数组,是我无意中试出来的,嘿嘿! |
|