Excel 進階——從工作到工程 3 分類動態(tài)增減

本文介紹 OFFSET 函數(shù)用法,COUNTA 函數(shù)用法,以及一個良好的構(gòu)架思路。


系列教程索引和配套練習(xí)文件,請點這里。


上一課中,介紹了自動補齊分類的基本方法,核心是使用 VLOOKUP 函數(shù)和 CHOOSE 函數(shù)。

打開 Example 2.xlsx ,效果如下圖

上節(jié)課的最終效果

其中 A3 處的公式為

=VLOOKUP($C3, CHOOSE({1, 2}, Genre!$C$2:$C$121, Genre!A$2:A$121), 2, FALSE)

在固定的分類體系下,這樣做沒有問題。但如果隨著時間的推進,Genre 工作表中現(xiàn)有的 120 個分類標準不夠用,需要增加新的分類時,問題就出現(xiàn)了。

假設(shè)我們發(fā)現(xiàn)某條用戶反饋內(nèi)容為 “ 導(dǎo)致死機 ”,將它寫在三級分類的位置上,填充一級分類和二級分類的公式,會有如下結(jié)果

無法識別的三級分類

該條目對應(yīng)的一級分類和二級分類值為 #N/A,因為 Excel 在現(xiàn)有的分類體系中(Genre 工作表),找不到名為 “ 導(dǎo)致死機 ” 的三級標題。于是我們理所應(yīng)當(dāng)?shù)卦?Genre 工作表中添加一行,把這一個新的分類納入到整個體系中去。

在 Genre 工作表中插入一行新的分類

但是這樣無濟于事,因為在公式

=VLOOKUP($C3, CHOOSE({1, 2}, Genre!$C$2:$C$121, Genre!A$2:A$121), 2, FALSE)

中,我們將搜索三級分類的區(qū)域人為地限定在了 Genre!$C$2:$C$121 中,所以新加的第 122 行內(nèi)容沒有被包含。要實現(xiàn)對新分類的有效識別,就必須讓 VLOOKUP 函數(shù)的搜索區(qū)域和取用區(qū)域,也即它的整個作用區(qū)域,隨著 Genre 工作表中的內(nèi)容動態(tài)的增減。


要知道在有多少個分類標準,需要使用 COUNTA 函數(shù)。

COUNTA

COUNTA(value1, [value2], ...)
  • value1/2/...:第幾個值。

函數(shù)返回值為,參數(shù)中非空值的個數(shù)。

在 Genre 工作表中,非空的行有 122 個,除去標題行,有 121 個有效的分類。這個數(shù)字即可用如下公式獲得

COUNTA(Genre!$C:$C) - 1

并且該數(shù)字會隨著 Genre 工作表中三級分類(C 列)的增減而變化。

接著,使用這個動態(tài)變動的行數(shù),來構(gòu)建 VLOOKUP 的作用區(qū)域,使用 OFFSET 函數(shù)。

OFFSET

OFFSET(reference, rows, cols, [height], [width])
  • reference:某一單元格的地址,作為錨點;
  • rows:錨點向下偏移幾行;
  • cols:錨點向右偏移幾列;
  • height:從錨點開始,向下選擇幾行;
  • width:從錨點開始,向右選擇幾行。

函數(shù)返回值為,由上述五個參數(shù)所確定的數(shù)據(jù)區(qū)域。

將 COUNTA 的結(jié)果放到 OFFSET 中 height 的位置上去,即可構(gòu)建一個會動態(tài)增減大小的數(shù)據(jù)區(qū)域,把這個結(jié)果放到 CHOOSE 中,就能實現(xiàn)動態(tài)增減的作用區(qū)域。

具體地,在 Tamplate 工作表的 A3 處輸入公式

=VLOOKUP($C3, CHOOSE({1,2}, OFFSET(Genre!$C$2, 0, 0, COUNTA(Genre!$C:$C) - 1), OFFSET(Genre!A$2, 0, 0, COUNTA(Genre!$C:$C) - 1)), 2, FALSE)

與前面公式的不同在于,將 Genre!$C$2:$C$121 替換為 OFFSET(Genre!$C$2, 0, 0, COUNTA(Genre!$C:$C) - 1),Genre!A$2:A$121 替換為 OFFSET(Genre!A$2, 0, 0, COUNTA(Genre!$C:$C) - 1))。

OFFSET(Genre!$C$2, 0, 0, COUNTA(Genre!$C:$C) - 1) 的意思是,從 Genre!$C$2 開始,向下移動 0 行,向右移動 0 列,作為起點,向下選擇 COUNTA(Genre!$C:$C) - 1 (121)行(包括其自身),向右選擇 1 列(缺省值)。此刻,這個公式的返回值是區(qū)域 Genre!$C$2:Genre!$C$122,剛好是定義三級分類的范圍。

注意

  • 在第二個 OFFSET 函數(shù)中,列絕對引用的變?yōu)橄鄬σ?,因為將公式填充?B 列時,相應(yīng)地要取用 Genre 中的二級分類。
  • 在第二個 COUNTA 函數(shù)中,仍然以三級分類為標準,是出于一致性的考慮。這樣寫的意思是,只要有三級分類在,不管一二級有沒有,都嘗試尋找。避免了在 Genre 工作表中單獨新增了三級分類,空著其對應(yīng)的一二級分類,導(dǎo)致的,在 Tamplate 中無法反映出來的問題。
  • 這樣的寫法要求 Genre 工作表中,定義分類的區(qū)域不能有空行。如果將新的分類寫在第 123 行,非空行數(shù)量還是 122,導(dǎo)致動態(tài)增減的區(qū)域只作用到 122 行,不能包含第 123 行的數(shù)據(jù)。

這樣一來,在 Genre 中新增的分類標準在 Tamplate 中就可以被有效地識別了。

最終效果

如此便完成了 Example 3.xlsx。


下一課中,將介紹參數(shù)分離的思想,為構(gòu)建靈活性更強的表格做準備。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容