rsinz’s diary

趣味コードや日記のブログです。文章をうまく書けるようになりたい。

配列をもっと簡単に扱いたい

タイトル通り、VBAの配列を簡単に扱うクラスを公開します。

GitHubからArrayEx.clsをダウンロードして、VBEにインストールしてください。
vba/Class at master · rsinz/vba · GitHub

使い方
一部の機能のサンプルです。

たとえば、以下のようなデータ表があるとします。

f:id:rsinz:20180428160611p:plain
この表の、各商品の「個数の合計」と「合計金額の平均」を算出してみます。

Sub Test()

  ' まずはデータ表全体を取り込みます
    Dim 売上 As New ArrayEx
    売上.CurrentRegion = Range("B3")
    
    ' 一意の商品名リストを取り出します。この場合、"りんご"、"みかん"、"ぶどう"が商品名に格納されます
    Dim 商品名リスト As New ArrayEx
    商品名リスト = 売上.Slicer(1).GroupBy   ' 1列目を縦にスライスして、重複削除しています
    
    ' それぞれの商品における、個数の合計と金額の平均を出してみます
    For Each 商品名 In 商品名リスト.value
        
        Debug.Print 商品名 & "の合計個数 : ";
        Debug.Print 売上.Init.Filter_(商品名, 1).Sum_(2)      ' 1列目を商品名でフィルターして、2列目の合計を出します
        
        Debug.Print 商品名 & "の平均売上高 : ";
        Debug.Print 売上.Init.Filter_(商品名, 1).Average_(4)      ' 1列目を商品名でフィルターして、4列目の平均を出します
        
    Next
    
End Sub

(上記のコードを実行し、イミディエイトウィンドウで確認してみてください)

コードを見てもらうと分かるように、メソッドチェーンをしています。
なので、どうしても内部で計算過程を保持しておく必要があり、初期に取り込んだデータに戻したい場合は[.Init]メソッドを実行してください。



終わりに
ArratExは一次元と二次元の配列を意識して、簡単に処理できるように作りました。
今回紹介したクラスで少しは、配列処理をシンプルに書けるようになると思います。
バグ等ありましたら、コメントにて教えていただけると助かります。

一部、いげ太様のAriawaseを参考にしています。いつもお世話になっております。
github.com