精华内容
下载资源
问答
  • 程序功能:从三维数组中提取出任意二维的数据,并保存在新的二维矩阵中,且能所以变换顺序。
  • 二维数组的嵌套并非三维数组 2 数组的嵌套写法 1维数组的嵌套:arr(m)(i) 2维数组的嵌套:arr(m)(i,j) Sub test1001() Debug.Print "测试一维数组和其嵌套" '一维数组 arr1 = Array(1, 3, 5, 7, 9) arr2 = ...

    1 数组嵌套的知识

    • 1维数组的嵌套并非2维数组
    • 二维数组的嵌套并非三维数组

     

    2 数组的嵌套写法

    • 1维数组的嵌套:arr(m)(i)
    • 2维数组的嵌套:arr(m)(i,j)
    Sub test1001()
    
    
    Debug.Print "测试一维数组和其嵌套"
    '一维数组
    arr1 = Array(1, 3, 5, 7, 9)
    arr2 = Array(2, 4, 6, 8, 10)
    
    
    '一维数组的嵌套
    arr3 = Array(arr1, arr2)
    'Debug.Print arr3(1, 1)    '证明了一维数组的嵌套,只是嵌套类型,不是2维数组
    Debug.Print arr3(1)(1)
    
    Debug.Print
    
    
    Debug.Print "测试二维数组和其嵌套"
    
    Dim arr51()
    ReDim arr51(3, 3)
    '2维数组
    For I = 1 To 3
       For J = 1 To 3
          arr51(I, J) = 2 * I * J
          Debug.Print arr51(I, J);
       Next
       Debug.Print
    Next
    Debug.Print
    
    
    Debug.Print arr51(1, 1)
    Debug.Print
    
    
    Dim arr52()
    ReDim arr52(4, 4)
    '2维数组
    For I = 1 To 4
       For J = 1 To 4
          arr52(I, J) = 3 * I * J
          Debug.Print arr52(I, J);
       Next
       Debug.Print
    Next
    Debug.Print
    
    
    Debug.Print arr52(1, 1)
    Debug.Print
    
    '2维数组的嵌套
    arr53 = Array(arr51, arr52)
    Debug.Print arr53(1)(1, 1)       '二维数组的嵌套,也不需要2个数组行列相同
    Debug.Print
    
    
    
    Debug.Print "测试二维数组和其嵌套,第2种办法,[{}] 这种写法必须index从1开始"
    '2维数组
    'arr11 = [{1,3,5};{5,7,9}]
    'arr12 = [{2,4,6};{6,8,10}]
    arr11 = [{1,3,5;5,7,9}]
    arr12 = [{2,4,6;6,8,10}]
    Debug.Print arr11(1, 1)
    
    
    
    '2维数组的嵌套
    arr13 = Array(arr11, arr12)
    Debug.Print arr13(1)(1, 1)
    
    
    
    
    Debug.Print "测试二维数组和其嵌套,第3种办法---[{,,, ; ,,,}]只有一种写法  []其他写法不是数组"
    '2维数组
    'arr21 = [{1,3,5};{5,7,9}]
    'arr22 = [{2,4,6};{6,8,10}]
    arr21 = [{1,3,5},{5,7,9}]
    arr22 = [{2,4,6},{6,8,10}]
    
    
    End Sub

     

     

     

     

     

    其实我这上面的例子不算嵌套数组,而是组合数组

    下面这张才是嵌套数组

    嵌套数组还可以  transpose 为二维数组

     

    http://club.excelhome.net/thread-640048-1-1.html

    展开全文
  • 今天和大家要说的是VBA数组的应用,上篇文章我们说的是数组的基础知识点,有不明白的小伙伴可以点击链接进行知识点回顾,今天主要说说数组的几个操作方法,这个是我们以后会经常遇到的,也是经常会使用的方法。...

    今天和大家要说的是VBA数组的应用,上篇文章我们说的是数组的基础知识点,有不明白的小伙伴可以点击链接进行知识点回顾,今天主要说说数组的几个操作方法,这个是我们以后会经常遇到的,也是经常会使用的方法。

    上篇文章回顾:Excel VBA 数组基础知识,初学者不可不学的关键知识

    数组的合并和字符串拆分(Join & Split)

    在Excel的数据处理时候,我们经常会遇到拆分和合并的操作,可能你在Excel中的基础操作都会,但是我们如果要操作数组呢?数组是在我们内存之中的,我们无法再Excel中可以看到,除非是在本地窗口中可以看到。

    一起来看看例子:

    拆分字符串  split(字符串,"分隔符")

    用分隔连接数组的每个元成一个字符串  join(数组,"分隔符")  

    e5dffff1a89619ad1be5f318e08dda75.png

    是不可以看到这2个函数的用法其实很简单,他们的作用是相反的,一个是合并,一个拆分,天下分分合合,就在你和我之间。有么有喜欢上这对冤家?

    但是需要注意的一点是,他们都只能操作一维数组,这个是比较限制的。如果们在二维数组时候,想使用个方法,我们应该第一步转化成一维数组,然后在操作即可。

    Filter实现数组筛选:

    其实数组的筛选就是根据我们指定的条件,从数组中筛选出来符合我们指定条件的值,然后在组成一个新的数组。这个操作你肯定不陌生,如下图所示,我们在Excel中的常规操作:

    f6fd17d3ce40c77e28fa0c78dc6c3297.png 

    但是今天我们猪脚是在数组中进行帅选,我们用的是Filter函数,用法是:Filter(数组, 筛选的字符,  是否包含) 

    我们可能只说使用方法,其实你还是不太明白,我们举一个例子,你看了就明白,如需他所示:

    bf93d80008d784f31973961e08865089.png

    Arr是我们利用常数数组进行赋值的数组,arr1是我们帅选包括字符”A”的新组成的一个数组,arr2,是我们帅选出来不包括“A”的新数组。不知道你发现没有,我们在数组中使用这个函数的时候,只能模糊帅选,并不能精确进行帅选,这个请务必注意一点。

    取出数组中的最大值和最小值(Max和Min) 

    在Excel中我们取出最大值和最小值,我们都是用的MAX和MIN函数,其实这2个在我们的数组中,亦可使用,具体使用方法如下所示:

    5132e5b8d2a3ab6934f6ac67a220d6da.png

    顺便再说一下,我们也可以取出数组的第几大值和几小值,如下:

    ac1f87fc8a552fcb4c2366a36adcf888.png

    这个方法在我们统计数据的时候,经常会用到。

    数组求和

    在数组中,我们同样可以求和,同样也是借用工作表函数SUM来完成,我们一起看看:

    9204dc857b052f7102fc67efec522aee.png

    是不是发现,数组怎么这么好用?其实数组操作还不止这些,我们在继续看看:

    数组的计数Count和Counta

    Count和Counta可以统计数组中数字的个数和数字+文本的个数。如下图所示:

    81d993e877224b847fbec83b4510f507.png

    Count和Counta在数组中和Excel中的使用方法是一样的,是通用的。

    数组的查询和拆分

    假如我们已经有了一个数组,但是我们想查询其中的某一个值,通过帅选只能模糊匹配,那我们有没其他的方法呢?如下:

    531dcca412bbf832eaad25eb8a6789ca.png

    数组从二维拆分成一维,你是否还记得我们上篇文章说的?

    我们可以借用工作表函数index达到按列拆分数组,即多列构成的数组,你可以任意拆分出一列构成新的数组。方法是:Application.Index(数组, , 列数) :

    0e5e903c9ed84a36d69f2704502b2756.png

    数组拆分其实在VBA中间很难操作,有时候我们是借用API函数,或者说这个函数有多少人知道呢?所以我们一般记下index函数拆分数组即可:

    数组维数的转换

    今天说的最后一个,数组的维数的转变。这个也可借用工作表函数来完成这个,我们一起来看看吧 !

    ec440d096cc9f66c2060740a268cbcc2.png

    在转置时只有1列N行的数组才能直接转置成一维数组,这个请注意一下,否则会报错的。

    其实我们很多的工作表函数都可以在我们的Excel中进行使用,我们可以自行尝试一下,看看实际的效果。

    1375342858ee4347fd3db260492c7b4e.png

    以上就是我们今天和大家说的代码的中的数组常用技巧,其实VBA代码学习起来非常简单,他就是一个脚本语言的存在,他有自己的条条框框,你按照他的游戏规则来写代码就可以。如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。

    我是Excel教案,关注我持续分享更多的Excel技巧!

    展开全文
  • 维数组可以通过这样一行代码来整体赋值:arr = Array("你", "我", "他", "1", "2", "3", "aa", "bb", "cc")那么,如果想给二维数组采用类似的方法来整体赋值,要怎么办呢? arr=array("你", "我", "他" ;"1", "2...

    一维数组可以通过这样一行代码来整体赋值:arr = Array("你", "我", "他", 1, 2, 3, "aa", "bb", "cc")
    那么,如果想给二维数组采用类似的方法来整体赋值,要怎么办呢?

    arr=array("你", "我", "他"  ; 1,2, 3 ; "aa", "bb", "cc"),好像不行。

    一番搜索,网上给出的答案有如下:

    第一种:使用[{}]将字符串括起来,字符串行间用分号(;)分割,列间用逗号(,)分割:

    arr = [{"你", "我", "他"; 1, 2, 3; "aa", "bb", "cc"}]

    第二种:使用array函数进行构造,但要转置两次后方可得到结果

    arr=Array(Array("你", "我", "他"),Array(1, 2, 3),Array("aa", "bb", "cc"))

    arr=Application.Transpose(Application.Transpose(arr))

    第三种:使用evaluate,大部分情况下 等同于[]

     arr = Application.Evaluate("{""你"", ""我"",""他"";1 , 2 , 3 ;""aa"", ""bb"" , ""cc""}")

    特殊情况,

    以上三种情况,当一行代码写起来太长,不方便检查,需要按多行来写时,第1种办不到,第2种代码太多,第3种稍有优势。

    数字类型的,可以按如下方法书写:

        arr= application.Evaluate("{1,3;" _
            & "2,30;" _
            & "3,50;" _
            & "4,80}")

    文本类型的,记得双引号由一对变两对书写:

        arr = Application.Evaluate("{""你"", ""我"",""他"";" _
            & "1 , 2 , 3 ;" _
            & """aa"", ""bb"" , ""cc""}")

    最后总结一下三种方法的特点:

     

    序号代码示意代码特点字符串数量(个)有文本时字符串双引号数量代码行数
    1arr=[{  字符串  }]精简1一对1
    2arr=Array(Array(字符串1),Array(字符串2),Array(字符串3))复杂一对
    3arr = Application.Evaluate("{ 字符串 }“)普通1,多两对

     

     

     

    展开全文
  • 1 三维数组的正常定义 1.1 定义为静态数组 Sub test1001() '静态数组的方法定义三维数组 Dim arr1(3, 3, 3) N = 1 For I = 1 To 3 For J = 1 To 3 For K = 1 To 3 arr1(I, J, K) = N Debug.Print "arr...

    结论:

    本文涉及内容

    • 从4维数组看对多维数组的认识
    • 3维数组和数组嵌套的区别
    • 以及3维数组与redim()的使用注意点

     

    数组的dim arr1() 或 redim arr1()

    • 数组可以dim 或者redim
    • 只有在循环过程中,不断的redim 我觉得才是动态数组!
    • 数组在redim arr1() 那一刻就被定义了,之后无法被改变
    • 如果数组已经 dim arr1() 后面就不能在redim 了
    • 但是redim 可以重复进行,所以也可以在循环过程中 redim 

     

    低级错误1:多维数组和数组嵌套是一回事吗?NO

    • 多维数组不同于数组嵌套
    • 多维数组,是数组结构的定义,书写的方式是 array(x,y) ---准确的写法是 array(0 to x, 0 to y)
    • 数组嵌套,是数组的某个元素的构成允许嵌套,书写的方式是  array()()
    • 还是理解的不深,以后还需要再思考

     

    低级错误2:两种语法区分

    •  下面两者傻傻分不清楚
    • dim array1(1,1,1)       这个是 dim array1(0 to 1 ,0 to 1,0 to 1) 的简写,定义的是1个3维数组
    • 错误写法   dim array(1,1,1,1) 不允许使用保留字
    •  arr1=array(1,1,1,1)       这个是用1个一维数组array(1,1,1)赋值给一个变量arr1

     

     1 什么是 多维数组?

    1.1 从1个4维数组举例说起

    • 定义4维数组
    • 简单的静态方法  dim arr1(a,b,c,d)
    Sub test1001ccc()
    '静态数组的方法定义4维数组
     
    Dim arr1(1, 1, 1, 1)
    x = 1
    For i = 0 To 1
        For j = 0 To 1
            For K = 0 To 1
                For m = 0 To 1
                        arr1(i, j, K, m) = x
                        x = x + 1
                        Debug.Print "arr1(" & i & "," & j & "," & K & "," & m & ")=" & arr1(i, j, K, m) & "   ";
    
                Next
                Debug.Print
            Next
            Debug.Print
        Next
        Debug.Print
    Next
    End Sub
    

     

    1.2 从4维数组的内容展示,尝试对4维数组的理解

    这个是上面那个4维数组的内容展示

    arr1(0,0,0,0)=1   arr1(0,0,0,1)=2   
    arr1(0,0,1,0)=3   arr1(0,0,1,1)=4   

    arr1(0,1,0,0)=5   arr1(0,1,0,1)=6   
    arr1(0,1,1,0)=7   arr1(0,1,1,1)=8   


    arr1(1,0,0,0)=9   arr1(1,0,0,1)=10   
    arr1(1,0,1,0)=11   arr1(1,0,1,1)=12   

    arr1(1,1,0,0)=13   arr1(1,1,0,1)=14   
    arr1(1,1,1,0)=15   arr1(1,1,1,1)=16   

    •  dim arr1(1,1,1,1) 这个是个4维数组
    • 可以理解arr1(a,b,c,d) 每个 a  b  c d  代表1维
    • 也可以理解从数组的内容展示分组,每1维的展示关系,有这种逻辑的包含关系(是不是非要用3维坐标系思考的一种谬误?)
    • 但是数据的完整真实,确实一层层存在这种包含关系啊
    • 头脑上始终存在一个3维坐标系

      

     

    1.3 极限情况下:每1维都只有1长度,还是多维数组吗? YES

    如果只有每个维度只有1,整个数组只有1个元素呢,还是多维数组吗?我觉得是

    • 下面的还是3维数组
    • 可以理解维一个单位维1的小立方体?
    Sub test1001ddd()
    '静态数组的方法定义3维数组
     
    Dim arr1(0, 0, 0)
    x = 1
    For i = 0 To 0
        For j = 0 To 0
            For K = 0 To 0
                        arr1(i, j, K) = x
                        x = x + 1
                        Debug.Print "arr1(" & i & "," & j & "," & K & ")=" & arr1(i, j, K) & "   ";
    
            Next
            Debug.Print
        Next
        Debug.Print
    Next
    End Sub

     

        

     

    2 三维数组的正常定义

    2.1 定义为静态数组

    2.1.1 静态数组的定义

    • 静态数组
    • 所谓的静态,就是指在使用数组以前,先界定数组的 维数,边界大小等等
    • 比如 dim arr1(3,3,3)  其实完整的写法是  dim arr1(0 to 3, 0 to 3, 0 to 3) ,下面展示了这两种写法是等同的
    • 接下来的问题:
    • 静态数组定义的数组,还可以被redim吗?NO, 下面有实验

     

    2.1.2 对3维数组的展示

    • 其实从数组的维数来看,我不自觉的映射了,3维空间和3维坐标系的先入为主的思路

     

    展示方式1

    Sub test1001a()
    '静态数组的方法定义三维数组
     
    Dim arr1(3, 3, 3)
    N = 1
    For i = 0 To 3
        For j = 0 To 3
            For K = 0 To 3
                arr1(i, j, K) = N
                Debug.Print "arr1(" & i & "," & j & "," & K & ")=" & arr1(i, j, K)
                N = N + 1
            Next
        Next
    Next
    End Sub

    展示方式2

    Sub test1001b()
    '静态数组的方法定义三维数组
     
    Dim arr1(3, 3, 3)
    N = 1
    For i = 0 To 3
        For j = 0 To 3
            For K = 1 To 3
                arr1(i, j, K) = N
                Debug.Print "arr1(" & i & "," & j & "," & K & ")=" & arr1(i, j, K);
                N = N + 1
            Next
            Debug.Print
        Next
        Debug.Print
    Next
    End Sub

    Sub test1001c()
    '静态数组的方法定义三维数组
     
    Dim arr1(0 To 3, 0 To 3, 0 To 3)
    N = 1
    For i = 0 To 3
        For j = 0 To 3
            For K = 1 To 3
                arr1(i, j, K) = N
                Debug.Print "arr1(" & i & "," & j & "," & K & ")=" & arr1(i, j, K);
                N = N + 1
            Next
            Debug.Print
        Next
        Debug.Print
    Next
    End Sub

     

    2.1.3 静态数组,可以redim吗? NO

    • 事实证明,已经 dim arr1() 过的数组,不能再被redim

     

    2.2 在使用前一次性redim  和刚开始就 dim 感觉没啥区别吧,我感觉这只是 redim 并不是动态数组

    • 在循环外部一次性redim() 好数组的大小
    • 我感觉,这时候无论 redim(i,j,k) 这种,或者是 redim  arr3(3,3,3) 本质没区别
    • 都是使用数组前定义
    • 其实和 dim arr3(3,3,3) 也没啥区别把
    Sub test1003a()
    '动态数组的方法定义三维数组
    '如果再循环外面,redim 数组会比较麻烦
    Dim arr3()
    a = 3
    i = 3
    j = 3
    K = 3
    ReDim arr3(i, j, K)
    For i = 1 To 3
        For j = 1 To 3
            For K = 1 To 3
                arr3(i, j, K) = a
                Debug.Print "arr3(" & i & "," & j & "," & K & ")=" & arr3(i, j, K)
                a = a + 3
            Next
        Next
    Next
    Debug.Print
     
    End Sub

    和上面一样

    Sub test1003b()
    '动态数组的方法定义三维数组
    '如果再循环外面,redim 数组会比较麻烦
    Dim arr3()
    a = 3
    ReDim arr3(3, 3, 3)
    For i = 1 To 3
        For j = 1 To 3
            For K = 1 To 3
                arr3(i, j, K) = a
                Debug.Print "arr3(" & i & "," & j & "," & K & ")=" & arr3(i, j, K)
                a = a + 3
            Next
        Next
    Next
    Debug.Print
     
    End Sub

     

    2.3 展示错误示例

    • 如果redim() 在循环外,且redim不合适则会 报错“越界”.比如 k=2,
    • 数组在redim arr1() 那一刻就被定义了,之后无法被改变
    • 比如 redim(i,j,k) 后面改 i, j ,k 无意义了!!当时 i j k 没赋值,就相当于 redim (0,0,0)
    • 记住 数组必须 redim () 当时那一刻数组就界定了。

     

    错误例子1:虽然redim arr(i,j,k) ,数组已经被确定了,虽然 i,j,k  在redim 之后赋值,也不能改变数组了!

    Sub test1004a()
    
    '这是一个错误示例,能看出arr3(0,0,0)可以,但是到 arr3(0,0,1)会报错了!
    '在循环外redim数组,相当于dim为静态了
    'redim 数组会比较麻烦,需要一定redim准确,或足够大
    
    Dim arr3()
    a = 3
    
    ReDim arr3(i, j, K)
    '如果不在redim之前给变量赋值,相当于变量还是为空,也就是redim(0,0,0)
    '这种redim是无意义的
    i = 3
    j = 3
    K = 3
    
    For i = 0 To 3
        For j = 0 To 3
            For K = 0 To 3
                arr3(i, j, K) = a
                Debug.Print "arr3(" & i & "," & j & "," & K & ")=" & arr3(i, j, K)
                a = a + 3
            Next
        Next
    Next
    Debug.Print
     
    End Sub

    错误例子2:上面的例子和直接 redim arr(i,j,k) ,完全不给 i , j ,k 赋值一样,因为vBA 默认变量不定义,初值为0

    Sub test1004d()
    Dim arr3()
    a = 3
    ReDim arr3(i, j, K)
    '错误例子
    '如果不在redim之前给变量赋值,相当于变量还是为空,这种redim是无意义的
    
    For i = 0 To 3
        For j = 0 To 3
            For K = 0 To 3
                arr3(i, j, K) = a
                Debug.Print "arr3(" & i & "," & j & "," & K & ")=" & arr3(i, j, K)
                a = a + 3
            Next
        Next
    Next
    Debug.Print
     
    End Sub

    而这样就是对的

    • 也就是 dim 或 redim 数组后,给数组赋值时,不要超过数组的空间就行
    • 比如下面的例子,i,j,k>=3就行
    • 但如果 i,j,k =2 也还是会报错
    Sub test1004c()  '这个是对的
    Dim arr3()
    a = 3
    i = 4   '只要大于等于3就行
    j = 4
    K = 4
    ReDim arr3(i, j, K)
    
    For i = 0 To 3
        For j = 0 To 3
            For K = 0 To 3
                arr3(i, j, K) = a
                Debug.Print "arr3(" & i & "," & j & "," & K & ")=" & arr3(i, j, K)
                a = a + 3
            Next
        Next
    Next
    Debug.Print
     
    End Sub
    

     

    2.4 在循环内部一直多次动态 redim(i,j,k)  真正实现动态数组的感觉

    • redim arr1(i,j,k) 并且 i,j,k 一直在变化
    • 如果redim() 为变量,也就是数组的大小不能确定,是变化的,适合放在循环体内redim()多次,也就是变化多次
    • 注意 redim(i,j,k) 这种,当i,j,k 没有赋值的时候,变量为空,相当于没有redim()
    
    Sub test1002()
    '动态数组的方法定义三维数组,如果redim需要用到变量,把redim放在循环体里面会好一些
    '因为相当于每次循环都在灵活的 又重新redim
    Dim arr2()
    m = 2
    For I = 1 To 3
        For J = 1 To 3
            For K = 1 To 3
                '这里的redim有意义,因为具体的值会替代变量
                ReDim arr2(I, J, K)
                arr2(I, J, K) = m
                Debug.Print "arr2(" & I & "," & J & "," & K & ")=" & arr2(I, J, K)
                m = m + 2
            Next
        Next
    Next
    Debug.Print
    End Sub

     

     

    3 问题:多维数组 和 数组的嵌套是一回事吗?NO  

       3.1 特殊写法 arr1()()() ,这个是数组的嵌套,语法定义是  Array(arr1(), arr2()) 这种

    • array() 函数的作用,就是生存一个 一维数组
    • 这种特殊写法arr1(0)(1)(1),我理解为是第1个数组元素的,range里的第1行第1列,这个是数组嵌套
    • 语法外层肯定是一个 array() 函数,比如  arr1 = Array(Range("a1:a4"), Range("b1:b4"), Range("c1:c4"))
    • Rem array()定义的都是1维数组,但元素本身是2个维数组,但是这仍是一维数组!
    Sub 测试1()
    
    Dim arr1
    
    arr1 = Array(Range("a1:a4"), Range("b1:b4"), Range("c1:c4"))
    Rem array()定义的都是1维数组,但元素本身是2个维数组,但是这仍是一维数组!
    
    Debug.Print "arr1(0)(1)(1)=" & arr1(0)(1)(1)
    
    For I = 1 To UBound(arr1)
       Debug.Print "arr1(" & I & ")(2)(1)=" & arr1(I)(2)(1) '写成arr(i)会报类型不匹配,因为数组维数不对
    Next I
    
    '这种特殊写法arr1(0)(1)(1),我理解为是第1个数组元素的,range里的第1行第1列
    
    For Each I In arr1(0)
       Debug.Print I;
    Next
    Debug.Print
    
    For Each I In arr1(1)
       Debug.Print I;
    Next
    Debug.Print
    
    For Each I In arr1(2)
       Debug.Print I;
    Next
    Debug.Print
    
    End Sub

     

    3.2 这才是三维数组的   dim arr(i,j,k)  或 redim (0 to i, 0 to j , 0 to k)  多维数组靠定义出来,只有定义为多维数组的才是多维数组

    • 多维数组靠定义出来,只有定义为多维数组的才是多维数组
    三维数组的表示问题,和之前的不同了
    Sub test_3d()
    
    Dim arr1(1 To 2)
    Dim arr2(1 To 2, 1 To 2)
    Dim arr3(1 To 2, 1 To 2, 1 To 2)
    Dim arr4
    
    arr1(1) = 1
    arr2(1, 1) = 10
    arr3(1, 1, 1) = 100
    'arr4(1)(1)(1) = 100  '错误
    
    
    Debug.Print arr1(1)
    Debug.Print arr2(1, 1)
    Debug.Print arr3(1, 1, 1)
    'Debug.Print arr4(1)(1)(1)
    
    
    End Sub
    

     

    3.3 测试多维数组和 数组嵌套的不同

    Sub test1()
    
    Dim arr1
    Dim arr2
    Dim arr3
    Dim arr4
    Dim arr5(3, 4, 5)
    
    
    arr1 = Range("b1:b3")
    Debug.Print arr1(3, 1)
    'Debug.Print arr1(3)(1)
    
    arr2 = Range("b1:b3").Value
    Debug.Print arr2(3, 1)
    'Debug.Print arr2(3)(1)
    
    arr3 = Array(Range("a1:a3"), Range("b1:b3"))
    'Debug.Print arr3(0, 1, 1)
    Debug.Print arr3(1)(1)(3)
    
    'arr4 = Array(Range("a1:a3"), Range("b1:b3")).Value   '报错
    ''Debug.Print arr4(0, 1, 1)
    'Debug.Print arr4(1)(1)(3)
    
    
    arr5(0, 0, 0) = 111
    Debug.Print arr5(0, 0, 0)
    'Debug.Print arr5(0)(0)(0)
    
    End Sub
    

     

    3.4 显示3维数组 和嵌套数组里的内容,比较

    3.4.1 多维数组显示,很方便

    Sub testarr222()
    
    Dim arr222()
    ReDim arr222(2, 2, 2)
    a = 1
    
    'For i = LBound(arr222, 0) To UBound(arr222, 0)  '这样写报错
    For i = LBound(arr222) To UBound(arr222)         '这样写OK
        For j = LBound(arr222, 1) To UBound(arr222, 1)
            For K = LBound(arr222, 2) To UBound(arr222, 2)
                arr222(i, j, K) = a
                a = a + 1
                Debug.Print arr222(i, j, K);
            Next
            Debug.Print
        Next
        Debug.Print
    Next
    
    Debug.Print "arr222(1, 1, 1)=" & arr222(1, 1, 1)
    'Debug.Print arr222(1)(1)(1)
    
    End Su

     

     

    3.4.2 嵌套数组的显示,需要先清楚 嵌套结构,且无法直接 debug.print 被嵌套的数组内容

    Sub testarr333()
    
    Dim arr333()
    
    arr11 = Array(1, 2, 3)
    arr12 = Array(4, 5, 6)
    arr13 = Array(7, 8, 9)
    arr101 = Array(arr11, arr12, arr13)
    
    
    arr21 = Array(10, 11, 12)
    arr22 = Array(13, 14, 15)
    arr23 = Array(16, 17, 18)
    arr102 = Array(arr21, arr22, arr23)
    
    arr31 = Array(19, 20, 21)
    arr32 = Array(22, 23, 24)
    arr33 = Array(25, 26, 27)
    arr103 = Array(arr31, arr32, arr33)
    
    arr333 = Array(arr101, arr102, arr103)
    
    
    'For Each i In arr333
    '   Debug.Print i
    'Next
    
    
    'For i = LBound(arr333) To UBound(arr333)
    '    Debug.Print arr333(i)
    'Next
    'Debug.Print arr333(1)(1)      'debug.print 不能直接显示数组
    'Debug.Print arr333(1, 1, 1)   '不是多维数组,不能这样
    
    For i = LBound(arr333(0)(0)) To UBound(arr333(0)(0))
        Debug.Print arr333(0)(0)(i)
    Next
    
    
    Debug.Print "arr333(1)(1)(1)=  " & arr333(1)(1)(1)
    
    
    
    End Sub

     

     

    展开全文
  • 大家好,我们今日继续讲解VBA代码解决方案的第110讲内容:VBA数组讲解:什么是数组,如何定义数组,如何创建数组一、什么是数组 就是数组共享一个名字,有着多个元素按顺序排列的变量。在数组中,元素通过索引加以...
  • 维数组的遍历

    千次阅读 2019-02-28 14:51:27
    //第行 mPoints[2][0] = new Point(2, 0); mPoints[2][1] = new Point(2, 1); mPoints[2][2] = new Point(2, 2); mPoints[2][3] = new Point(2, 3); System.out.println("mPoints.length===========" + m...
  • 几个Excel vba示例文件. 包括行列转置,表格数据到数组,一维数组转二维数组,单列转多列等。均含示例数据,如: 250B的文本测试数据,晶振微调后的频率测试数据等。 另外还有EXCEL的常用命令语句精选。
  • VBA数组完全教程

    万次阅读 多人点赞 2017-06-25 11:45:15
    兰色幻想VBA数组入门教程10集 ...2. 数组数: Sub 数组示例() Dim x As Long, y As Long Dim arr(1 To 10, 1 To 3) '创建一个可以容下10行3列的数组空间 For x = 1 To 4 For y = 1 To 3 ar
  • Split函数返回下标下界从零开始的一维数组,包含以指定分隔符拆分后形成的子字符串,其语法格式如下。 Split(expression[, delimiter[, limit[, compare]]]) 部分 描述 expression 必需的。包含子字符串和...
  • //二维数组的求和 题:公司销售额求和 某公司按照月季和月份统计的数据: 第一季度:22,66,44 第二季度:77,33,88 第季度:25,45,65 第四季度:11,66,99 class Li{ public static void ...
  • 如:dim arr1(5)as double arr(0)=90 arr(1)=75 arr(2)=106 arr(3)=43 arr(4)=172 arr(5)=65 arr(6)=160 arr(7)=108 请教老师们,这是一个二维数组,想在1、3、5、7后分别增加z=0,变成三维数组,代码怎么写呢?
  • VBA遍历数组的2种方式

    万次阅读 2018-12-20 17:26:00
     VBA编程,如何对数组进行遍历? 2.解决方案  方式一:使用for循环 Sub 遍历数组1() '声明一个变量 Dim Arr As Variant '声明一个数字变量 Dim i As Integer '变量类型指定为数组并赋值 Arr = ...
  • vba 数组(动态数组

    万次阅读 2013-10-15 10:38:08
    主要内容: 本文章主要介绍VBA中,数组的使用,特别介绍动态数组的使用,并有简单事例,帮助理解。 数组是我们经常用到的存储数据的一种媒介,他到底是什么呢? 一、定长数组 数组是具有相同数据类型并且共享...
  • 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 行的...
  • VBA数组

    千次阅读 2018-12-08 22:18:32
    一、一维数组 数组声明 Method 1 : Using Dim Dim arr1() 'Without Size 'Method 2 : Mentioning the Size Dim arr2(5) 'Declared with size of 5 'Method 3 : using 'Array' Parameter Dim ...
  • 数组翻转就是将数组整体做顺/逆时针旋转90度或者180度,由于旋转180就是对称,没啥难度,所以常见的题目还是以旋转90度比较多。 LeetCode的48题就是这样的题目:有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针...
  • VBA中的数组下标

    万次阅读 2010-11-25 17:09:00
    也可以返回第二维,第三维的下标情况。默认为LBound( array , 1 )。 二.默认情况 dim strarr(10) as String 那么,相当于如下的C语言 String strarr[11]。即第一个元素是strarr(0),最后一个元素...
  • 实现数组的行列互换 形参使用二维数组。函数调用使用引用传递,比较基础。
  • 维数组判断为空

    2019-06-13 16:07:27
    第二步:是判断二维数组是否为空 {},array.length == 0; 第步:是判断{{}},array.length == 1&& array[0].length==0; 综上就是 if((array==null||array.length==0)||(array.length...
  • Excel-VBA-数组-01-定义数组

    千次阅读 2020-05-23 17:09:18
    微信公众号原文 ...数组一般是用于在程序运行过程中临时存储数据,从1-2维数组的作用来看,完全可以使用Excel工作表来代替。数组的优势在于它是临时存在于内存中,无需写入硬盘中,它的读写速度非常快 Part 2
  • VBA教程初级(五):复杂数组

    千次阅读 2016-03-09 16:24:49
    维数组
  • VBA 删除数组某元素的方法多种

    千次阅读 2020-01-09 17:31:09
    看来数组,用 filter 很容易生成新数组啊,并不是那么难啊     Sub test_arr4() arr1 = Array(1, 2, 3, 999, 1, 3, 5) arr2 = Filter(arr1, 999, False) For Each x In arr1 Debug.Print x; Next ...
  • 本文提供将多个一维数组合拼成二维数组的方法,提供完成代码及演示。合拼方法代码如下,因需要使用函数可变参数,因此需要php版本5.6以上。<?php /** * 将多个一维数组合拼成二维数组 * * @param Array $...
  • 维数组的冒泡排序

    千次阅读 2020-02-08 11:46:36
    冒泡排序(Bubble Sort)是啥? 来源百度百科: 冒泡排序是一种简单的排序算法。它重复地走访过要排序的元素...1.首先交换,可以将数组的最大值移动到最后面。(从小到大) 2.在依次交换,最大值移动到,倒数第二位...
  • 维数组的几种写法

    千次阅读 2018-03-15 19:50:18
    第一种:int[][] num=new int... //定义一个int类型的2维数组第二种:long[][] numfive=new long[5][]; //定义一个long类型的不规则数组numfive[0]=new long[5]; //为第1行分配5列numfive[1]=new long[6]; //为第2行...
  • 4}] '用分号隔开则是以列存储,1行1列存了1,2行1列存了2,3行1列存了3,4行1列存了4 ‘这里的数组arr2相当于是4行1列的2维数组,1列就是会被看作是一个2维数组的 arr3 = Application.Transpose([{1;2;3;4}]) ’外层...
  • 【LeetCode 0-Start】[数组]特定顺序遍历二维数组 文章目录前言一、[中等]54. 螺旋矩阵java代码二、[中等]59. 螺旋矩阵 IIjava代码、[中等]498. 对角线遍历java代码 前言 特定顺序遍历二维数组 题目序号: 54、...
  • Excel VBA基础语法——数组(四)

    万次阅读 2018-08-06 14:20:11
    在声明变量的过程中会出现一次性需要声明多个同类型变量的情况,如果还是按照常规的方法,那么程序就比较杂乱,为了一次性声明多个同类型变量,引入了数组的概念。数组就是同类型多个变量的集合,也是变量。数组声明...
  • 数组 array 1.1 什么是数组? 抽象定义: 什么是数组数组就是多个单位(element)有序的,连续存储在一起作为一个整体,统一叫1个名字(数组名) 如果已经是数组,那么arr1=arr1() 数组名就代表数组 数组的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 890
精华内容 356
关键字:

vba三维数组