2012-05-11 28 views
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

雖然'IsText'將在一個工作表函數'Range'對象,我不認爲它會接受一個'Range'在VBA中?我一直在玩弄它,並且無法獲得VBA中工作表函數的相同行爲 – psubsee2003

回答

0

你的第一個問題是你test計算WorksheetFunction.CountIf(selectRows, selectRows)一部分。當沒有重複時,這將導致除以零錯誤。在輸入工作表時也會發生這種情況,所以您需要更改邏輯或首先測試這種情況。

您的Type Mismatch問題我相信是由WorksheetFunction.IsText(selectRows)段造成的。我一直無法弄清楚是什麼導致了它,但正如我在我的評論中提到的那樣,我認爲IsText()函數可能不像VBA中輸入一個單元格時那樣使用範圍。

我可能會以不同的方式來解決這個問題。下面是我在其他地方找到的一個例子。SO Count unique values in Excel 這大部分都有工作表公式,但有一個VBA代碼的答案可能會適應。

另一種選擇是創建一個收集和計算元素的數量

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