列中唯一值的计数,以速度为考虑因素

时间:2015-03-18 19:12:18

标签: excel vba

是否有更快的方法来计算列中的唯一值? 我公式的第二次迭代使用了一个速度范围,但收到一个#NAME?错误。感谢。

我使用以下公式来计算第5列中唯一IP地址的数量。 - 在msdn上由Jeeped解释 -

ActiveCell.Formula = "=sumproduct((ipsheet!C[5]<>"""")/ipsheet(ACAS!C[5],ipsheet!C[5]&""""))"

论坛工作但是它超过5000多个条目真的很慢。我尝试实现与

相同的公式
With Sheets("ipsheet")                                                    'create range for ip addresses
     Set rngOfFindings = .Range(.Range("e1"), .Range("e1").End(xlDown))
End With
"=sumproduct((rngOfFindings<>"""")/countif(rngOfFindings,rngOfFindings&""""))"

结果是#NAME?

2 个答案:

答案 0 :(得分:1)

将列中的数据命名为命名范围。

保存文件。

转到数据&gt;来自其他来源&gt;来自Microsoft Query

选择Excel文件,然后导航到Excel文件。打开它,选择您的范围,然后在Microsoft Query中继续并进行编辑。

单击SQL按钮,然后键入

SELECT COUNT(DISTINCT rangename.columnheader) FROM rangename rangename 

答案 1 :(得分:0)

对于大范围,此公式更长但更快

=SUM(IF(FREQUENCY(IF(range<>"",MATCH(range,range,0)),ROW(range)-MIN(ROW(range))),1))

使用 CTRL + SHIFT + ENTER确认