更新於 2024/04/06閱讀時間約 9 分鐘

QUERY 函式大解析(九):與儲存格連動

如果你 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
就會出現:
那麼想要在 C2 出現「小玉:170 公分」的話,當然「A2 & B2」就可以囉!
既然我們可以用 & 來連結儲存格,那 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 和儲存格的運用!會橫跨所有上面提到的資料格式。如果練習的時候卡住了,歡迎到「練習解答」的試算表對個答案,實際做做看應該會比只看這篇文章更有幫助。
如果你已經通關、還想要再延伸應用的話,想到幾個方向給大家參考:
  1. 搭配 IFS、核取方塊等等不同條件式,做出一個可以包含複數條件的搜尋引擎
  2. 一個下拉式選單延伸到多項 QUERY,更新一次互動格就可以更新全部的 QUERY
  3. 更多用法等你來發掘 👀!

如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!
想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源唷!
我是喜特先生,Mr. Sheet,我們下個教學見!
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.