※本ブログのページには広告主との提携による広告や宣伝、プロモーションが含まれます。当ブログを経由しての商品の購入や、サービス申し込みが発生すると、それらの提携企業からの成果報酬を受けとる場合があります。

VBA|CompareModeプロパティ(Dictionaryオブジェクト)

Dictionaryオブジェクトは、連想配列や辞書とよばれるオブジェクトのひとつでキー(Key)とアイテム(Item)とよばれる値をセットにして追加(登録)することができることが大きな特徴です。またDictionaryオブジェクトは、複数の便利なメソッドとプロパティをもっています。

こちらの記事では、連想配列(Dictionaryオブジェクト)のメソッドやプロパティの使いかたを紹介しています。

PR

スクール選びにお悩みですか?

動画編集、ロボット、AIとテクノロジーの進化が目まぐるしい時代だからこそ身につけるなら即戦力のスキル。

豊富なコースが選べて、独自開発されたカリキュラムの採用で業界有数の学習継続率!

さらにスキル習得だけじゃない。卒業後の転職や副業まで激アツなサポートが無料!!

CompareModeプロパティは連想配列(Dictionaryオブジェクト)のキーの比較モードの設定値を返す

CompareModeプロパティは、連想配列(Dictionaryオブジェクト)のキー(Key)の比較モードの設定値を返すことができます。また、書きかたを変えることで比較モードを設定することもできます。

連想配列(Dictionaryオブジェクト)は複数のデータを登録ができることから、配列のようにデータリストをあつかうことができるオブジェクトです。最大の特徴は、キー(Key)とアイテム(Item)のペア単位で要素を管理し、キー(Key)をつかってアイテム(Item)を取り出すことができます。また要素は追加・変更・抽出・削除などが可能です。

連想配列(Dictionaryオブジェクト)については、ほかの記事で紹介しています。連想配列(Dictionaryオブジェクト)の詳しい特徴や基本的な使い方、具体的な使用方法などについて知りたい人は以下のリンクをクリックして記事をご覧になってください。

※連想配列(Dictionaryオブジェクト)についてはこちら

CompareModeプロパティ構文

連想配列(Dictionaryオブジェクト).CompareMode

比較モードの設定値を返します。

連想配列(Dictionaryオブジェクト).CompareMode = [compare(設定値)]

=(イコール)設定値と書くことで、比較モードの設定値を変更します。

すでに要素が登録されたDictionaryオブジェクトに実行した場合はエラーが発生します。

Compareで設定できる比較モードの具体的な値については、次で紹介します。

CompareModeプロパティの構成要素と引数

要素/引数 必須/任意 説明
オブジェクト
(object)
必須 Dictionaryオブジェクトの名前を指定します。
設定値
(compare)
任意 設定値を指定した場合、compare は比較モードを表す定数または値です。
詳細は下記表を参考にしてください。
定数 説明
BinaryCompare
(バイナリ比較モード)
0 初期値です。
アルファベットの大文字と小文字を区別する比較モードです。
TextCompare
(テキスト比較モード)
1 アルファベットの大文字と小文字を区別しない比較モードです。
DatabaseCompare
(MicrosoftAccessのみ)
2 MicrosoftAccessのみ使用します。
データベース内の情報に基づいて比較を実行します。
※比較モードの設定は定数、値どちらでも設定することができます。

DictionaryオブジェクトのCompareModeプロパティに設定されている比較モードを設定または返します。

Dictionaryオブジェクトのキー(Key)を比較するモードの確認や変更ができるよ。

CompareModeプロパティつかったサンプルマクロ

連想配列(Dictionaryオブジェクト)のCompareModeプロパティをつかったサンプルマクロを紹介します。
CompareModeプロパティの基本的な使用例とエラーとなるケース、さらにキー(key)の比較モードによる違いについて検証したマクロを掲載しています。

CompareModeプロパティでDictionaryオブジェクトの比較モードの設定値を変更して返す

以下のマクロは、CompareModeプロパティを利用して連想配列(Dictionaryオブジェクト)である「MyDic」に登録されているキー(Key)の比較モードを設定または返します。

Option Explicit

'CompareModeプロパティは文字列キーを比較するための比較モードの値を返すか設定します。
Sub Dic_study1()

'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic As Dictionary
Set MyDic = New Dictionary

'CompareModeプロパティを設定する場合は=の右側に定数または値を書きます。

'デフォルトはバイナリ比較モードの0(BinaryCompare)
Debug.Print MyDic.CompareMode '実行結果>>>0

'①テキスト比較モードを1(TextCompare)に変更
MyDic.CompareMode = TextCompare
Debug.Print MyDic.CompareMode '実行結果>>>1

'②データベース内の情報に基づく比較モードの2(DatabaseCompare)に変更(Microsoft Accessのみ)
MyDic.CompareMode = DatabaseCompare
Debug.Print MyDic.CompareMode '実行結果>>>2

End Sub

Debug.Printをつかって、比較モードの設定値を表示してみます。比較モードの初期値はバイナリ比較モード(BinaryCompare)です。その後、CompareModeプロパティをつかって別の比較モードに変更します。設定値の変更後に改めて比較モードの設定値を表示しています。

サンプルマクロの実行結果をみていきましょう。

Debug.Print MyDic.CompareModeの実行結果から、Dictionaryオブジェクトのキー(Key)の比較モードが変更されたことがわかります。表示された値から、0:バイナリ比較、1:テキスト比較、2:データベース情報に基づく比較と順に変更されています。

サンプルのDictionaryオブジェクト「Mydic」の比較モードを変更できたね。

すでに要素があるDictionaryオブジェクトで比較モードを変更するとエラーが発生する

こちらのサンプルマクロでは、要素を追加したDictionaryオブジェクトでCompareModeプロパティでキー(Key)の比較モードの変更を実行してみます。先にも記載しているとおり、すでに要素が登録されたDictionaryオブジェクトの比較モードを変更しようとした場合はエラーが発生します。

Option Explicit

'CompareModeプロパティは文字列キーを比較するための比較モードの値を返すか設定します。
Sub Dic_study2()

'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic2 As Dictionary
Set MyDic2 = New Dictionary

'初期値(デフォルト)は、0(BinaryCompare)
Debug.Print MyDic2.CompareMode '実行結果>>>0

'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic2.Add "A", "Aのアイテム"
MyDic2.Add "B", "Bのアイテム"

'比較モードをvbTextCompareに変更する
'(既にデータがあるDictionaryオブジェクトの比較モードの変更はエラーが発生する。)
MyDic2.CompareMode = TextCompare '実行結果>>>エラー

End Sub

Dictionaryオブジェクトの「MyDic2」のキー(Key)の比較モードは初期値であるバイナリ比較になっています。

Addメソッドでキー(Key)とアイテム(Item)の項目を登録します。今回は「”A”と”Aのアイテム”」のペアと、「”B”と”Bのアイテム”」のペアの2つを要素として登録しています。

つぎにCompareModeモードを利用して、テキスト比較モードへの変更を試してみます。

Dictionaryオブジェクトにすでに要素が登録されていて、CompareModeプロパティで比較モードの設定値を変更しようとすると上記のエラーが発生します。

Dictionaryオブジェクトにデータがないときに比較モードは変更できるんだね。

バイナリ比較モードはアルファベットの大文字と小文字を区別する

こちらのサンプルマクロでは、CompareModeプロパティの設定値がバイナリ比較モードのときにキー(Key)をつかったアイテム(Item)の取り出しをしています。この後紹介するテキスト比較モードとの実行結果のちがいを確認するとそれぞれの比較モードの動作がわかりやすいと思います。

Option Explicit

'CompareModeプロパティは文字列キーを比較するための比較モードの値を返すか設定します。
Sub Dic_study3()

'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic3 As Dictionary
Set MyDic3 = New Dictionary

'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic3.Add "A", "Aのアイテム"
MyDic3.Add "B", "Bのアイテム"

'初期値(デフォルト)は、0(BinaryCompare)
Debug.Print "比較モード: " & MyDic3.CompareMode '実行結果>>>0

'比較モードはvbBinaryCompare(デフォルト)
Debug.Print "①:" & MyDic3("A") '実行結果>>>①:Aのアイテム
Debug.Print "②:" & MyDic3("a") '実行結果>>>②:空欄
Debug.Print "③:" & MyDic3("b") '実行結果>>>③:空欄
Debug.Print "④:" & MyDic3("B") '実行結果>>>④:Bのアイテム

End Sub

実行結果から、比較モードが0であり、バイナリ比較モードであることがわかります。また、バイナリ比較モードでは大文字と小文字を区別するため、キー(Key)”A”と”B”の大文字を指定したときのみ、ペアになっているアイテム(Item)が取り出せていることがわかります。

小文字でキー(Key)を指定したものは空欄になっているね。

テキスト比較モードはアルファベットの大文字と小文字を区別しない

こちらのサンプルマクロでは、CompareModeプロパティの設定値がテキスト比較モードのときにキー(Key)をつかったアイテム(Item)の取り出しをしています。直前に紹介しているバイナリ比較モードとの実行結果のちがいを確認するとそれぞれの比較モードの動作がわかりやすいと思います。

Option Explicit

'CompareModeプロパティは文字列キーを比較するための比較モードの値を返すか設定します。
Sub Dic_study4()

'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic4 As Dictionary
Set MyDic4 = New Dictionary

'テキスト比較モードを1(vbTextCompare)に変更
MyDic4.CompareMode = TextCompare

'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic4.Add "A", "Aのアイテム"
MyDic4.Add "B", "Bのアイテム"

Debug.Print "比較モード: " & MyDic4.CompareMode '実行結果>>>1
Debug.Print "①:" & MyDic4("A") '実行結果>>>①:Aのアイテム
Debug.Print "②:" & MyDic4("a") '実行結果>>>②:Aのアイテム
Debug.Print "③:" & MyDic4("b") '実行結果>>>③:Bのアイテム
Debug.Print "④:" & MyDic4("B") '実行結果>>>④:Bのアイテム

End Sub

実行結果から、比較モードが1であり、テキスト比較モードであることがわかります。また、テキスト比較モードでは大文字と小文字を区別しないので、すべてのキー(Key)でペアになっているアイテム(Item)が取り出せていることがわかります。

テキスト比較モードでは、大文字と小文字を区別しない結果になったね。

Dictionaryオブジェクトのデータを全削除後に比較モードの変更をする

こちらのサンプルマクロでは、Dictionaryオブジェクトのキー(Key)の比較モードを変更しています。Dictionaryオブジェクトにデータが登録されている状態では、CompareModeプロパティをつかった比較モードを変更することはできないため、RemoveAllメソッドですべての項目を削除してから比較モードを変更しています。

Option Explicit

'CompareModeプロパティは文字列キーを比較するための比較モードの値を返すか設定します。
Sub Dic_study5()

'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic5 As Dictionary
Set MyDic5 = New Dictionary

'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic5.Add "A", "Aのアイテム"

Debug.Print "①:" & MyDic5("a") '実行結果>>>空欄

'RemoveAllメソッドでDictionaryオブジェクトのすべての要素を削除する
MyDic5.RemoveAll

'テキスト比較モードは1(TextCompare)に変更
MyDic5.CompareMode = TextCompare

'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic5.Add "A", "Aのアイテム"

Debug.Print "②:" & MyDic5("a") '実行結果>>>②:Aのアイテム

End Sub

1度目のDebug.Print “①:” & MyDic5(“a”)のあとに、RemoveAllメソッドで要素をすべて削除する処理を入れています。これは、Dictionaryオブジェクトである「MyDic5」に要素がある状態で比較モードを変更しようとすると、エラーが発生してしまうためです。
要素をすべて削除したあとに、CompareModeプロパティを利用してテキスト比較モードに変更し、あらためてアイテム(Item)の取り出しとしてDebug.Print “①:” & MyDic5(“a”)を実行してみます。

バイナリ比較モードからテキスト比較モードに変わったことで、おなじ小文字の”a”をつかったキー(Key)の取り出しでも実行結果に変化があったことがわかります。

すべての要素を削除したあとであれば、比較モードを変更できるね。

コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。

コメント

タイトルとURLをコピーしました