用VBA数组改写单元格

用VBA数组改写单元格

1. VBA的数组还是很难用的,其实就是非常难用!

2. 要先定义一个数组,可以是空的,也可以里面写个数字作为数组长度。

3. 如果是空数组,可以后面redim重新定义数组长度。如果不是空的,再用redim就会报错“数组维数已定义”!

4. dim里面不能用变量,报错“只能用常数表达式”,里面只能用具体数字。

5. redim不能重新定义数组维数,就是说本来dim了一个一维数组,redim不能把它改成二维数组。

6. redim里面貌似能用变量。

7. 两种方法,一种定义一维数组,需要结果transpose转成行。另一种定义二维数组,结果直接写入单元格。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-05-05
Sub s()
    sn = [l1]
    en = [n1]
    stp = [t1]
    arr = [a2].CurrentRegion
    cc = 1
    i = 1
    Do Until arr(i, 1) = sn
        i = i + 1
    Loop
    sl = i
    Do Until arr(i, 1) = en
        i = i + 1
        If i = UBound(arr) Then Exit Do
    Loop
    el = i
    ReDim brr(sl To el, 1 To 33)
    For i = sl To el
        For j = 3 To 8
            If arr(i, j) <> "" Then brr(i, arr(i, j)) = arr(i, j)
        Next
    Next
    Cells(sl + 1, 32).Resize(el - sl + 1, 33) = brr
    Dim crr(1 To 21)
    For i = 1 To 33
        For j = sl To el - stp * 3
            If brr(j, i) <> "" Then
                For k = 1 To (el - j) / stp / 3
                    If brr(j + stp * k, i) <> "" And brr(j + stp * k * 2, i) <> "" And brr(j + stp * k * 3, i) <> "" Then
                        crr(cc) = brr(j, i)
                        cc = cc + 1
                        GoTo nexti
                    End If
                Next
            End If
        Next
nexti:
    Next
    [j28:ad28] = crr
End Sub

来自:求助得到的回答本回答被提问者采纳
第1个回答  2017-05-05
直接赋值就可以,例如:
Range("a1:a3")=array(1,2,3)本回答被网友采纳
相似回答