范围内唯一条目的数量,VBA

时间:2012-05-11 12:21:21

标签: vba range unique duplicate-removal

我总是在尝试实现以下内容时收到类型错配错误或除以零错误:我只想计算范围内唯一条目的数量,范围中的条目是“类”文本:

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 马丁

1 个答案:

答案 0 :(得分:0)

您的第一个问题是WorksheetFunction.CountIf(selectRows, selectRows)计算的test部分。当没有重复时,这将导致除以零错误。输入工作表时也会发生这种情况,因此您需要更改逻辑,或首先测试此案例。

我认为您的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