返回列表 上一主題 發帖

[發問] 計算不重複出現的日期

回復 5# Bodhidharma

抱歉,row(B2:B26)-1傳回的陣列應該是{1,2,3,...,25},沒有26

TOP

本帖最後由 Bodhidharma 於 2013-4-12 23:05 編輯
回復  Bodhidharma

請問如果是資料會增加的情形下,也可用陣列,然後將公式直接下拉嗎?
PJChen 發表於 2013-4-12 20:07


{=SUM(IF(MATCH(OFFSET($B$2,,,COUNTA(B:B)-1),OFFSET($B$2,,,COUNTA(B:B)-1),0)=ROW(OFFSET($B$2,,,COUNTA(B:B)-1))-1,1,0))}
耶…這類公式你應該會常常用到,最好理解一下概念
offset($B$2,,,counta(B:B)-1,)就是從B2開始,高度為counta(B:B)-1的儲存格範圍
因此以你的資料就是B2:B26,因為counta(B:B)-1會隨著資料數增加,所以就達到動態範圍的效果,回傳所有你測資的欄位。
match(B2:B26,B2:B26,0)的陣列公式,會回傳{match(B2:B26,B2,0),match(B2:B26,B3,0),match(B2:B26,B4,0)...match(B2:B26,B26,0)}的陣列,因為match遇到重複值會傳回最前面的,因此這個函數就會傳回所有相同日期第一個出現的位置,你用憑估值公式就可以看出是{1,1,1,1,1,1,1,1,1,10,10,10,10,10,10,16,16,16,16,16,21,21,21,21,21}。要注意的是,因為match是從B2開始,因此"第一個符合"會是1而不是該行列數2。(如果從B1開始就會剛好對應第一個出現的列數)
把這個陣列對應於row(B2:B26)-1,也就是(1,2,3,4,5,6,7,8,...26},如果相同就傳回1,不同就視為零。也就是match(...)=row(...)的時候,就代表是你要的,不重複出現的日期。把這些東西加總起來即是你要的答案。

TOP

回復 3# Bodhidharma

請問如果是資料會增加的情形下,也可用陣列,然後將公式直接下拉嗎?

TOP

本帖最後由 Bodhidharma 於 2013-4-12 17:39 編輯

回復 2# Bodhidharma

沒排序的話陣列公式
{=SUM(IF(MATCH(B2:B26,B:B,0)=ROW(B2:B26),1,0))}

note: if(...,1,0)可以改成1*(...)

TOP

回復 1# PJChen

既然你的日期是有排序的,那就用陣列公式
{=SUM(IF(B2:B26<>B3:B27,1,0))}

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題