Dictionaryオブジェクトは、連想配列や辞書とよばれるオブジェクトのひとつでキー(Key)とアイテム(Item)とよばれる値をセットにして追加(登録)することができることが大きな特徴です。またDictionaryオブジェクトは、複数の便利なメソッドとプロパティをもっています。
こちらの記事では、連想配列(Dictionaryオブジェクト)のメソッドやプロパティの使いかたを紹介しています。
スクール選びにお悩みですか?
動画編集、ロボット、AIとテクノロジーの進化が目まぐるしい時代だからこそ身につけるなら即戦力のスキル。
豊富なコースが選べて、独自開発されたカリキュラムの採用で業界有数の学習継続率!
さらにスキル習得だけじゃない。卒業後の転職や副業まで激アツなサポートが無料!!
Countプロパティは連想配列(Dictionaryオブジェクト)の要素の数を返す
Countプロパティは、連想配列(Dictionaryオブジェクト)のキー(Key)とアイテム(Item)のセット(要素)の数を返します。
連想配列(Dictionaryオブジェクト)は複数のデータを登録ができることから、配列のようにデータリストをあつかうことができるオブジェクトです。最大の特徴は、キー(Key)とアイテム(Item)のペア単位で要素を管理し、キー(Key)をつかってアイテム(Item)を取り出すことができます。また要素は追加・変更・抽出・削除などが可能です。
連想配列(Dictionaryオブジェクト)については、ほかの記事で紹介しています。連想配列(Dictionaryオブジェクト)の詳しい特徴や基本的な使い方、具体的な使用方法などについて知りたい人は以下のリンクをクリックして記事をご覧になってください。
※連想配列(Dictionaryオブジェクト)についてはこちら
Countプロパティ構文
Countプロパティの構文
連想配列(Dictionaryオブジェクト).Count
指定したDictionaryオブジェクトの要素数をLong型(長整数)の値で返します。
Countプロパティの構成要素と引数
Countプロパティの構成要素と引数
要素/引数 | 必須/任意 | 説明 |
---|---|---|
オブジェクト (object) |
必須 | Dictionaryオブジェクトの名前を指定します。 |
Dictionaryオブジェクトの要素の数を返してくれるよ。
Countプロパティをつかったサンプルマクロ
連想配列(Dictionaryオブジェクト)のCountプロパティをつかったサンプルマクロを紹介します。
Countプロパティの基本的な使用例と要素の追加や変更、削除などをしてから実行したときの変化、くり返し回数として利用したマクロを掲載しています。
CountプロパティでDictionaryオブジェクトの要素数を返す
以下のマクロは、Countプロパティを利用して連想配列(Dictionaryオブジェクト)である「MyDic」に登録されているキー(Key)とアイテム(Item)からなる要素の数を返します。
サンプルコード
Option Explicit
Sub Dic_study1() 'CountプロパティはDictionaryオブジェクトの要素数を返す
'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic As Dictionary
Set MyDic = New Dictionary
'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する
MyDic.Add "クワッス", "あお" '「クワッス」がキー、「あお」がアイテムになる
MyDic.Add "ホゲータ", "あか"
MyDic.Add "ニャオハ", "みどり"
'Countプロパティで要素数を返す
Debug.Print MyDic.Count '実行結果>>>3
End Sub
宣言したDictionaryオブジェクトである「MyDic」にAddメソッドで3つの要素を追加しています。その後、Debug.Printをつかって、Dictionaryオブジェクトの要素数を表示してみます。
サンプルマクロの実行結果をみていきましょう。
実行結果
3
「MyDic」に登録されているキー(Key)とアイテム(Item)のペアである要素の数を表示することができました。
CountプロパティはDictionaryオブジェクトの要素数を調べるときに使えるね。
Dictionaryオブジェクトの要素数が0のときのCountプロパティの動作
こちらのサンプルマクロでは、Dictionaryオブジェクトに要素が1つもない状態でCountプロパティの動作を確認しています。
サンプルコード
Option Explicit
Sub Dic_study2() 'CountプロパティはDictionaryオブジェクトの要素数を返す
'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic2 As Dictionary
Set MyDic2 = New Dictionary
'Countプロパティで要素数を返す
Debug.Print MyDic2.Count '実行結果>>>0
End Sub
Dictionaryオブジェクトの「MyDic2」を宣言しただけの状態です。特に要素の追加はおこなわず、Debug.PrintをつかってCountプロパティの実行結果を表示してみます。
実行結果
0
Dictionaryオブジェクトには要素がひとつも登録されていない状態でもエラーは発生せずに、0が返ってきます。
Dictionaryオブジェクトが要素数が0である結果が返ってきたね。
Countプロパティで返される要素数はインデックスと同一ではない
こちらのサンプルマクロでは、Countプロパティで返されるDictionaryオブジェクトの要素数と、配列データを返すKeysやItemsメソッドを利用した最大インデックスが同じではないことを確認してみます。
サンプルコード
Option Explicit
Sub Dic_study3() 'CountプロパティはDictionaryオブジェクトの要素数を返す
'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic3 As Dictionary
Set MyDic3 = New Dictionary
'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic3.Add "クワッス", "あお" '「クワッス」がキー、「あお」がアイテムになる
MyDic3.Add "ホゲータ", "あか"
MyDic3.Add "ニャオハ", "みどり"
'Countプロパティで要素数を返す
Debug.Print "①Countプロパティ:" & MyDic3.Count '実行結果>>>3
'要素数とインデックス番号で結果は異なる
Debug.Print "②Ubound関数(Keys):" & UBound(MyDic3.Keys) '実行結果>>>2
Debug.Print "③Ubound関数(Items):" & UBound(MyDic3.Items) '実行結果>>>2
End Sub
おなじDictionaryオブジェクトから取得する数値であっても、Countプロパティは要素数とキー(Keys)やアイテム(Items)の配列の最大インデックスは異なるため、それぞれの値を表示して比較してみます。配列の最大インデックスの取得方法にはUbound関数を使います。
Tips
UBound関数は配列データの最大インデックスを返します。
詳しい内容については、以下のリンクをクリックしてご確認ください。
実行結果
①Countプロパティ:3
②Ubound関数(Keys):2
③Ubound関数(Items):2
実行結果から、Countプロパティで取り出した要素の数と配列データの最大インデックスが異なるものであることがわかります。こうなる原因はUbound関数で取り出した配列のインデックスは0からつけられるためです。
次に掲載している画像を見ていただくと分かりやすいと思います。
要素数と最大インデックスはかならずおなじにはならないんだね。
Countプロパティで返される値の変化を確認する
こちらのサンプルマクロでは、Countプロパティで返される要素数が要素を追加するAdd、要素を削除するRemove、すべての要素を削除するRemoveAllメソッドを実行したあとでどのように変化しているのかを確認しています。
サンプルコード
Option Explicit
Sub Dic_study4() 'CountプロパティはDictionaryオブジェクトの要素数を返す
'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic4 As Dictionary
Set MyDic4 = New Dictionary
'Countプロパティで要素数を返す
Debug.Print "①Dictionaryオブジェクト宣言直後:" & MyDic4.Count '実行結果>>>0
'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic4.Add "クワッス", "あお" '「クワッス」がキー、「あお」がアイテムになる
MyDic4.Add "ホゲータ", "あか"
MyDic4.Add "ニャオハ", "みどり"
'Countプロパティで要素数を返す
Debug.Print "②Addメソッドによる要素追加後:" & MyDic4.Count '実行結果>>>3
'Removeメソッドで指定した要素を削除する
MyDic4.Remove ("ホゲータ")
'Countプロパティで要素数を返す
Debug.Print "③Removeメソッドによる要素削除後:" & MyDic4.Count '実行結果>>>2
'Removeメソッドで指定した要素を削除する
MyDic4.Key("クワッス") = "ウェルカモ"
'Countプロパティで要素数を返す
Debug.Print "④Keyプロパティでによる要素の変更:" & MyDic4.Count '実行結果>>>2
'Removeメソッドで指定した要素を削除する
MyDic4.Item("ニャオハ") = "緑"
'Countプロパティで要素数を返す
Debug.Print "⑤Itemプロパティでによる要素の変更:" & MyDic4.Count '実行結果>>>2
'RemoveAllメソッドでDictionaryオブジェクトのすべての要素を削除する
MyDic4.RemoveAll
'Countプロパティで要素数を返す
Debug.Print "⑥RemoveAllメソッドによる全要素削除後:" & MyDic4.Count '実行結果>>>0
End Sub
宣言したDictionaryオブジェクト「MuDic4」の要素の追加(Addメソッド)、要素の変更(Key・Itemプロパティ)、削除(Removeメソッド)、すべての削除(RemoveAllメソッド)をする度にCountプロパティで要素数を表示しています。
実行結果
①Dictionaryオブジェクト宣言直後:0
②Addメソッドによる要素追加後:3
③Removeメソッドによる要素削除後:2
④Keyプロパティでによる要素の変更:2
⑤Itemプロパティでによる要素の変更:2
⑥RemoveAllメソッドによる全要素削除後:0
Dictionaryオブジェクトを宣言した直後は要素数が0、Addメソッドで要素を追加したあとは要素数が3、Removeメソッドで指定した要素を削除をした後は要素数が2、すべての要素を削除するRemoveAllメソッドの実行後の要素数は0となっていることがわかります。
Key・Itemプロパティによる要素の変更では要素数に変化はありません。
追加や削除を実行したあとには要素数が変化していることがわかるね。
Countプロパティで返される値をくり返し回数に利用する
こちらのサンプルマクロでは、Countプロパティで返される値をくり返し回数として利用した内容となっています。初期値や配列の最大インデックスを返すUbound関数を利用した書きかたとの比較をしています。
サンプルコード
Option Explicit
Sub Dic_study5() 'Countプロパティをくり返し回数に利用する
'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic5 As Dictionary
Set MyDic5 = New Dictionary
'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic5.Add "クワッス", "あお" '「クワッス」がキー、「あお」がアイテムになる
MyDic5.Add "ホゲータ", "あか"
MyDic5.Add "ニャオハ", "みどり"
Dim i As Integer 'くり返し用変数の宣言
'MyDic5.Countは3となるため、くり返す回数はiが0~3のときの4回
For i = 0 To MyDic5.Count '(3)
Debug.Print "①Countプロパティでくり返し " & i; " 回目"
Next i
'UBound(MyDic5.Keys)は2となるため、くり返す回数はiが0~2のときの3回
For i = 0 To UBound(MyDic5.Keys) '(2) ※Ubound(MyDic5.Items)でもおなじになる
Debug.Print "②UBound(MyDic5.Keys)でくり返し " & i; " 回目"
Next i
'MyDic5.Countは3となるため、くり返す回数はiが1~3のときの3回
For i = 1 To MyDic5.Count '(3)
Debug.Print "③Countプロパティでくり返し " & i; " 回目"
Next i
'UBound(MyDic5.Keys)は2となるため、くり返す回数はiが1~2のときの2回
For i = 1 To UBound(MyDic5.Keys) '(2) ※Ubound(MyDic5.Items)でもおなじになる
Debug.Print "④UBound(MyDic5.Keys)でくり返し " & i; " 回目"
Next i
End Sub
コードのなかのコメントアウトでも記入していますが、CountプロパティではDictionaryオブジェクトの要素数が返ってくるため、「MyDic5」では3が返ってきます。一方、キー(Key)やアイテム(Item)の配列データに対してUbound関数を実行したときに返される値は2であることから、処理をくり返す回数が異なってきます。
それぞれの実行結果を確認してみましょう。
実行結果
①Countプロパティでくり返し 0 回目
①Countプロパティでくり返し 1 回目
①Countプロパティでくり返し 2 回目
①Countプロパティでくり返し 3 回目
②UBound(MyDic5.Keys)でくり返し 0 回目
②UBound(MyDic5.Keys)でくり返し 1 回目
②UBound(MyDic5.Keys)でくり返し 2 回目
③Countプロパティでくり返し 1 回目
③Countプロパティでくり返し 2 回目
③Countプロパティでくり返し 3 回目
④UBound(MyDic5.Keys)でくり返し 1 回目
④UBound(MyDic5.Keys)でくり返し 2 回目
①のくり返しの初期値が0であり、Countプロパティで回数を指定した場合は処理が全部4回実行されました。同じく、初期値が0であるものの、Ubound関数による回数の指定の②では処理回数は3回です。
続いて、③の初期値を1と指定、Countプロパティで回数を指定した場合は処理が全部3回実行されました。同じく、初期値が1であり、Ubound関数による回数の指定の④では処理回数は2回となります。
書きかたでくり返す回数が変わるので使い分けられるといいね。
コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。
コメント