该自定义函数,首先具有Index(arr,i,j)这样从数组中提取任意行、列得到新数组的功能,
但功能更强大:
一、Index数组提取功能:
1. 可以提取多行、多列得到二维数组
同时也能根据需要返回一维数组结果 (而Index函数只能得到指定某行、或指定某列的单一的一维数组)
2. 也可以只提取某些行、某些列中的部分行、部分列。(默认提取整行、整列)
二、数组Redim功能:
指定行数、列数以后,当然就可以直接得到新的不同行数、列数的新数组了。
尤其重要的是:可以同时扩展/缩小行数以及列数,而Redim函数只能处理最后一维(二维数组中的第2维)
当然,有一个缺点是:
我的自定义函数目前只能处理一维和二维数组,不包括三维以上的多维数组。(因为无实用性,所以不弄了)
三、数组Transpose转置功能:
使用"T"参数就可以进行二维数组的转置了。
其它:
新数组的下标起始值,可以定义修改。
如原来是arr(1, 1)开始的二维数组,
可以转换为arr(0, 0)开始的二维数组,或转换为arr(2, 2)开始、或arr(-1, -1)开始的新的二维数组。
目前行列的开始值都是相同的……没有考虑不同的情形。
但是也可以选择默认采用原数组起始值作为新数组的开始,
如选择从 arr(2,3)开始提取数据,并得到arr(2,3)开始的数组。(或设置为arr(0, 0)、arr(1, 1)等)
下面是部分应用实例:- Sub test()
- arr = [a1:e10]
- ar11 = Index2(arr, 3)
- ar12 = Index2(arr, 3, , 1)
- ar13 = Index2(arr, 3, , 2)
- ar14 = Index2(arr, 3, , "")
- ar15 = Index2(arr, 3, , 0, -1)
- ar16 = Index2(arr, 3, , "", -1)
- ar17 = Index2(arr, 3, , 3, -1)
-
- ar18 = Index2(arr, 3, , , 1)
- ar19 = Index2(arr, 3, , 1, 1)
-
- ar21 = Index2(arr, 3, 2)
- ar22 = Index2(arr, 3, 2, "", 1, 0)
- ar23 = Index2(arr, 3, 2, "", 1, 3)
-
- ar24 = Index2(arr, 3, 2, , 5, 4)
- ar25 = Index2(arr, 3, 2, 1)
- ar26 = Index2(arr, 3, 2, 0, 5, 4)
- ar27 = Index2(arr, 3, 2, 1, 5, 4)
- ar28 = Index2(arr, 3, 2, "", 5, 4)
-
- ar30 = Index2(arr, 3, 2, , 1, 1)
- ar31 = Index2(arr, 3, 2, 1, 1, 1)
-
- ar40 = Index2(arr, , 2)
- ar41 = Index2(arr, , 2, , 5)
- ar42 = Index2(arr, 3, 2, , 5)
-
- ar50 = Index2(arr)
- ar51 = Index2(arr, , , "")
- ar52 = Index2(arr, , , "T")
- ar53 = Index2(arr, , , "T0")
-
- ar60 = Index2(arr, , , , UBound(arr) + 5, UBound(arr, 2) + 3)
- ar61 = Index2(arr, , , "T", UBound(arr) + 5, UBound(arr, 2) + 3)
- ar62 = Index2(arr, , , "T2", UBound(arr) + 5, UBound(arr, 2) + 3)
- Stop
- End Sub
复制代码 |