【VBA】二次元可変配列の要素数を変更する(最終次元、1次元)

0

    <機能>
    (1)2次元可変配列を定義します
    (2)2次元可変配列の最大次元(2次元目)の要素数を変更します
    (3)2次元可変配列の1次元目の要素数を変更します
     ・配列のデータを添付配列にコピー
     ・2次元配列を再定義
     ・添付配列のデータを2次元配列に戻す
     ・追加した要素にデータをセット

    <動作検証&開発環境>
    Microsoft Office 2016

    <使い方>
    適当なところにソースを張り付けてください
    二次元可変配列を使ってみる() を呼び出すとサンプルを開始します

    <実行イメージ>
    VBA,Preserve,Redim,動的配列,可変配列,二次元配列,2次元配列,多次元配列,拡張,最終次元,一次元,1次元
    最上部の表は配列の初期状態(要素数:3×4)
    真ん中の表は最終次元をPreserveキーワードで拡張(要素数:3×5)
    最下部の表は1次元目を拡張(要素数:5×5)
     

    '********************************************

    '2次元可変配列を定義して要素を拡張する

    '(1)Preserveキーワードで最終次元の要素を拡張

    '(2)1次元の要素を拡張する

    ' →添付配列にデータをコピーしてから配列を初期化後拡張

    '********************************************

    Sub 二次元可変配列を使ってみる()

        Dim strArray() As String

        Dim gyo As Long

        Dim i As Integer, j As Integer

        gyo = 1

        

        '//シートを初期化

        Cells.Select

        Selection.Clear

        Selection.ColumnWidth = 15

        Selection.RowHeight = 20

        Selection.Font.Name = "MS ゴシック"

        Selection.Font.Size = 10

        Range("A1").Select

        

        '//2次元配列の要素数を定義(要素数3×4)

        ReDim strArray(2, 3)

        

        '//2次元配列にテストデータをセット

        strArray(0, 0) = "氏名"

        strArray(0, 1) = "所属支店名"

        strArray(0, 2) = "性別"

        strArray(0, 3) = "出身"

        

        strArray(1, 0) = "山田 太郎"

        strArray(1, 1) = "新宿"

        strArray(1, 2) = "男"

        strArray(1, 3) = "鹿児島県"

        

        strArray(2, 0) = "佐藤 花子"

        strArray(2, 1) = "渋谷"

        strArray(2, 2) = "女"

        strArray(2, 3) = "東京都"

        

        '//2次元配列の情報をシートに出力

        二次元配列をシートに出力 strArray, gyo

        '//カレント行を更新

        gyo = gyo + (UBound(strArray, 1) + 1)

        

        '//配列の2次元目の要素を1つ拡張(要素数3×5)

        '//Uboundの第2引数で最大インデックスを取得する次元を指定

        '//指定しない場合は全ての次元のなかで最大要素数が返ります

        '//Ubound関数の詳細はDeveloperNetwork参照

        ReDim Preserve strArray(2, UBound(strArray, 2) + 1)

        

        '//拡張された2次元目の要素にテストデータをセット

        strArray(0, UBound(strArray, 2)) = "所属部署"

        strArray(1, UBound(strArray, 2)) = "営業部"

        strArray(2, UBound(strArray, 2)) = "総務部"

        

        '//2行あける

        gyo = gyo + 2

        

        '//2次元配列の情報をシートに再出力

        二次元配列をシートに出力 strArray, gyo

        '//カレント行を更新

        gyo = gyo + (UBound(strArray, 1) + 1)

        

        '//配列の1次元目の要素を2つ拡張してみる

        '//VBAで拡張出来るのは最終次元のみ(本サンプルでは2次元目)

        '//一旦添付配列にコピーしてから配列を初期化して拡張する

        Dim tmpArray() As String

        tmpArray = strArray

        

        '//配列の要素数を再定義(要素数5×5)

        ReDim strArray(UBound(tmpArray, 1) + 2, UBound(tmpArray, 2))

        

        '//データをコピー

        For i = 0 To UBound(tmpArray, 1)

            For j = 0 To UBound(tmpArray, 2)

                strArray(i, j) = tmpArray(i, j)

            Next

        Next

        

        '//拡張した配列の1次元目の要素にテストデータをセット

        strArray(3, 0) = "鈴木 一郎"

        strArray(3, 1) = "渋谷"

        strArray(3, 2) = "男"

        strArray(3, 3) = "神奈川県"

        strArray(3, 4) = "情報システム部"

        

        strArray(4, 0) = "西島 洋子"

        strArray(4, 1) = "東京"

        strArray(4, 2) = "女"

        strArray(4, 3) = "東京都"

        strArray(4, 4) = "経理部"

        

        '//2行あける

        gyo = gyo + 2

        

        '//2次元配列の情報をシートに再出力

        二次元配列をシートに出力 strArray, gyo

    End Sub

     

    '********************************************

    '指定配列のデータをシートに出力する

    'strArray : 配列名

    'stgyo    : 出力開始行

    '********************************************

    Sub 二次元配列をシートに出力(ByRef strArray() As String, _

                                      ByVal stgyo As Integer)

        Dim i As Integer, j As Integer

     

        For i = 0 To UBound(strArray, 1)

            

            For j = 0 To UBound(strArray, 2)

                Cells(stgyo + i, (j + 1)) = strArray(i, j)

            Next

            

        Next

        

    End Sub

     

    よろしければポチッと押してください

    プログラマー ブログランキングへ



    calendar

    S M T W T F S
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
    << November 2017 >>

    profile

    others

    mobile

    qrcode