JavaScriptの配列関連メソッドをVBAのユーザー定義関数に

Pocket

VBAでも配列が使えますが、今一つ使いにくいです。配列関係の関数が少ないからでしょうか。
そこでVBAの配列について勉強を兼ねてJavaScriptの配列関連メソッドと同様の処理をするユーザー定義関数を考えてみました。

変数 a, b, c は配列です。
変数 x, y は数値です。
エラー処理は全く考慮していません。配列の宣言も省略しています。Excel2007で確認しました。

Function shift(a)
    '最初の要素を返す。/最初の要素が削除される。
    ReDim b(UBound(a) - 1)
    For i = 1 To UBound(a)
        b(i - 1) = a(i)
    Next i
    shift = a(0)
    a = b
End Function
Function pop(a)
    '最後の要素を返す。/最後の要素が削除される。
    ReDim b(UBound(a) - 1)
    For i = 0 To UBound(a) - 1
        b(i) = a(i)
    Next i
    pop = a(UBound(a))
    a = b
End Function
Function unshift(a, ParamArray element())
    '挿入後の配列の長さを返す。/先頭に要素が挿入される。
    ReDim b(UBound(a) + UBound(element) + 1)
    For i = 0 To UBound(element)
        b(i) = element(i)
    Next i
    For i = 0 To UBound(a)
        b(i + UBound(element) + 1) = a(i)
    Next i
    a = b
    unshift = UBound(a) + UBound(element)
End Function

Function push(a, ParamArray element())
    '挿入後の配列の長さを返す。/最後に要素が挿入される。
    ReDim b(UBound(a) + UBound(element) + 1)
    For i = 0 To UBound(a)
        b(i) = a(i)
    Next i
    For i = 0 To UBound(element)
        b(i + UBound(a) + 1) = element(i)
    Next i
    a = b
    push = UBound(a) + UBound(element)
End Function
Function slice(a, x, Optional y)
    '0から数えてx番目からy-1番目までの要素を配列として返す。yを省略すると最後までを返す。/なし。
    If IsMissing(y) Then
        y = UBound(a) + 1
    End If
    ReDim b(y - i)
    For i = 0 To y - x - 1
        b(i) = a(i + x)
    Next i
    slice = b
End Function
Function splice(a, x, y)
    '0から数えてx番目からy個の要素を配列として返す。/該当する要素が削除される。
    ReDim b(y - 1)
    ReDim c(UBound(a) - y)
    For i = 0 To y - 1
        b(i) = a(i + x)
    Next i
    j = 0
    For i = 0 To UBound(a)
        If i < x Or x + y <= i Then
            c(j) = a(i)
            j = j + 1
        End If
    Next i
    a = c
    splice = b
End Function
Function concat(a, b)
    'aの後に配列を追加し、追加後の配列を返す。/なし。
    ReDim c(UBound(a) + UBound(b) + 1)
    For i = 0 To UBound(a)
        c(i) = a(i)
    Next i
    For i = 0 To UBound(b)
        c(i + UBound(a) + 1) = b(i)
    Next i
    concat = c
End Function

[ 2014年7月24日 | カテゴリー: Excel | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報