Excel 統計符合條件不重複的個數
要求從貨運明細中統計各省某日發貨點數量,公式如下:
=SUMPRODUCT((Sheet1!$L$2:$L$1747=B6) * (Sheet1!$M$2:$M1747=$A$1) / COUNTIF(Sheet1!$U$2:$U$1747,Sheet1!$U$2:$U$1747))
Sheet1是貨運明細,其中L列是發貨省,B6是要統計的省份;M列是發貨日期,A1是要統計的日期,U列是發貨點。
需要注意的是最大行數1747必須是有效行數,如果為了通用,把行數放大,比如2000,由於1747行後面沒有資料,導致countif函式的統計結果為0,就會產生被零除的錯誤。
這種方法給客戶後,客戶說函式的運算量大,很卡。換個方法吧,先對明細建立一個查詢,本想用SQL語句一次完成,可是,用於Excel的SQL語句既不支援where中直接引用單元格的值,也不支援count(distinct 欄位名)這種寫法,所以,最後採用先建立一個去重複的查詢,再用sumifs求和。
1、建立查詢的方法
資料選項卡—現有連線—瀏覽更多 或者 按快捷鍵Alt+D+D+D
選擇要查詢的Excel檔案和檔案中的的工作表,就可以將相應工作表的資料取過來。表現形式選擇表。
查詢結果表放在W6開始的區域,如目前的結果是W6:Y61。
2、修改查詢
查詢結果表處點選右鍵,表格—編輯查詢,查詢語句如下:
select 日期,始發省份,count(*) as 網點數量 from (select distinct 日期,始發省份,攬收機構 from [Sheet1$]) group by 日期,始發省份
select 月份,始發省份,count(*) as 網點數量 from (select distinct 月份,始發省份,攬收機構 from [Sheet1$]) group by 月份,始發省份
結果如下:
日期 | 始發省份 | 網點數量 | 月份 | 始發省份 | 網點數量 |
10月01日 | 雲南省 | 1 | 10月 | 浙江省 | 1 |
10月02日 | 雲南省 | 1 | 10月 | 安徽省 | 47 |
10月05日 | 雲南省 | 1 | 10月 | 雲南省 | 2 |
10月09日 | 雲南省 | 1 | 10月 | 河南省 | 1 |
10月10日 | 雲南省 | 1 | 11月 | 湖北省 | 4 |
10月11日 | 雲南省 | 1 | 11月 | 浙江省 | 1 |
10月12日 | 安徽省 | 1 | 11月 | 安徽省 | 16 |
10月12日 | 雲南省 | 1 | 11月 | 雲南省 | 2 |
10月13日 | 雲南省 | 1 | |||
10月14日 | 雲南省 | 2 | |||
10月15日 | 雲南省 | 1 | |||
10月16日 | 安徽省 | 2 | |||
10月16日 | 雲南省 | 1 | |||
10月17日 | 安徽省 | 3 | |||
10月17日 | 雲南省 | 1 | |||
10月18日 | 安徽省 | 6 |
3、統計某日網點數
公式如下:
=SUMIFS($Y$6:$Y$1000,$W$6:$W$1000,TEXT($A$1,"M月D日"),$X$6:$X$1000,B6)
其中1000是預留的查詢結果行數,可以大於實際行數,不影響統計結果,這樣明細增加的時候就沒問題了。
4、Excel使用distinct關鍵字時似乎很苛刻,除了上面提到的,對欄位做處理後取不重複也不行,比如distinct left(日期,3)就不行。