動態陣列參照函數(1) - UNIQUE

Excel 365的新增動態參照函數UNIQUE,快速傳回唯一值。

這真是千呼萬喚始出來的重要函數之一,原本要擷取欄位的唯一性資料,也就是將欄位裡的重複資料剔除時,除了透過多種函數的複雜組合與陣列參照外,藉由[資料]索引標籤裡[移除重複項]的功能選項操作,也可以辦得到。但是,只要原始資料有所異動,[移除重複項]的功能選項操作又得再操作一次,實在不便利也沒有效益。但是,有了UNIQUE動態參照函數,一切都不一樣囉!

語法:

=UNIQUE (array, [by_col], [exactly_once])

參數: 

  • array – 想要擷取其內容之唯一值的資料範圍或陣列。
  • by_col – 要傳回唯一欄位或唯一資料列。若未表明此參數,預設為False或0,是以unique by row地擷取唯一資料列(unique by row)的內容,這是適用於垂直的縱向資料陣列;如果設定此參數為true或1,則便以unique by Column方式擷取唯一欄位的資料內容,這是適用於水平的橫向資料陣列。
  • exactly_once – 是否只傳回僅顯示過一次的項目。此參數的預設值是False,可以傳回每個相異的項目,也就是傳回所有出現過一次以上的項目,但是剔除有重複的項目;若是將此參數設定為true或1,則表示傳回僅顯示過一次的項目,也就是說,只要有重複兩次或兩次以上的項目都不會顯示。

範例:

此實作範例的資料表,事先已經重新命名為「Hiking」:

透過UNIQUE函數,便可以輕鬆移除指定欄位裡的重複項,傳回所有相異的資料,也就是確保所有的資料項目僅會出現一次。例如:若要確認報名清單,則有重複報名的姓名,應該僅能出現一次,而多餘的同名資料要立即剔除。因此:

=UNIQUE(Hiking[姓名])

正是使用的好時機。

若是要將有重複的英文名稱剔除,則可輸入以下函數:

=UNIQUE(Hiking[英文名])

如果想知道有哪些部門參與這次的活動,則可執行以下函數:

=UNIQUE(Hiking[部門])

甚至,我們也可以結合兩欄位進行移除重複項喔!例如:

=UNIQUE(Hiking[姓名]&","&Hiking[英文名])

在UNIQUE函數的語法中,第二個參數是可以省略而且也是預設值的參數,代表需要傳回唯一欄位或唯一資料列。這個參數的設定與資料來源是什麼架構有關係。傳統的資料表格是一種行、列式架構,橫向為資料紀錄、縱向為資料欄位。所以,不論是篩選資料、擷取記錄,應該都是以傳回橫向資料列為圭臬。若運用於UNIQUE函數的語法中,則第二個參數應該設定為「傳回唯一資料列」,這也是預設值,因此也可以不須表明此參數,或設定為False或0。

如果將UNIQUE函數的第二個參數設定為True或1,意即「傳回唯一欄」,則根據此實例的結果,每一個縱向欄位的欄名都不一樣(「單位」、「人數」、「主管」與「位置」),所以,都是相異的內容,沒有所謂的唯一值,也就剔除不了相同的縱向資料囉!

反之,如果要取其唯一值的資料來源架構剛好相反,是以縱向為一筆筆的資料記錄、橫向為一個個的資料欄位,則UNIQUE函數的第二個參數便可設定為「傳回唯一欄」,意即此參數可以設定為True或1。以下圖所示為例,可以針對縱向的各欄進行移除重複項的操作,因此,已經事先命名為「部門資料2」的資料來源M2:Z5,若要剔除重複的縱向單位資料,則可以輸入為:

=UNIQUE(部門資料2,True)

同理,此例若是將UNIQUE函數的第二個參數設定為「傳回唯一列」(設定為True或1),就沒有什麼意義了,因為,「部門資料2」的資料範圍裡面,並沒有相同的橫向資料內容。

最後,我們再來檢視一下UNIQUE的最後一個參數exactly_once的用法與情境。如果我們光就「移除重複項」這個字眼來吹毛求疵一番,推敲其文字裡的含意,倒底是要將重複的資料統統剔除,保留僅出現過一次的資料就好(傳回只顯示一次的項目),抑或是將有重複的資料項目,只保留一份,其餘的重複內容盡數剔除,讓各項目資料都確保只出現過一次而已(傳回每個相異的項目)。
exactly_once參數正如英文字面上的意思「剛好一次」,若exactly_once=True便是前者(傳回只顯示一次的項目),表示要將有重複的項目統統剔除,傳回僅顯示過一次的項目,也就是說,只要有重複兩次或兩次以上的項目都不會顯示。

若exactly_once=False便是後者(傳回每個相異的項目),僅保留只出現過一次的資料項目,而這也是此函數的預設值。例如:有重複填寫的姓名,僅能保留一次,多餘的重複姓名則立即剔除。

註:此Excel文章內文實作活頁簿檔案下載