1. 程式人生 > >Excel 統計符合條件不重複的個數

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)就不行。