繁体   English   中英

Excel-VBA从3个1d数组创建3d数组

[英]Excel-VBA creating a 3d array from 3 1d arrays

我有3个一维数组,即Topic(), SubTopic() and Description() 这些数组中每个数组的最大条目数受变量noDescription限制。 我需要从这些数组中制作一个3d数组并显示它。 我的代码是:

 ReDim info(1 To Topic(), 1 To SubTopic(), 1 To Description())

  p = 1
  Do

  info(p, 0, 0) = Topic(p)
  info(p, 1, 0) = SubTopic(p)
  info(p, 0, 2) = Description(p)

  MsgBox "array value" & info(p, 0, 0) & "and" & info(p, 1, 0) & "and" & info(p, 0, 2)

   p = p + 1

Loop Until p > noDescription

它在确定数组尺寸时给出类型不匹配错误。 我觉得我在某个地方错了。 有什么帮助吗?

这是一个可用于将任意数量的一维数组粘合在一起的函数:

Function CombineArrays(ParamArray Arrays() As Variant) As Variant
    'Takes a list of 1-dimensional arrays
    'And returns a single array
    'The arrays are assumed to have the same base
    'But not necessarily the same length
    'The arrays form the columns of the result

    Dim A As Variant
    Dim i As Long, j As Long, lb As Long, ub As Long, m As Long

    'first find LBound -- assumed to be common

    lb = LBound(Arrays(0))

    'now find the maximum ubound:

    For i = LBound(Arrays) To UBound(Arrays)
        If UBound(Arrays(i)) > ub Then ub = UBound(Arrays(i))
    Next i

    'now redim and return final array

    m = lb + UBound(Arrays)
    ReDim A(lb To ub, lb To m)

    For j = lb To m
        For i = lb To UBound(Arrays(j - lb))
            A(i, j) = Arrays(j - lb)(i)
        Next i
    Next j
    CombineArrays = A
End Function

测试像:

Sub Test()
    Dim Larry(1 To 4)
    Dim Curly(1 To 2)
    Dim Moe(1 To 3)
    Dim A As Variant

    Larry(1) = 1
    Larry(2) = 2
    Larry(3) = 3
    Larry(4) = 4
    Curly(1) = "A"
    Curly(2) = "B"
    Moe(1) = "X"
    Moe(2) = "Y"
    Moe(3) = "Z"

    A = CombineArrays(Larry, Curly, Moe)
    Range("A1:C4").Value = A
End Sub

运行该子程序后,A1:C4如下所示:

1   A   X
2   B   Y
3       Z
4       

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM