這邊有個台灣的旅宿清單,有各個旅宿的資訊:
我想用 QUERY
找位於「高雄市、臺南市、屏東縣、臺東縣」的旅宿資訊。如果用 OR
來寫:
=QUERY(..., "SELECT ... WHERE A = '高雄市'
OR A = '臺南市'
OR A = '屏東縣'
OR A = '臺東縣'")
用上次介紹的 MATCHES
「|
」來寫:
=QUERY(..., "SELECT ... WHERE A MATCHES '高雄市|臺南市|屏東縣|臺東縣'")
那麽如果我們希望 QUERY
能跟範圍內的資料連動,又要怎麼做呢?
像是下面這邊,我們想用 QUERY
找位於 G 欄的「高雄市、臺南市、屏東縣、臺東縣」旅宿資訊:
要怎麼寫呢?如果要按照之前介紹過的 QUERY 函式大解析(九):與儲存格連動,用「&
」串連的話:
=QUERY(..., "SELECT ... WHERE A = '" & G2 & "'
OR A = '" & G3 & "'
OR A = '" & G4 & "'
OR A = '" & G5 & "'")
但是這方法得一個個指定儲存格,且如果日後清單再繼續增加或減少的話,就得再編輯 OR
,這方法有點不太理想。
那怎麼寫更好呢?可以用 WHERE
的 MATCHES
搭配 TEXTJOIN
函式來寫。
今天來分享 MATCHES
「|
」跟 TEXTJOIN
的另一個應用,讓你的 QUERY
可以更彈性,條件是一個範圍的資料也能迎刃而解。
歡迎來這邊複製一份練習用的試算表,一起來做做看!先打開「練習」工作表,你會看到 A 到 E 欄是等等要 QUERY 的地方, G 欄有縣市清單:
這次會提到三個之前介紹過的概念,如果想要複習的話,也歡迎來這看看:
我們的目標是做出這樣的 QUERY
:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '高雄市|臺南市|屏東縣|臺東縣'")
來看看那個 WHERE
!我們要試著把 MATCHES
後面的那串跟縣市清單連在一起,讓它成為「高雄市|臺南市|屏東縣|臺東縣
」這樣的正規表達式咒語。
怎麼做呢?先說結論,有兩個步驟:
TEXTJOIN
函式,把縣市清單內的儲存格以「|
」為連結字元串在一起,形成一個像是「a|b|c|d|...
」的文字,即是正規表達式的「咒語」。&
字元與第一個步驟的結果連接,把它跟 MATCHES
接上。這樣就可以讓 QUERY
跟範圍連動在一起了。
我們先在 H2 寫 TEXTJOIN
函式,把縣市清單串在一起看看吧。輸入:
=TEXTJOIN("|", TRUE, G2:G)
|
結果就順利顯示了我們要的正規表達式「咒語」:
你可以在 G 欄的清單這邊加入新的縣市,看看 H2 的結果會不會跟著改變。我這邊加入了「花蓮縣」,H2 成功跟著連動了:
好,既然要讓 QUERY
可以跟儲存格互動,要出動 &
啦!我們在 A2,按照題目需求先完成前半段的 QUERY
:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES
因為等等要和 H2 的文字連結,我們要先起一個單引號「'
」:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '
再來用雙引號「"
」暫時先把目前的 QUERY
指令先關起來:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '"
然後我們用 &
字元,串連 H2:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '" & H2
再來寫第二個 &
、準備繼續連接 QUERY
指令:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '" & H2 &
接著是雙引號「"
」,準備把剩下的 QUERY
寫完:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '" & H2 & "
寫單引號「'
」,讓 MATCHES
結束。
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '" & H2 & "'
接下來我們還可以繼續寫其他的 QUERY
語句(ORDER BY
、LIMIT
等),舉例來說,按照 A 欄位做排序後再按 B 欄位排序:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '" & H2 & "'
ORDER BY A, B")
如果沒打算繼續寫的話,你可以寫上雙引號「"」讓 QUERY
語句結束:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '" & H2 & "'")
颯爽按下 Enter 鍵,看看結果:
成功啦!你可以自由測試,把清單改成不同縣市,看看執行結果怎麼樣:
當然你也可以一次把第一步跟第二步寫好,像這樣:
=QUERY('台灣旅宿網旅宿清單'!A:L,
"SELECT C, A, B, K, L
WHERE A MATCHES '" & TEXTJOIN("|", TRUE, G2:G) & "'")
結果也完全一樣的唷!
你可以考慮用這招,讓 TEXTJOIN
函式去取動態更新的範圍(像是 IMPORTRANGE
、QUERY
、FILTER
等),可以讓你的 QUERY
更有彈性喔!希望這招對你有幫助。
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!