【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんにちは。
VBAって便利ですよね。作業効率にも繋げることができるし。
突然ですが、
下記のようなくだもの、そしてそれぞれに数値が記載されている表があるとします。
図1 リスト集
そして、くだものの商品名ごとの値の集計をしたいとします。(重複している商品の数値は、加算していきます)
集計イメージは、下記図のようなものです。
さきほどのシート「リスト」とは別のシート「集計」に集計結果を記載していきます。
図2 集計イメージ
もし、このような作業をVBAで行うとしたらどのようにやりますか。(方法はいろいろなやり方があります。)
これくらいのことは、VBAではなくエクセル関数を使えば・・・ と思う方もいるかもしれませんが
それは暗黙の了解で。
今回は、Dictionary(連想配列)を使用して集計を行っていきますので
その方法について説明していきます。
Dictionary(連想配列)は、「キー」と「値」で登録する配列です。
一般的な配列は、キーが数値ですが
連想配列は、キーが文字になったようなイメージです。
図3 (配列)と(連想配列)イメージ
上の配列は、キーが添え字であるため、
・やおや(0)→リンゴ
・やおや(1)→バナナ
・やおや(2)→もも
になります。
下の連想配列はキーが文字列であるため、
・やおや(”くだものA”)→リンゴ
・やおや(”くだものB”)→バナナ
・やおや(”くだものP”)→もも
になります。
そして、連想配列は簡単に配列を追加することができます。
ただし、キーの重複はできません。
Dictionary配列の操作方法について説明します。
操作方法としては
初期設定→追加を行っていきます。
そして、連想配列に設定したキーに対する値を出力したり、指定したキーが設定されているのかという確認も出来ます。
Dim Dictionary名 As Object
Set Dictionary名 = CreateObject("Scripting.Dictionary")
※初期設定を行います。
オブジェクト型で宣言して、CreateObjectを宣言します。
これによりDictionary配列を使用することが出来ます。
Dictionary名.Add Key, 値
※Dictionaryに値を設定します。
Dictionaryは、キーと値をセットで行います。
If Dictionary名.Exists(Key) Then
*****Dictionary(連想配列)内にキーが設定されている*****
Else
*****Dictionary(連想配列)内にキーが設定されていない*****
End If
※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つずつ設定されてるキーと値を指定のセルに出力します。
入力データとして、使用するのは、図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 実行結果
きちんとキーごとに値がシート「集計」に記載されていることがわかります。
それぞれの値も入力データであるシート「リスト」を確認すると
図5 シート「リスト」確認
数値が正しく出力されていることわかります。
これにより、連想配列を使用して集計を行うことができました。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート