# GOOGLE SHEET 公式解析 ## 多條件計次與陣列化 [檔案-報名表](https://docs.google.com/spreadsheets/d/1wZ5KAmIoLQUnSFt190P_GGSZswtn705BrBiXjplqbGA/edit#gid=589705295) 公式填寫位置--報名表原始資料!K1 :::success =ArrayFormula(if(A1:A="","",if(COUNTIFS( H:H,H1:H,D:D,"我要報名")-COUNTIFS( H:H,H1:H,D:D,"我要取消")<=0,"取消",""))) ::: 參考資料[google 文件編輯器說明](https://support.google.com/docs/answer/3256550?hl=zh-Hant) 主公式: :::success if(COUNTIFS( H:H,H1:H,D:D,"我要報名")-COUNTIFS( H:H,H1:H,D:D,"我要取消")<=0,"取消","") ::: 說明: :::info 計算 (身份証為 H欄的本列資料 並且D欄是我要報名)的次數 減去 (身份証為 H欄的本列資料 並且D欄是我要取消)的次數 <=0 就是取消 值為取消 大於0 則為要報名 值為空 為何如此-可能有人報名-取消-又報名<font color="#f00"> 原本選姓名-但考量可以同名同姓所以改為用其它不會重覆的欄位 </font> ::: COUNTIFS這一段的解析 :::success COUNTIFS( H:H,H1:H,D:D,"我要報名") COUNTIFS( H:H,H1:H,D:D,"我要取消") 一般 多條件加總的寫法 COUNTIFS( H:H,<font color="#f00">H1</font>,D:D,"我要報名") 再往下複制 COUNTIFS( H:H,<font color="#f00">H1:H</font>,D:D,"我要報名") 為什麻要用這個方式的差異在 要配合 ArrayFormula() 陣列公式 <font color="#f00"> 這樣做的好處就是當表單資料增加時會自動往下計算 不用一直手動往下補公式。 </font> ::: :::success PS 如果是要計算包含的資料 公式可以這樣 COUNTIFS( H:H,H1:H,D:D,"*我要報名*") 其它的可以看google 範例 ::: :::success 為了讓公式只在有效資料計算- 多了一個判別 if(A1:A="","",主公式) <font color="ff00ff">其中 A1:A="" 只有在GOOGLE SHEET 中配合陣列化時使用</font> ::: ## QUERY 公式填寫位置--報名且未取消的名單!A1 :::success =query('報名表原始資料'!A:K,"select B,C,D,E,F,G,H,I,J, count(D) where D='我要報名' and K='' group by B,C,D,E,F,G,H,I,J label count(D) '報名次數'",1) ::: :::success 參考資料: [喜特先生的](https://vocus.cc/article/606b50b8fd897800011eba1d) [google 文件編輯器說明](https://support.google.com/docs/answer/3093343?hl=zh-Hant&sjid=6547037064601166375-AP) 有空可以先看上的 --喜特先生的-- query 是 Google 開發的一個類似 SQL 搜尋的語言 ::: :::warning Query 有三段設定 QUERY(<font color="#f00">資料</font>, <font color="darkgreen">查詢</font>, <font color="blue">標題</font>) query(<font color="#f00">'報名表原始資料'!A:K</font>,<font color="darkgreen">"select B,C,D,E,F,G,H,I,J, count(D) where D='我要報名' and K='' group by B,C,D,E,F,G,H,I,J label count(D) '報名次數' "</font>,<font color="blue">1</font>) ::: :::success 資料:<font color="#f00">'報名表原始資料'!A:K</font> 可以同一個工作表 或 讀取其它工作表(IMPORTRANGE)都是可以的 差別在讀取其它工作表時需設定權限 另外亦可以讀取網頁資料 ::: :::success 查詢: "<font color="red">select B,C,D,E,F,G,H,I,J, count(D) where D='我要報名' and K='' group by B,C,D,E,F,G,H,I,J label count(D) '報名次數' </font>" | 指令 | 說明 | | -------------------------- | ------------------- | | select | 查詢 | | B,C,D,E,F,G,H,I,J | 要顯示的欄位 | | ,count(D) | 要計算的欄位 | | where | 條件 | | D='我要報名' | 條件1 | | and K='' | 條件2 | | group by B,C,D,E,F,G,H,I,J | count(D) 計算的群族 | | label count(D) '報名次數' | 指定標題 | 其中條件1與條件2需同時成立 用 AND 連接 ::: :::success 標題: 如果有資料自己合併成一筆,一定要設定這個參數 標題=-1和1的結果會一樣 標題=0 預設的標題會不出現 指令 label count(C) 所指定的標題依然會出現 :::