---
# System prepended metadata

title: 公式解析
tags: [EXCEL公式解析]

---

# 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) 所指定的標題依然會出現
:::
