将二维数组转换为 VBA 中的列表

时间:2021-01-31 21:38:31

标签: arrays excel vba multidimensional-array

我想编写一段简单的代码来计算螺栓组中的力。螺栓放置在 x 列和 y 行的坐标系中。假设我有一个 3x4 系统,我得到以下几点:

(0,0) , (1,0) , (2,0) , (3,0)
(0,1) , (1,1) , (2,1) , (3,1)
(0,2) , (1,2) , (2,2) , (3,2)
(0,3) , (1,3) , (2,3) , (3,3)  

我可以使用以下代码创建它:

Dim myarray(3, 4) As String

    For x = LBound(myarray, 1) To UBound(myarray, 1)
        For y = LBound(myarray, 2) To UBound(myarray, 2)
            myarray(x, y) = x & "," & y
            Cells(x + 1, y + 1).Value = myarray(x, y)
        Next y
    Next x

现在我需要得到一个包含 x 和 y 坐标的列表来计算向量 r:

x  y  
0  0  
1  0 
2  0
3  0 
0  1
1  1
2  1
3  1
... and so on

如果尝试不同的东西尝试拆分数组,但它总是失败:( 任何帮助将不胜感激!

问候,

  • 蝙蝠侠

1 个答案:

答案 0 :(得分:3)

不知道你想把它放在哪里,但你可以循环当前数组并通过在每个条目上使用 split 来延长 2 列

Option Explicit

Public Sub Flatten()

    Dim myarray(3, 4) As String, x As Long, y As Long

    For x = LBound(myarray, 1) To UBound(myarray, 1)
        For y = LBound(myarray, 2) To UBound(myarray, 2)
            myarray(x, y) = x & "," & y
            ActiveSheet.Cells(x + 1, y + 1).Value = myarray(x, y)
        Next y
    Next x
    
    Dim results(), r As Long, arr() As String
    ReDim results(1 To (UBound(myarray, 1) + 1) * (UBound(myarray, 2) + 1), 1 To 2)
    
    For x = LBound(myarray, 1) To UBound(myarray, 1)
        For y = LBound(myarray, 2) To UBound(myarray, 2)
            r = r + 1
            arr = Split(myarray(x, y), ",")
            results(r, 1) = arr(0)
            results(r, 2) = arr(1)
        Next y
    Next x
    
    ActiveSheet.Cells(1, 1).CurrentRegion.Offset(0, UBound(myarray, 2) + 1).Resize(UBound(results, 1), 2) = results

End Sub