【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

     

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

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



    selected entries

    categories

    calendar

    S M T W T F S
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
    << November 2018 >>

    profile

    others

    archives