在Excel中select(DISTINCT COUNT)

我在T-SQL上做了很多工作,但是我想在Excel VBA上实现它。 如何做到这一点? 我的工作表上有一个名为“停止”的字段,这个字段与一辆卡车在交货时的停靠位置有关。 我想统计总站数。 1站可以有多个订单交付。 停靠栏上的数据是这样的:

Order# Stops 1527305 1 1527305 1 1529418 2 1529418 2 1527299 3 1527299 3 1528894 5 1528894 5 1529529 6 1529529 6 1529518 7 1529518 7 1527522 8 1527522 8 

所以,最后的计数应该只有7个独特的站点。 当前代码查看最后一行,并将其作为总停止(这是错误的)。 我现在的代码如下:

  ActiveCell.Offset(0, 7).Select ' H = stop number Selection.Value = curStop 'sets stop number If Selection.Value = 0 Then ActiveCell.Offset(-1, 0).Select curStop = ActiveCell.Value ActiveCell.Offset(1, 0).Select Selection.Value = curStop End If 

我用一行代码在T-SQL上做了一些事情,但是不知道如何在Excel上这样做。 任何帮助将不胜感激。 谢谢!!

你也可以试试

 =SUM(IF($B$2:$B$15,1/COUNTIF($B$2:$B$15,$B$2:$B$15))) 

作为数组公式解决scheme,假设您的数据在B2:B15中。 数组公式当然是用Ctrl + Shift + Enterinput的,而不是input法,所以也许你的解决scheme稍微好点:)

也不应该说你的问题的答案是7站,而不是5

你已经有了一个基于公式的解决scheme,这可能是你希望在这种情况下使用的。
如果您对使用VBA解决问题的方式感到好奇,请继续阅读。

对于识别唯一值的问题,字典可以是适当的数据结构。
特别是,您可以在添encryption钥之前检查密钥的存在。
经过testing的例子如下:

(请注意:您必须启用(选中checkbox)工具>参考>“Microsoft脚本运行时”。)

 Option Explicit Function uniq_dict(ByRef row As Long, ByRef col As Long) Dim dict As New Scripting.Dictionary Dim ws As Worksheet Set ws = ActiveWorkbook.Sheets("Sheet1") For row = 1 To ws.Cells(Rows.Count, col).End(xlUp).row If Not dict.Exists(ws.Cells(row, col).Value) Then dict.Add ws.Cells(row, col).Value, Null '# can insert something here End If Next row Set uniq_dict = dict End Function Sub call_uniq_dict() Dim i As Integer Dim k() As Variant Dim dict As New Scripting.Dictionary Set dict = uniq_dict(1, 1) Debug.Print "total items in dict:", dict.Count k = dict.Keys For i = 0 To dict.Count - 1 Debug.Print " dict key:", k(i) Next End Sub 

结果:

字典中的总项目:5 
  字典键:1 
  字典键:2 
  字典键:3 
  字典键:7 
  字典键:8