ホーム > ライブラリ > Array > fArray_Dim11_to_Dim2

ライブラリ

fArray_Dim11_to_Dim2

1次元x1次元配列を2次元配列に変換します。

Dictionaryに1次元配列を溜めておいて、
最後に2次元配列に変換する時に使用することが多いです。
いやむしろ、その為だけの関数かも...

例:DataArray = fArray_Dim11_to_Dim2(Dic.Items)

Public Function fArray_Dim11_to_Dim2(DataArys As Variant) As Variant
'1次元x1次元配列を2次元配列に変換する
'使用例:DictionaryのItemにデータ(1次元配列)を溜めておき、2次元配列に変換する

    '1次元の要素数をカウント
    Dim Row_L   As Long
    Dim Row_U   As Long
    Dim Col_L   As Long
    Dim Col_U   As Long
    Call fArray_Lbound_Ubound(DataArys, Row_L, Row_U)
    
    Dim CntDim  As Long
    CntDim = fArray_DimCount(DataArys)
    If CntDim <> 1 Then Exit Function
    
    '1次元配列を判定
    Dim IsAry() As Boolean
    ReDim IsAry(Row_L To Row_U)
    Dim i   As Long
    For i = Row_L To Row_U
        If fArray_DimCount(DataArys(i)) = 1 Then
            IsAry(i) = True
        End If
    Next
    
    '2次元の要素数をカウント
    For i = Row_L To Row_U
        If IsAry(i) Then
            Dim j   As Long
            j = UBound(DataArys(i), 1)
            If Col_U < j Then
                Col_U = j
            End If
        End If
    Next
    Col_L = Col_U
    For i = Row_L To Row_U
        If IsAry(i) Then
            j = LBound(DataArys(i), 1)
            If Col_L > j Then
                Col_L = j
            End If
        End If
    Next
    
    'データ配列を準備
    Dim Dim2Ary As Variant
    ReDim Dim2Ary(Row_L To Row_U, Col_L To Col_U)
    
    For i = Row_L To Row_U
        If IsAry(i) Then
            
            Dim Dim1Ary As Variant
            Dim1Ary = DataArys(i)
            
            For j = LBound(Dim1Ary, 1) To UBound(Dim1Ary, 1)
                Dim2Ary(i, j) = Dim1Ary(j)
            Next
            
        End If
    Next
    
    fArray_Dim11_to_Dim2 = Dim2Ary
    
End Function

Array   2020/10/11   shono

この記事へのコメント

コメントを送る

 
※ メールは公開されません
Loading...
 画像の文字を入力してください