2017-11-02 2 views
0

최종적으로 히스토그램에 입력되는 일부 데이터 분석과 함께 사용하기 위해 ~ 60 개의 저장소에 많은 양의 데이터 (최대 1 백만 항목)를 저장하려고합니다. . 문제는 그 나는 아래의 코드를 사용하는 경우 :WorksheetFunction.Frequency를 사용한 후 VBA의 인덱스가 항상 범위를 벗어났습니다.

Dim myBinnedData As Variant 
myBinnedData = Application.WorksheetFunction.Frequency(myData,myBins) 

'나는이

내가 myBinnedData에 액세스 할 수 없다 배열에 할당 할 수 없다는 오류가 그렇지 않은 becuase myBinnedData이 방법을 어둡게했다 색인의 사용을 통해. 데이터를 가져올 수있는 유일한 방법은 For Each 루프를 사용하는 것입니다.하지만 각 포인트를 처리하기 전에 myBinnedData의 첫 번째 요소와 마지막 요소가 필요합니다. 모든 것이 For Each 루프에서 제대로 작동하지만 색인 생성을 시도 할 때마다 (즉, data = myBinnedData (0)) 색인 번호와 상관없이 색인의 범위를 벗어난 오류가 발생합니다. TypeName을 사용하여 유형을 확인했으며 Variant()였습니다.

문제는 WorksheetFunction.Frequency 함수로 만든 배열을 인덱싱하는 올바른 방법은 무엇입니까?

도움이 될 것입니다.

+0

주파수 출력이 2 차원 (1 - x, 1 - 1) 인 것처럼 보입니다.'debug.print myBinnedData (1,1) '을 시도하십시오. – Zerk

+0

감사합니다! 작동했습니다. – user2731076

답변

2

frequency은 2 차원 배열을 반환합니다 (그러나 2 차원은 내가 보는 한 1에서 1까지만입니다). 첫 번째 줄은 하한과 상한으로 myBins + 1의 크기가 당신에게 일을 제공한다

Debug.print lbound(myBinnedData, 1), ubound(myBinnedData, 1) 
    Debug.print lbound(myBinnedData, 2), ubound(myBinnedData, 2) 

보십시오.
두 번째 줄은 1을 상한선 및 하한선으로 표시합니다. 데이터를 반복 할, Zerk이 코멘트에서 언급 한 바와 같이

dim i as integer 
for i = lbound(myBinnedData, 1) to ubound(myBinnedData, 1) 
    Debug.print myBinnedData(i, 1) 
next i 
+0

해답을 가져 주셔서 감사합니다. 그랬어! – user2731076

0

을 사용하고 FunThomas 대답, 주파수 함수는 2 차원 배열을 반환, 그래서 그것이 myBinnedData 사용하여 인덱스 할 수 있었다 (인덱스, 1). 나는 이미 그걸 시도했다고 생각했지만, 나는 그렇게 생각하지 않았다! 도와 주셔서 감사합니다!

Excel 시트의 데이터를 호출하지 않기 때문에 Nikolaos에서 제공 한 대답을 한 번도 시도한 적이 없으며 인쇄 만합니다. myData 및 myBins 배열은 VBA 코드에서 만들어집니다.

관련 문제