2010-05-06 3 views
3

단일 치수 배열을 사용한다고 가정 해 보겠습니다. 명시 적으로 값이 할당 된 요소의 가장 높은 색인이 무엇인지 간단하게 알려주는 방법이 있습니까? 루프를 거치고 계산하는 것 외에는? Ubound가 배열의 가장 높은 차원을 찾았지만 필요한 것은 아닙니다. Ubound와 같은 것이 있지만 배열의 채워진 요소 만 계산하거나 가장 높은 인덱스를 채 웁니다.배열이 가장 많이 채워지는 치수 vba

내 배열에 문자열이 있습니다. 또한 배열이 다차원 일 경우 어떻게됩니까?

저는 Excel에서 작업하고 있습니다.

+0

당신의 말씨가 불분명합니다 ... "단일 차원 배열"의 "가장 높은 차원"은 하나입니다. 배열에서 가장 큰 값을 의미합니까? – ewall

+1

OP는 기본값이있는 요소가 아니라 명시 적으로 값이 할당 된 요소의 최상위 인덱스 *를 의미합니다. 배열에 포함될 수있는 값의 종류가 무엇인지 알 경우 'Application.WorksheetFunction'을 통해 Excel 함수 (COUNTA 등) 중 하나를 사용하여 원하는 것을 얻을 수도 있지만 – jtolle

+0

나는 동의합니다. @jtolle을 사용하여 공유해야하는 배열에 대한 자세한 내용을 토대로 특정 대답을 수행해야합니다. –

답변

3

간단히 말하면,이 작업을 수행하는 메커니즘이 없지만 해킹 할 방법을 찾고 있다면 계속 읽어보십시오.

배열을 채우는 방법에 따라 다릅니다. 순차적이라면 가장 쉬운 방법은 카운터를 사용하는 것입니다.

랜덤 화 된 경우 마지막 요소의 정확한 색인을 찾는 것이 더 어려워집니다. 하나의 아이디어는 최대 값부터 시작하여 카운트 다운을 시작하는 것입니다.

배열이 초기화되면 기본값을 셀 수 있고 ubound에서 빼기 수 있습니다.

다른 아이디어가 있지만 더 나은 답변 기회를 제공하기 위해 문제를보다 명확하게 정의해야합니다. 바람직하게는 예를 든다. 물론

2

배열을 채울 때 ReDim Preserve를 사용하는 것이 좋습니다. 따라서 UBound는 당신을 위해 아주 잘 작동 할 것입니다. 다차원 배열의 마지막 차원 만 ReDimmed 될 수 있습니다.

+0

그게 효과가 있지만, 내가하고있는 일에 완전히 실용적이지는 않습니다. 단지 내가 ReDim Perserve라는 것을 의미 할 것입니다. 그건 괜찮을거야. 지금 당장 나는 배열에 무언가를 추가/제거 할 때 추적하고있는 것과 비슷한 일을하고있다. – Ommit

0

,이 루프 아무 문제가 정말 없다,하지만 ...

당신이이 말 : 세 번째 요소의 기본 값을 가지고 있기 때문에, '2'인쇄됩니다

Public Sub test() 
    Dim a(1 To 3) 

    a(1) = 1 
    a(2) = "stuff" 

    Debug.Print Application.WorksheetFunction.CountA(a) 
End Sub 

'빈'. (이 배열이 작동하려면 Variant 형식으로 선언해야하지만 String 형식의 요소를 포함 할 수 있습니다. 배열의 형식이 String이면 비어 있지 않습니다!) 물론이 경우에는 모든 잔액이 끝났다는 것을 알게됩니다. 단지 계산 일 뿐이므로 실제로는 지수를 반환하지 않습니다. 같은 이유로 2 차원 어레이에서 값의 분포를 알아야 의미를 알 수 있습니다.

내 생각에 이것은 편집을 기반으로 찾고있는 것 같습니다.

1

"사용 된"색인 번호를 추적하기 위해 다른 변수를 수정하는 항목을 배열에 추가하는 배열 변수, 코드가 포함 된 사용자 정의 클래스를 사용할 수도 있습니다. 그런 다음 저장된 "최고 색인"번호를 반환하는 함수를 포함 할 수 있습니다.

관련 문제