{ 看過這組花括號嗎?}

2022/10/09閱讀時間約 9 分鐘
先問你一個小問題!
假如我想把下表中,整個 A 欄的內容放到 B 欄,且當 A 欄的值有任何更動,B 欄的值也要跟著更動的話,我可以怎麼做?
或許你想到了這幾個方法:
一、複製貼上?行不通,因為這麼一來值就會固定,不隨著 A 欄的變化而更新。
二、把儲存格參照一個個拿出來寫?比如說在 B2 寫:
=A2
在 B3 繼續寫:
=A3
然後一路寫到 A 欄位的資料見底。雖然這樣是達到目的了,但有點費工,而且長遠來看,這樣試算表的執行效率可能也不會太好。
三、用小括號參照範圍呢?
好,我們試試。這是 =(A2:A) 的執行結果:
竟然只出現 A2 的資料,為什麼?這是因為 ( ) 只能參照一個儲存格、而不是整個 A 欄的範圍,所以它只顯示到 A2 到 A 的第一個儲存格。
那有沒有別的方法呢?當然有的!如果你用了這次文章要分享的方法,在 B2 輸入:
={A2:A}
你會看到資料全都過來了,而且 A 欄更新的話 B 欄也會跟著動。
這就是我今天想分享的 { },通稱花括號(或大括號),用它來參照範圍。只要了解 { } 是什麼、怎麼運作的,它就可以帶給我們很多利用函式的可能性。
舉幾個你可以用 { } 能做的事情:
  • 分段處理巨大的 IMPORTRANGE 結果。
  • 在用 QUERY 的時候,查詢多個範圍。
  • 在用 VLOOKUP 查表的時候一次回傳多欄結果。(詳請請看這篇文章
  • 在用 QUERY 的時候,製作動態的總和欄或總和列。
... 當然還有更多可能!
今天除了最後一點的 QUERY 動態總和欄列需要多點篇幅解釋之外,前面這兩點我會在今天的文章分享給大家。一起看下去吧!

{ }

(小時候在學怎麼搭配括號做加減乘除的時候,我數學老師都叫這種括號「花括號」,總覺得很有記憶點,就一路叫到現在了)
{ } 的作用,就是參照範圍,可以是欄、列、或是某範圍的值。舉幾個例子:
  • 參照欄: ={A2:A} 、={B2:B50}、={C10:C100}。
  • 參照列:={A2:2}、={5:5}。
  • 參照範圍:={A1:D10}、={B2:C50}、={C42:D}。

簡易用法舉例

來看看怎麼用 { } 來參照工作表上的各種欄、列跟範圍。我會用這張表來說明:
我們想要參照整個 A 欄(四列蘋果):
={A:A}
如果是整個第 1 列(蘋果、葡萄、檸檬):
={1:1}
我們也可以參照一個範圍,像是參照 A1 到 B2:
={A1:B2}
很簡單吧!可是...

那為什麼寫函式的時候,不必寫 { }?

換個方式說:
  • 「在寫函式、填指定範圍的時候,直接把範圍選起來就好,我還要寫 { } 嗎?」
  • 「平常寫函式不加 { } 也跑得好好的,不是嗎?」
的確,我們不用 { } 也不會怎麼樣:
你也是可以在範圍前後 { },但結果其實沒差。
所以這其實不是 { } 能發揮效用的絕佳場景。實際運用上,我們用到 { } 大多不是在參照單一範圍的時候(因為這樣跟 ( ) 沒有差別), 而是用在接下來要分享的「合併多個範圍」的時候,才會讓 { } 的威力展開。

合併多個範圍

{ } 除了剛剛可以像剛剛那樣,直接參照某個範圍之外,也可以加上分號(;)、逗號(,),用不同方式把多個範圍合併在一起。

{___; ___} 垂直合併

我們可以在 { } 裡面填入你想合併的範圍,再用分號(;)隔開,這樣一來指定的範圍就會彼此垂直合併在一起。例如:
垂直合併範圍一跟範圍二:
={範圍一; 範圍二}
垂直合併範圍一、範圍二跟範圍三:
={範圍一; 範圍二; 範圍三}
...
這邊說的垂直合併,可以想成把指定的範圍上下拼接在一起,成為一張新表。
例如說我想把下面四個範圍合併起來:
用剛剛的邏輯想想看,那就是:
={範圍一; 範圍二; 範圍三; 範圍四}
但這樣的合併有個大前提,那就是所有指定範圍的欄數都要相同,你不能合併欄數不相同的範圍。拿上面範圍的例子來說,每個範圍的欄數都是 4 欄,所以可以合併;如果你想合併欄數不相同的範圍,試算表會丟一個 #VALUE! 錯誤或是 #REF! 給你:

{___, ___} 水平合併

跟上面的垂直合併原理一樣,只是方向變了!語法也差不多:
水平合併範圍一跟範圍二:
={範圍一, 範圍二}

水平合併範圍一、範圍二跟範圍三:
={範圍一, 範圍二, 範圍三}
...
這麼一來,範圍會水平合併,左右拼接。來看看示意圖:
我想把範圍一、範圍二、範圍三跟範圍四水平合併,那就是:
={範圍一, 範圍二, 範圍三, 範圍四}
這邊的合併也一樣有個大前提,那就是所有指定範圍的列數都要相同,你不能合併列數不相同的範圍。一樣拿上面範圍的例子來說,每個範圍的列數都是 10 欄,所以可以合併;如果你想合併欄數不相同的範圍,試算表一樣會丟一個 #VALUE! 錯誤或是 #REF! 給你。

垂直、水平一起用!

如果你想做更進階的操作,你也可以把垂直跟水平兩個方法合在一起用。像是把四散各地的六個範圍放一起:
你就可以寫:
={
    範圍一, 範圍二, 範圍三;
    範圍四, 範圍五, 範圍六;
}
但相對地,在做這種操作的時候也需要留意指定的範圍。
我們先看看水平合併的部分:
  • 把範圍一、範圍二跟範圍三當成一個很大的列,列數必須相同,都是 2 列。
  • 把範圍四、範圍五跟範圍六當成一個很大的列,列數必須相同,都是 3 列
而垂直合併就是把前面提到的這兩個很大的列,在欄數相同的前提下,上下拼在一起。

練習時間

呼,理論的部分終於結束了!我們馬上運用剛剛的合併範圍來做點事情。

分段處理巨大的 IMPORTRANGE 結果

我們來解決這個在 IMPORTRANGE 時,這個「結果過大」的錯誤。
會發生這種錯誤的原因,這通常是因為我們想把太多資料一次傳過來了。
假如我們已經知道這資料今後會往下延伸、或往上刪減好了,也就是說欄數不會動、但是列數會。既然這樣,我們就可以用垂直合併的方法,把 IMPORTRANGE 的範圍分好幾段之後再合併。
把語法拿出來寫的話,
={
    IMPORTRANGE("網址", "工作表!A1:J10000"); 
    IMPORTRANGE("網址", "工作表!A10001:J20000");
    IMPORTRANGE("網址", "工作表!A20001:J30000");
    IMPORTRANGE("網址", "工作表!A30001:J"
}
這邊的意思是讓 IMPORTRANGE 去抓第 1 列到第 10000 列的資料、再來是第 10001 列到 20000 列、第 20001 列到 30000 列、最後是第 30001 列到工作表的最後,一段一段抓,最後把結果垂直合併。
你也可以做水平合併,例如:
={
    IMPORTRANGE("網址", "工作表!D:D"),
    IMPORTRANGE("網址", "工作表!F:F"),
    IMPORTRANGE("網址", "工作表!Q:Q")
}
這邊是讓 IMPORTRANGE 抓工作表的 D 欄、F 欄和 Q 欄,然後再把這三欄水平合併在一起的意思。用這個方法,就可以只抓我們需要的欄位,就不必把整個工作表範圍抓進來了。

用 QUERY 一次查找多個範圍

我有兩個工作表,欄位一樣,分別是某公司在第一季(Q1)跟第二季(Q2)的訂單資料:
Q1
Q2
我想要把 Q1 跟 Q2 兩張表合在一起,並且用 QUERY 去搜尋已發貨(I 欄)的衣櫃和茶几(E 欄)共賣出了幾件(G 欄)。這是我的方法:
=QUERY({'Q1 訂單'!A:I; 'Q2 訂單'!A:I},
 "SELECT Col5, SUM(Col7)
  WHERE (Col5 = '電視櫃' OR Col5 = '茶几') AND Col9 = TRUE
  GROUP BY Col5")
首先用 { } 把兩個範圍拼起來,再來就用我們常用的 SELECT、WHERE、GROUP BY 處理就可以了。唯一要注意的是,如果用了 { },就不可以直接指定欄位字母(像是 SELECT A, B, C),而是要以 Col# 這個語法來指定要 QUERY 的欄位,例如 Col1 就是第一欄、Col2 就是第二欄等等。
我知道這個有點違反人性,所以我這邊附上字母跟數字的對應表給大家參考(假設 A 欄是第一欄):

今天介紹了一下 { } 的用法,我鼓勵你實際試試看:
  • 垂直合併跟水平合併的語法,了解怎樣才不會合併失敗。
  • 把 { } 實際套用在 IMPORTRANGE 跟 QUERY 該怎麼做。
  • 或寫函式的時候,任何選多個範圍的時候。
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!
想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!
4.4K會員
137內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
發表第一個留言支持創作者!