2016年08月

    配列の宣言とアクセス方法

    PAYDAY2 Blacklist Assist

    最近更新中のPAYDAY2のBlacklist MODの補助ツール
    ※特に理由が無い場合は最新バージョンを使用してください。


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

    VBAかじったので忘備録
    数時間いじった程度の知識量

    宣言方法とそれぞれのアクセス方法について例を示しています。
    タイトルのジャグ配列は一番最後です。

    (一次元)配列

    excel_exp_array1.png

    宣言方法1


    Dim x(3) As Variant
    x(0) = "a"
    x(1) = "b"
    x(2) = "c"
    x(3) = "d"

    ※Dim x(i) As Variantで用意されるiは要素数ではなく、要素の添え字なので要素数-1を指定する。

    宣言方法2


    Dim x(0 To 4) As Variant
    x(0) = "a"
    x(1) = "b"
    x(2) = "c"
    x(3) = "d"

    ※Dim x(i To j) As Variantのiは自由に決められる。i=1 j=3とすると、x(1)から3個の要素数を確保する。

    宣言方法3


    Dim x As Variant
    x = Array("a","b","c","d")

    ※動的配列の場合はReDimを使用する

    アクセス方法


    x(1)
    x(3)
    など


    多次元配列

    excel_exp_array.png
    3行4列の二次元配列

    宣言方法1


    Dim x(2,3) As Variant
    x(0,0) = "a"
    x(0,1) = "b"
    ...
    x(2,3) = "i"

    宣言方法2


    Dim x(0 To 3, 0 To 4) As Variant
    初期値の設定方法は宣言方法1と同じなので省略する。

    宣言方法3


    Dim x As Variant
    x = Array(Array("a", "b", "c", "d"), Array("e", ....), .... Array(..., "i"))
    ほぼジャグ配列の考え方、配列の中に配列を宣言する方法。

    ※次元数を増やす場合はDim x(i, j, k ...) As Variant

    アクセス方法1


    宣言方法1,2の場合はこちら
    x(0,0) = "a"
    x(0,1) = "b"
    ...
    x(2,3) = "i"

    宣言方法3の場合はこちら
    x(0)(0) = "a"
    x(i)(j) = k

    ジャグ配列

    excel_exp_jugarray.png

    ジャグ配列は何行何列と言えるのか・・・?
    あえて言うならば3行4列の二次元ジャグ配列

    宣言方法1


    Dim x As Variant
    x = Array(Array("a", "b", "c"), Array("d", "e"), Array("f", "g", "h", "i"))

    宣言方法2(試していないので動作不明)


    事前に配列を複数個宣言しておいて、他の配列に入れるという方法でもよいかもしれない。
    Dim x As Variant
    Dim i As Variant
    i = Array("a", "b", "c")
    Dim j As Variant
    j = Array("d", "e")
    Dim k As Variant
    k = Array("f", "g", "h", "i")
    x = Array(i, j, k)

    アクセス方法


    x(0)(0) = "a"
    x(i)(j) = k


    おまけ


    動的配列の割り当て


    Dim x As Variant
    x = Array("a", "b")

    x(0) -> a
    x(1) -> b

    ReDim x(3)でxの要素数を添え字3個までの4個を確保する
    ただし、注意しなければならないのはこの際これまでの要素をすべて削除し、サイズを変更する点。
    つまり
    x(0) ->
    x(1) ->
    となる。

    要素を引き継ぎつつ、サイズを変更する場合は

    ReDim Preserve x(3)

    とする必要がある。


    要素数を調べる関数


    LBound関数 -> 引数で指定した配列で使用できる最も小さいインデックス番号を返す
    UBound関数 -> 引数で指定した配列で使用できる最も大きいインデックス番号を返す

    使用例
    Dim x As Variant
    x = Array("a","b","c","d")

    LBound(x)とした場合は0
    UBound(x)とした場合は3
    を返す。
    スポンサーサイト
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。