我在T-SQL上做了很多努力,但我想在Excel VBA上实现相同的功能。怎么做到这一点?我的表单上有一个名为“Stops”的字段,该字段与卡车在下达订单时所生成的停靠点有关。我想计算停站总数。 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上执行此操作。任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
您也可以尝试
=SUM(IF($B$2:$B$15,1/COUNTIF($B$2:$B$15,$B$2:$B$15)))
作为数组公式解决方案,假设您的数据在B2:B15中。当然,使用Ctrl + Shift + Enter输入数组公式,而不是输入,所以也许你的解决方案稍微好一些:)
也不应该问你答案是 7 停止,而不是 5 ???
答案 1 :(得分:1)
您已经有了基于公式的解决方案,这可能是您希望在这种情况下使用的解决方案 如果您对使用VBA解决问题的方法感到好奇,请继续阅读。
对于识别唯一值的问题,字典可以是适当的数据结构 特别是,您可以在添加密钥之前检查密钥的存在 测试的例子如下:
(请注意:您必须启用(选中复选框)工具>参考>“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
结果:
total items in dict: 5 dict key: 1 dict key: 2 dict key: 3 dict key: 7 dict key: 8