2011-01-20 9 views
3

VBAにJavaのSetコンテナのようなものはありますか?私は何かを見つけることができず、セットはVBAで予約されているので、Googleは役に立たないようです。Excel-VBA - VBAのJavas Setコンテナのようなものはありますか?

いずれのアイデアも素晴らしいでしょう。今は唯一の選択肢は辞書または配列です。

ありがとうございました。

答えて

3

VBAには「コレクション」オブジェクトが組み込まれており、多くの人がMS Scripting Runtimeの「Dictionary」オブジェクトを本質的にVBAの一部として十分に標準とみなしています。

しかし、どちらも一般的なオブジェクトの一意性を強制しません。アプリケーションに一意性を持たせることができるかどうかは、詳細に依存します。

たとえば、一連の文字列が必要な場合は、簡単です。 「辞書」を使用して、そのキーを「セット」として使用してください。 'Dictionary'には 'Exists'メソッドがあるので、実際のすべての作業が含まれている 'Dictionary'で独自の限定された 'Set'クラスを作成するのは簡単です。 (Excelを使用している場合は、単純なVariant値(文字列、数値、ブール値、エラー)で動作します。

オブジェクトインスタンスがあると、複雑になることがあります。 'Dictionary'オブジェクトをキーとしてオブジェクトを使用しますが、オブジェクト識別を等価テストとして使用します。例えば、私はVBA即時ウィンドウにこれを入力した:

set d=new Dictionary 
set c1=new Collection 
set c2=c1 
d(c1) = 42 
fv d 
<Dictionary: keys: #V(0..0){<Collection: 0 elems: >}, items: #V(0..0){42%}> 
d(c2)=99 
fv d 
<Dictionary: keys: #V(0..0){<Collection: 0 elems: >}, items: #V(0..0){99%}> 
set c3=new Collection 
d(c3)=101 
fv d 
<Dictionary: keys: #V(0..1){<Collection: 0 elems: >,<Collection: 0 elems: >}, items: #V(0..1){99%,101%}> 

(「FVが」私はデバッグに使用VBAルーチンである - それだけのものの文字列表現を出力します。)あなたはその同じオブジェクトを見ることができますは等しく扱われますが、同じようにの値がではありません。

カスタム等価性テストを持つセットが必要な場合は、自明ではないコードを記述する必要があります。しかし、少なくともオブジェクトインスタンスから辞書キーとして使用できる値にマッピングを書くことができれば、あなた自身の「これは既にセットのメンバーですか?」と書く必要を避けることができます。コード。

一部relevaneリンク:

Is there a way to write an equality test for a VBA class with private members without exposing knowledge of the existence of those private members?

Hash Table/Associative Array in VBA

+0

うん、それは私が考え出しもののようなものです。私はあなたの答えを投票するだろうが、私はn00bです。ありがとうございました。 – Josh

関連する問題