VBA Flatten Hierarchical数组

问题描述 投票:2回答:1

我有一个我想要展平的分层数组,以便更容易迭代。在VBA中展平分层数组的最佳方法是什么?

分层数组的视觉:

s
    p
    t
        d
        n
x

扁平阵列的视觉效果

s
p
t
d
n
x

实现分层数组:

Sub test()
    Dim s As String
    Dim v() As Variant
    v = Array("s", Array("p", "t", Array("d", "n")), "x")

    MsgBox printHier(v)
End Sub

Function printHier(v, Optional layer As Integer = 0) As String
    On Error GoTo ErrorHandler

    indent = layer * 4
    Do While indent > 0
        output = output & " "
        indent = indent - 1
    Loop
    printHier = output & CStr(v)

    Exit Function
ErrorHandler:
    For Each subv In v
        If printHier = vbNullString Then
            printHier = printHier(subv, layer + 1)
        Else
            printHier = printHier & vbNewLine & printHier(subv, layer + 1)
        End If
    Next subv
End Function
arrays vba excel-vba hierarchical-data excel
1个回答
3
投票

没有“最好的”方式,但这是一种方法:

Sub test()
    Dim v() As Variant
    Dim arrout()

    v = Array("s", Array("p", "t", Array("d", "n", Array("x", "y"))), "x")
    ReDim arrout(0 To 0)
    Flatten v, arrout

    Debug.Print Join(arrout, ",")

End Sub

Sub Flatten(arrIn, arrout)
Dim v, a, ub
    For Each v In arrIn
        If TypeName(v) Like "*()" Then
            Flatten v, arrout
        Else
            If IsEmpty(arrout(0)) Then
                arrout(0) = v
            Else
                ub = UBound(arrout)
                ReDim Preserve arrout(0 To ub + 1)
                arrout(ub + 1) = v
            End If
        End If
    Next v
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.