検索

キーワード


目次

【Excel VBA】Dictionary(連想配列)を使用した集計方法

  • 公開日:2023-06-05 19:51:08
  • 最終更新日:2023-06-04 19:24:11

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

はじめに

こんにちは。

VBAって便利ですよね。作業効率にも繋げることができるし。


突然ですが、

下記のようなくだもの、そしてそれぞれに数値が記載されている表があるとします。


図1 リスト集

図1 リスト集


そして、くだものの商品名ごとの値の集計をしたいとします。(重複している商品の数値は、加算していきます)

集計イメージは、下記図のようなものです。

さきほどのシート「リスト」とは別のシート「集計」に集計結果を記載していきます。


図2 集計イメージ

図2 集計イメージ


もし、このような作業をVBAで行うとしたらどのようにやりますか。(方法はいろいろなやり方があります。


これくらいのことは、VBAではなくエクセル関数を使えば・・・ と思う方もいるかもしれませんが

それは暗黙の了解で。


今回は、Dictionary(連想配列)を使用して集計を行っていきますので

その方法について説明していきます。


1.Dictionary(連想配列)とは

Dictionary(連想配列)は、「キー」と「値」で登録する配列です。

一般的な配列は、キーが数値ですが

連想配列は、キーが文字になったようなイメージです。 


図3 (配列)と(連想配列)イメージ

図3 (配列)と(連想配列)イメージ

上の配列は、キーが添え字であるため、

・やおや(0)→リンゴ

・やおや(1)→バナナ

・やおや(2)→もも

になります。


下の連想配列はキーが文字列であるため、

・やおや(”くだものA”)→リンゴ

やおや(”くだものB”)→バナナ

やおや(”くだものP”)→もも

になります。


そして、連想配列は簡単に配列を追加することができます。

ただし、キーの重複はできません。


2.Dictionary(連想配列)の操作方法

Dictionary配列の操作方法について説明します。

操作方法としては

初期設定→追加を行っていきます。

そして、連想配列に設定したキーに対する値を出力したり、指定したキーが設定されているのかという確認も出来ます。


①Dictionary(連想配列)の初期設定

Dim Dictionary名 As Object
Set Dictionary名 = CreateObject("Scripting.Dictionary")

※初期設定を行います。

 オブジェクト型で宣言して、CreateObjectを宣言します。

 これによりDictionary配列を使用することが出来ます。


②Dictionary(連想配列)への追加方法

Dictionary名.Add Key,

Dictionaryに値を設定します。

 Dictionaryは、キーと値をセットで行います。


③Dictionary(連想配列)内にキーが設定されているか確認する方法

If Dictionary名.Exists(Key) Then
*****Dictionary(連想配列)内にキーが設定されている***** Else *****Dictionary(連想配列)内にキーが設定されていない***** End If

Dictionaryに指定したキーが設定されているか確認を行います。

 設定されている場合は、キーが設定されている方の処理を行い

 設定されていない場合は、キーが設定されていない方の処理を行います。


④Dictionary(連想配列)からの出力方法

Dictionary名(Key)

※これによりキーに対する値が出力されます。


しかし、配列には何個キーがあるかわからない。どんな名前のキーが登録されているかわからないということもあるかと思います。

その場合は、下記のようにキーとかを指定しないで

配列が何個あるのかを確認して、それから1つずつ出力していく方法で行います。


Dim i As Long
Dim dic_Key As Variant,dic_Item As Variant
dic_Key = Dictionary.Keys
dic_Item = Dictionary.Items
    
For i = 1 To UBound(dic_Key)
 Cells( , ) = dic_Key(i)
 Cells( , ) = dic_Item(i)
Next


※まずは、連想配列を設定するためのオブジェクトを作成します。

 ・dic_Key:連想配列のキーを設定するオブジェクト

 ・dic_Item:連想配列の値を設定するオブジェクト


 連想配列のキーと値をオブジェクトに設定してから

 オブジェクトに何個設定されているかを確認して、

 1つずつ設定されてるキーと値を指定のセルに出力します。


3.Dictionary(連想配列)のサンプルコード

入力データとして、使用するのは、図1 リスト集です。

そして、図2 集計イメージが出力されるようにします。


サンプルコード

Dim i As Long
Dim data_Di As Object
Dim dic_Key As Variant, dic_Item As Variant

Set data_Di = CreateObject("Scripting.Dictionary")

For i = 1 To Worksheets("リスト").Range("A1000").End(xlUp).Row           ***①
   
    If data_Di.Exists(Worksheets("リスト").Cells(i, 1).Value) Then
        data_Di(Worksheets("リスト").Cells(i, 1).Value) = _
        data_Di(Worksheets("リスト").Cells(i, 1).Value) + Worksheets("リスト").Cells(i, 2).Value
    Else
        data_Di.Add Worksheets("リスト").Cells(i, 1).Value, Worksheets("リスト").Cells(i, 2).Value
    End If

Next i

    dic_Key = data_Di.Keys                       ***②
    dic_Item = data_Di.Items

For i = 0 To data_Di.Count - 1
    Worksheets("集計").Cells(i + 1, 1) = dic_Key(i)           ***③
    Worksheets("集計").Cells(i + 1, 2) = dic_Item(i)
Next


簡単にサンプルコードの説明をします。


①の箇所では、図1 リストに記載されているキーと値を連想配列に設定します。

シート「リスト」に記載してあるキーと値を1行ずつみて連想配列に設定していきます。

まずはExists(2ー③で紹介)を使用して、連想配列内にキーが登録されているか確認します。

 登録されている場合は、登録されている連想配列のキーに対する値にセルに記載されている値を加算します。

 登録されてない場合はAdd(2-②)を使用して、連想配列にキーと値を登録します。

②の箇所では作成したオブジェクトに連想配列を設定します。

③連想配列を設定したオブジェクトより設定されたものを1つずつ

 セル「集計」にセットしています。


4.Dictionary(連想配列)のサンプルコードの実行

上記のサンプルコードを実行すると

下記のようになります。


図4 実行結果

図4 実行確認 


きちんとキーごとに値がシート「集計」に記載されていることがわかります。

それぞれの値も入力データであるシート「リスト」を確認すると


図5 シート「リスト」確認

図5 シート「リスト」確認

数値が正しく出力されていることわかります。


これにより、連想配列を使用して集計を行うことができました。


【著者】

Imamura

「挑戦心」を忘れずに、新しいことにチャレンジしています。 資格:VBAエキスパート Excel VBA(ベーシック/スタンダード) 等

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート

よく読まれている記事