2011-01-20 4 views
3

VBA에서 Java의 Set 컨테이너와 같은 것이 있습니까? 세트가 VBA에서 예약 된 작업이므로 아무 것도 찾을 수 없으며 Google이 도움이되지 않습니다.Excel-VBA - VBA의 Javas Set 컨테이너와 같은 것이 있습니까?

모든 아이디어가 우수 할 것입니다. 지금 내 유일한 옵션은 사전 또는 배열입니다.

감사합니다.

답변

3

VBA에는 'Collection'개체가 내장되어 있으며 많은 사람들이 MS Scripting Runtime의 'Dictionary'개체를 본질적으로 VBA의 일부로 간주합니다.

그러나 어느 것도 일반 개체에 대해 고유성을 적용하지 않습니다. 애플리케이션에 고유성을 적용 할 수 있는지 여부는 세부 사항에 따라 다릅니다.

예를 들어, 문자열 집합을 원한다면 쉽습니다. '사전'을 사용하고 키를 '세트'로 사용하십시오. 'Dictionary'는 'Exists'방법을 가지고 있으므로 실제 작업이 모두 포함 된 '사전'을 사용하여 제한된 'Set'클래스를 작성하는 것은 매우 쉽습니다. Excel을 사용하는 경우 문자열, 숫자, 불리언 값, 오류와 같은 간단한 Variant 값과 함께 사용할 수 있습니다.

개체 인스턴스가있는 경우 상황이 더 복잡해 질 수 있습니다. 'Dictionary'객체 이 객체를 키로 사용하지만 동일성 테스트로 객체 ID를 사용합니다. 예를 들어, 난 그냥 VBA 직접 실행 창에이를 입력 : (. 'FV는'나는 디버깅을 위해 사용하는 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%}> 

당신은 동일한 개체를 볼 수 있습니다 는 동일하게 취급되지만 동일한 값인 개체가 아닙니다.

사용자 정의 평등 테스트가있는 세트가 필요한 경우 사소한 코드를 작성해야합니다. 그러나 객체 인스턴스에서 사전 키로 사용할 수있는 값으로 매핑을 작성할 수 있다면 자신의 "이 객체가 이미 세트의 멤버입니까?"라고 작성하지 않아도됩니다. 암호.

일부 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

관련 문제