2014-10-08 38 views
1

*大家好,如何在Excel VBA中獲取唯一值計數?

我需要找到使用VBA SQL方法,下面我所提供的所有信息的多個字段唯一值的數量。

我的數據是看起來像一個*

VC  SMP# JDEStyle PO#   QTY 
ARU  10176 AM7619  F117849OG 64 
ARU  10176 AM7619  F118215OG 192 
ARU  10176 AM7619  F248062OD 336 
ARU  653  AE7968  F114004O6 1 
ARU  653  AE7968  F241623O4 18 
ARU  653  AE7968  F8340O4  1 
GOK  2061 SM8360  F248018OD 246 
GOK  2061 SM8360  F248019OD 360 
GOK  2061 SM8360  F248020OD 774 
GOK  2061 SM8360  F248021OD 66 
GOK  2061 SM8360  F248022OD 372 
GOK  2061 SM8360  F256233OD 120 
GOK  2061 SM8360  F256234OD 360 
GOK  2061 SM8360  F256235OD 120 
GOK  2061 SM8360  F256236OD 360 
IND  10176 AB7049  F118324OG 217 
IND  10176 AB7049  F258738OD 87 
IND  10176 AB7049  F258739OD 540 
IND  2068 AB7011  F114006O6 5 
IND  2068 AB7011  F241625O4 3 
SEP  10313 AL4596  F117270OG 4005 
SEP  10313 AL4596  F118173OG 7911 
SEP  10313 AL4596  F254362OD 540 
SEP  10313 AL4596  F254365OD 150 

和我的期望輸出

VC SMP # JDEStyle PO # QTY 
ARU 10176 1   3  592 
ARU 653 1   3  20 
GOK 2061 1   9  2778 
IND 10176 1   3  844 
IND 2068 1   2  8 
SEP 10313 1   4  12606 

但我越來越喜歡

VC SMP #  JDE Style Count of PO # Sum of QTY 
ARU 10176  3   3    592 
ARU 653  3   3    20 
GOK 2061  9   9    2778 
IND 10176  3   3    844 
IND 2068  2   2    8 
SEP 10313  4   4    12606 
輸出0

和我的代碼是

Sub Quality_audit() 
Dim query1 As String 
Dim path As String 
Dim i As Integer 
Dim n As Integer 
Dim m As Long 
Dim wks As Worksheet 
path = "U:\BA\Testing\QA\2014.09.29 SP 15 PROD FLW UP RAW DATA.xlsx" 
query1 = "Select distinct [VC], [SMP #], Count([JDEStyle]) as 'JDE', Count ([PO #]) as PO, Sum ([Quantity]) as QTY from [Page 1$] where [SMP #] is not null AND ([VC] <> 'HEA' AND [VC] <> 'JMS' AND [VC] <> 'SJL') group by [VC], [SMP #]" 

Set conn = New ADODB.Connection 
With conn 
.Provider = "microsoft.ace.oledb.12.0;" 
.ConnectionString = "Data source = " & path & ";" & _ 
"extended properties = excel 12.0;" 
.Open 
End With 

Set rs = New ADODB.Recordset 
Set rs = conn.Execute(query1) 

Workbooks.Add 

Range("a2").CopyFromRecordset rs 
n = 1 
For i = 0 To rs.Fields.Count - 1 
Cells(1, n).Value = rs.Fields(i).Name 
n = n + 1 
Next 
rs.Close 
conn.Close 
end sub 

您的幫助將不勝感激

+0

您不需要VBA。數據透視表將做你需要的。 – 2014-10-08 12:44:36

+1

我認爲在數據透視表中我們有np選項可以在excel 2010中獲得唯一的值計數 – user2066958 2014-10-08 12:47:29

+0

這取決於 - 您是否擁有PowerPivot? – Rory 2014-10-08 13:00:01

回答

0

問題是你沒有得到獨特的計數是否正確?那麼問題將出現在SQL中,是的?我認爲你的DISTINCT是在錯誤的地方。

Select 
    vc, 
    smp, 
    Count(distinct jdestyle) as 'JDE', 
    Count (distinct po) as 'PO', 
    Sum (qty) as 'QTY' 
from stuff 
group by VC, SMP; 
+0

在VBA SQl中不支持Steegness,Count(Distinct)函數。 – user2066958 2014-10-09 03:57:18

0

嗯,這裏是你不妨探討,如果你的返回的記錄少於幾千一個替代的解決方案。

enter image description here

的分子式爲:

G2 - =IF(LEN(G1),IFERROR(INDEX(A$2:A$999, MATCH(0, IF(LEN(A$2:A$999), COUNTIFS($G$1:$G1,$A$2:$A$999,$H$1:$H1,$B$2:$B$999), 1),0)),""),"") 陣列式(CTRL + SHIFT +刪除),複製到H2。

I2 - =IF(LEN($G2),SUMPRODUCT(($A$2:$A$999=$G2)*($B$2:$B$999=$H2)/COUNTIF(C$2:C$999, C$2:C$999&"")),"") 標準配方,複製到J2。

K2 - =IF(LEN(G2),SUMIFS($E$2:$E$999,$A$2:$A$999,$G2,$B$2:$B$999,$H2),"") 標準配方。根據需要填寫所有五個公式,以獲得您需要的記錄。

正如您所知道的,數組公式和SUMPRODUCT毫不費力地咀嚼計算資源。但是,如果一個數據透視表被考慮過,這可能是一個可行的選擇。