2012-05-11 4 views
0

다음을 구현하는 동안 유형 미스 매치 오류 또는 0으로 나누기 오류가 항상 나타납니다. 범위의 고유 항목 수를 계산하기를 원합니다. 범위의 항목은 " 클래스 "텍스트 :VBA의 고유 항목 수가

startRow = 3 
startColumn = 1 
col = "A" 
Set topCell = Cells(startRow, startColumn) 
Set bottomCell = Cells(Rows.Count, startColumn) 
If IsEmpty(bottomCell) Then Set bottomCell = bottomCell.End(xlUp) 
Set selectRows = Range(col & topCell.Row & ":" & col & bottomCell.Row) 
nRows = WorksheetFunction.CountA(selectRows) 

test = WorksheetFunction.SumProduct(WorksheetFunction.IsText(selectRows)/WorksheetFunction.CountIf(selectRows, selectRows)) 

테스트를위한 계산에 버그가 있지만 이해가되지 않습니다. 어떤 도움은 매우

덕분에 많은

BR 마틴

+0

, 나는 그것이'Range' 받아 들일 것입니다 생각하지 않는다 VBA에서? 나는 그것으로 놀아 왔고 VBA 내에서 워크 시트 기능의 동일한 동작을 가져올 수 없었습니다. – psubsee2003

답변

0

첫 번째 문제는 당신 test 계산의 WorksheetFunction.CountIf(selectRows, selectRows) 부분을 평가. 중복이 없으면 0으로 나누기 오류가 발생합니다. 이것은 워크 시트에도 입력 할 때 발생하기 때문에 논리를 변경하거나이 사례를 먼저 테스트해야합니다.

귀하의 Type Mismatch 문제는 WorksheetFunction.IsText(selectRows) 세그먼트로 인해 발생한다고 생각합니다. 나는 그것을 일으키는 원인을 알아낼 수 없었다. 그러나 나는 나의 의견에서 언급했듯이, IsText() 함수는 셀에 입력 할 때와 같이 VBA에서 범위를 취할 수 없다고 생각한다.

아마도이 문제는 다른 방식으로 접근합니다. 다음은 내가 다른 곳에서 찾은 예입니다. Count unique values in Excel 이것은 주로 워크 시트 수식을 포함하지만 실제로 적용 할 수있는 VBA 코드는 1 가지입니다.

또 다른 옵션은 요소의 수를 컬렉션을 만들고 계산하는 것입니다 IsText` 워크 시트 기능의`Range` 객체를 취할 것 '이지만

Sub CountUnique() 
Dim Col As New Collection 
Dim i As Integer 

On Error Resume Next 

For i = 3 To 10 
    Col.Add Sheet1.Cells(i, 1).Value, Sheet1.Cells(i, 1).Value 
Next 

MsgBox Col.Count 

On Error GoTo 0 
End Sub