質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

6826閲覧

VBAでDictionaryにAddしようとするとキーの重複エラーとなる

uw9623

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/11/13 07:55

編集2020/11/13 09:53

VBAでDictionaryにAddしようとしたときの重複エラーを解決したい

Dictionary型の変数を定義し、
#Addメソッドを使って下記の例のような処理を書いた際に重複エラーとなってしまいます。

当方実行環境がmacOSのため、Dictionaryクラスは以下からclsファイルをダウンロードしプロジェクトにインポートしております。
https://github.com/VBA-tools/VBA-Dictionary

下記に詳細を記載致しますので、お力添えいただけないでしょうか。

ソースコード

vba

1Function hoge() 2 'Dictionary型の変数宣言 3 Dim dic As New Dictionary 4 5 '宣言した変数に値追加 6 dic.Add "あいう", "かきくけこ" 7 dic.Add "アイウ", "カキクケコ" 8End Function

エラー内容

おそらく「あいう」と「アイウ」が同じ文字列と判定されてしまっているようで、
下記のようなエラーとなります。

実行時エラー '457': このキーはすでにこのコレクションの要素に割り当てられています。

試したこと

以下のようにプロパティをセットし、完全一致でキーの値を検索するようにしました。

vba

1Function hoge() 2 Dim dic As New Dictionary 3 dic.CompareMode = BinaryCompare '⇐追加 4 5 dic.Add "あいう", "かきくけこ" 6 dic.Add "アイウ", "カキクケコ" 7End Function

ただ、CompareModeはデフォルトがBinaryModeであること、
CompareModeを変更しても#Addには影響が無いとの情報から挙動は変わりありませんでした。

補足情報(FW/ツールのバージョンなど)

OS: macOS Catalina
Excelバージョン: Microsoft Excel 2019 for Mac

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そのクラスのソースを見た感じ、Macだと内部的にCollectionオブジェクト、Windowsの場合はScripting.Dictionaryオブジェクトが使用されるようです。

VBAのCollectionの罠 から引用すると、

Collectionはキーを指定して値を追加するMap的な使い方もできるが、この「キー」の一致判定に癖がある。どうも全角半角、大文字小文字、ひらがなカタカナの差異はすべて無視してくれるようだ。

という事らしいです。
キーを元にハッシュ関数なりを通して独自のキー文字列を生成して、それを使用して追加するみたいな事をしないとダメかも?(それかCollectionオブジェクトを独自に作るor代替品を探すか)

投稿2020/11/14 00:29

編集2020/11/14 00:32
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uw9623

2020/11/16 07:50

ご回答ありがとうございます。 内部でCollectionを使っているとは盲点でした... ご提示頂いた方法等も含めて対応方針検討致します。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問