如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但如果你可以...
欸,這個好像很方便啊!!!(✪ω✪) 可以看到下面的 QUERY 結果隨著下拉式選單的內容改變了。感覺好像是個很高級的用法,但其實只要用「&」和儲存格串連,就可以讓 QUERY 跟儲存格互動。
我在方格子上寫了一系列使用 QUERY 的教學文章,也歡迎你來看看:
QUERY 函式大解析,系列文索引
今天的內容會比較複雜一點點,如果有任何不確定的地方,歡迎在留言區提問!學會後相信你對 QUERY 的認識就會再更近一步了,實用性也會大增大增。我們馬上來看看吧!٩(。・ω・。)و
基本原理:&
不知道大家有沒有聽過「&」這個東西?「&」符號可以用來連接文字與文字。像是這樣:
="A" & "B" --> AB
="1" & "2" --> 12
="A123" & "B456" ---> A123B456
執行結果像是這樣:
我們當然也可以用 & 來連結儲存格的資訊,例如 A1 & B1、A2 & B2、A100 & Z100。來看看這張圖:
如果我們想要在 C1 結合 A1 的「小明:」和 B1 的「165 公分」、那就可以在 C1 打上:
= A1 & B1
就會出現:
既然我們可以用 & 來連結儲存格,那 QUERY 也其實可以! QUERY 的語法其實是一連串由雙引號「"」開始、打入語法、再由雙引號「"」結束的文字。
那麼,我們先回到上面的例子:
執行出這段 QUERY 的語法其實是:
"SELECT...
WHERE 欄位字母 ... " & 下拉式選單所在的儲存格 & "
剩下的 QUERY 語句"
看起來好像有點複雜,但可以這樣想像:
"SELECT... WHERE 欄位字母 ... "
連接(&) 下拉式選單所在的儲存格
連接(&) "剩下的 QUERY 語句"
至於這串句子裡面的兩對雙引號,你可以看成兩層:
那麼 & 的連接其實就是:淡黃色的部分 + 儲存格 + 剩下的 QUERY 語句了。那來舉幾個語法的例子:
"SELECT A, B
WHERE A & " B1 & "
ORDER BY A DESC"
--
"SELECT *
WHERE A & " B1 & "
"
--
"SELECT A, SUM(B)
WHERE A & " B1 & "
GROUP BY A
"
這樣一來 QUERY 就會隨著 WHERE 之後儲存格的內容、去做搜尋囉!如果想要更方便使用,可以把那個儲存格變成資料驗證(下拉式選單),就像上面的動圖一樣可以快速切換資料了。當然不做下拉式選單也可以,直接在那個儲存格上面編輯也當然 OK。
資料格式
不過我們有時得因為儲存格的資料類型不同,得稍稍改變一下語法、也有些該注意的事情,接下來我們詳細講解一下。為了方便稱呼,我們接下來會把要互動的儲存格簡稱「互動格」 唷!
數字
如果你的互動格裡面是數字,其實語法比較單純,直接用兩個 & 串起來就好了:
=QUERY(資料, "SELECT ...
WHERE A = " & 互動格 & "
..."
)
布林值(TRUE / FALSE)
布林值就是 TRUE 和 FALSE。另外一種會出現 TRUE 和 FALSE 的狀況就是有核取方塊的時候,預設值是 FALSE、打勾就是 TRUE。處理的語法和數字一樣,不需要特別處理:
=QUERY(資料, "SELECT ...
WHERE A = " & 互動格 & "
..."
)
擷取時間、日期 那如果今天互動格裡面是時間或日期,想要擷取裡面的資料(例如擷取「2022 年 5 月 25 日」裡面的年份、月份、日期,又或是擷取「16:30:19」裡面的小時數、分數、秒數),我們就要運用到之前學過的
日期控制術!假如互動格裡面是我們想要查找的小時數:
=QUERY(資料, "SELECT ...
WHERE hour(A) = " & 互動格 & "
...")
當然,如果是秒數,那就是:
=QUERY(資料, "SELECT ...
WHERE second(A) = " & 互動格 & "
...")
以此類推!
文字
再來文字的話會比較麻煩一點點,必須要在內部連結的雙引號前後多加一個單引號「'」,這是要告訴 QUERY 互動格是文字的資訊。可以回想一下,沒有互動格的狀況下,我們要用 WHERE 找含有文字條件時,也本來就需要用到單引號:
... WHERE A = '台灣' ...
... WHERE B contains '中文' ...
... WHERE C starts with '綠島' ...
這就是為什麼使用互動格時候得加上單引號的原因囉!語法就像這樣:
=QUERY(資料, "SELECT ...
WHERE A = '" & 互動格 & "' ...")
你會注意到雙引號的前後各有一個單引號包著,他們是成雙成對的,別讓他們落單!
指定日期
最後再進階一點點的就是,如果你的互動格有日期,而你的 WHERE 條件想要和它互動。不過日期在 Google 試算表算是個比較特別的資料,所以就...要用特別的方式處理:
=QUERY(資料, "SELECT ...
WHERE A = date '"
& TEXT(互動格, "yyyy-mm-dd")
& "' ...")
看看上面的語法,解釋一下原理吧!
- date 語法:可以讓 QUERY 把 date 之後的文字轉換成日期格式。
- 單引號「'」:將互動格的資訊視為文字。
- TEXT(互動格, "yyyy-mm-dd"):將把互動格轉成「yyyy-mm-dd」的格式,QUERY 才能進一步解析。這邊的 yyyy-mm-dd 是固定的,不能以別種形式呈現、不然 QUERY 沒辦法辨識。
如果覺得這個語法不是很好寫,直接複製貼上這段也沒問題的!
換你做做看!
這次要用到的資料在下方的「
資料表」,可以
點開來瞧瞧:
再來請點選資料表「練習」,有準備給大家的練習題 ⬇️
這邊我準備了各式各樣的練習,讓大家可以試試看 QUERY 和儲存格的運用!會橫跨所有上面提到的資料格式。如果練習的時候卡住了,歡迎到「練習解答」的試算表對個答案,實際做做看應該會比只看這篇文章更有幫助。
如果你已經通關、還想要再延伸應用的話,想到幾個方向給大家參考:
- 搭配 IFS、核取方塊等等不同條件式,做出一個可以包含複數條件的搜尋引擎
- 一個下拉式選單延伸到多項 QUERY,更新一次互動格就可以更新全部的 QUERY
- 更多用法等你來發掘 👀!
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!
我是喜特先生,Mr. Sheet,我們下個教學見!