- 帖子
- 186
- 主題
- 6
- 精華
- 0
- 積分
- 218
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-11-12
- 最後登錄
- 2014-4-15
|
5#
發表於 2013-4-12 23:03
| 只看該作者
本帖最後由 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(...)的時候,就代表是你要的,不重複出現的日期。把這些東西加總起來即是你要的答案。 |
|