2012-03-26 330 views
0

我已經在T-SQL上做了很多工作,但我想在Excel VBA上實現它。如何實現這一目標?我在我的工作表上有一個名爲「停止」的字段,它與卡車在執行訂單時製造的停靠點有關。我想統計總站數。 1站可以有多個訂單交付。在停止列中的數據是這樣的:Excel中的SELECT(DISTINCT COUNT)

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

好。我找到了答案,因此我想在此發佈。我可以使用頻率函數來計算停止的不同值,它給了我正確的結果。 這裏是一個襯裏代碼(該範圍可被調整) = SUM(N(FREQUENCY(H177:H190,H177:H190)> 0)) 我發現了以下網頁上的代碼: [HTTP ://www.cpearson.com/excel/duplicates.aspx] [1] [1]:http://www.cpearson.com/excel/Duplicates.aspx – rvphx 2012-03-26 17:40:06

回答

1

還可以嘗試

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

作爲陣列式的解決方案,假設你的數據是在B2:B15。數組公式當然是用Ctrl + Shift + Enter輸入的,而不是輸入,所以也許你的解決方案稍微好一點:)

也不應該你的問題說的答案是停止,並且不是 ???

+0

我的壞..我在看一個不同的數據集! – rvphx 2012-03-26 18:06:26

+0

不是問題:)...它實際上讓我難倒了,否則我會更早地發佈答案! – playercharlie 2012-03-26 18:23:18

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 
+0

謝謝伯尼。現在我遇到了另一個問題。我想插入一個函數(計算不同的值)在一個工作表中有路線的小計。因此,實際上數據看起來像 Route1 訂單#停止# Route2 訂單#停止 如何在每個小計級別插入函數?我正在考慮在插入小計時根據空白單元格製作動態範圍。有任何想法嗎? Route1 – rvphx 2012-03-26 20:08:34

+0

@RajivVarma:你很受歡迎。看起來你已經轉移到另一個問題。你能否考慮發佈一個新問題?謝謝。 – bernie 2012-03-26 20:11:55

+0

完美。路上的新問題。將很快發佈鏈接。 – rvphx 2012-03-26 20:31:23