Excel 進(jìn)階——從工作到工程 4 將參數(shù)獨(dú)立成表

本文介紹工程化的核心思路,將參數(shù)獨(dú)立成表哆致,為后續(xù)質(zhì)的飛躍做準(zhǔn)備摊阀,介紹 ADDRESS 函數(shù)、INDIRECT 函數(shù)用法臣咖。


系列教程索引和配套練習(xí)文件漱牵,請(qǐng)點(diǎn)這里酣胀。


面向?qū)ο蟮木幊讨v究封裝,以期達(dá)到 “高內(nèi)聚甚脉,低耦合 ” 的效果儒溉。在 Excel 里也可以這樣干,使表格的功能同表與表內(nèi)的數(shù)據(jù)相分離,從而拓寬表格的適用范圍和靈活性涛碑。

打開 Example 3.xlsx孵淘,新建工作表,命名為 **Settings **揉阎,按如下結(jié)構(gòu)填寫表格內(nèi)容毙籽。

填寫 Settings 工作表的基本信息

文字內(nèi)容其實(shí)無所謂坑赡,意思明確么抗,看著方便就好。按圖中的設(shè)定螟加,第一列為參數(shù)名,第二列為參數(shù)值甸昏,第三列為第二列的公式文本施蜜。第三列不是必須的雌隅,只是為了教學(xué)方便而設(shè)計(jì)的。


FORMULATEXT

FORMULATEXT(reference)
  • reference:目標(biāo)單元格地址罩缴。

函數(shù)返回值為宏蛉,目標(biāo)單元格的公式文本吨枉。

假設(shè) A1 的公式為 =SUM(1, 2),則 A1 的值為 3柬唯;B1 的公式為 =FORMULATEXT(A1)圃庭,則 B1 的值為 =SUM(1, 2)剧腻,是文本,不作為公式執(zhí)行計(jì)算灰伟。

使用 FORMULATEXT 的好處是蕊温,讓讀者可以清晰地看到 B 列中參數(shù)的值是怎么得來的。

在 C2 處填寫公式

=FORMULATEXT(B2)

并向下填充至 C8 處发笔,可以看到一串 #N/A 出現(xiàn)了讨,這是因?yàn)?B 列目前為空,沒有任何公式胞谭,不急男杈,我們先放著伶棒,船到橋頭自然直。


根據(jù)設(shè)計(jì)先蒋,genre_count 參數(shù)用來記錄總共定義了多少個(gè)分類宛渐,也即 Genre 工作表中除了標(biāo)題行以外的其余非空行數(shù)量。在 B2 處填寫公式

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

效果如下

計(jì)算 genre_count 的值

這是一個(gè)基礎(chǔ)參數(shù)业岁,用這個(gè)數(shù)來定位下面函數(shù)中的目標(biāo)單元格叨襟。


ADDRESS

ADDRESS(row_num, column_num, [abs_num], [a1], [sheet_text])
  • row_num:行號(hào);
  • column_num:列號(hào)梳玫;
  • abs_num:引用樣式
    • 1 - 絕對(duì)($A$1,默認(rèn))
    • 2 - 絕對(duì)行 / 相對(duì)列(A$1)
    • 3 - 相對(duì)行 / 絕對(duì)列($A1)
    • 4 - 相對(duì)(A1)姚垃;
  • a1:地址樣式
    • 0 - R1C1 樣式(這是 Excel 內(nèi)置的第二套坐標(biāo)體系积糯,不常用)
    • 1 - A1 樣式(默認(rèn))
  • sheet_text:工作表名稱谦纱。

函數(shù)返回值為,由上述參數(shù)確定的單元格的地址字符串川慌。

用 ADDRESS 函數(shù)來獲取各級(jí)分類首位單元格的地址梦重。例如,G1_first 是 Genre 工作表中一級(jí)分類的第一個(gè)單元格地址降瞳,值為 Genre!$A$2蚓胸,其余同理。對(duì)于 first 類亮靴,由于位置固定茧吊,我們可以手動(dòng)指定目標(biāo)單元格的絕對(duì)地址八毯。而對(duì)于 last 類來說,數(shù)量是動(dòng)態(tài)變化的讶踪,所以行號(hào)的確定需要用到 genre_count 參數(shù)泊交。

計(jì)算分類首位單元格的地址

由于這里需要人工計(jì)算行列位置廓俭,務(wù)必細(xì)心確保數(shù)據(jù)的準(zhǔn)確性研乒。


接下來就是將之前的 VLOOKUP 函數(shù)進(jìn)行修改,使用這里新設(shè)計(jì)的參數(shù)宽菜。

INDIRECT

INDIRECT(ref_text, [a1])
  • ref_text:地址文本竿报,可以是字符串也可以是一個(gè)地址;
  • a1:地址樣式
    • FALSE - R1C1 樣式
    • TRUE - A1 樣式(默認(rèn))

函數(shù)返回值為隆判,目標(biāo)單元格的值。

但是這個(gè) “ 目標(biāo)單元格 ” 有點(diǎn)意思臭挽。當(dāng) ref_text 的值是文本時(shí)(例如 “ A1 ”)咬腕,函數(shù)的值就是 ref_text 所指代的單元格(A1)的值;當(dāng) ref_text 的值是一個(gè)地址引用時(shí)(例如 A1)纽帖,函數(shù)的值就是單元格 A1 的值所指代的單元格的值懊直,例如 A1 的值是 “ B2 ” 的話火鼻,函數(shù)的值就是 B2 的值。

INDIRECT 函數(shù)可以作為單元格看待融撞,所以用冒號(hào)連接兩個(gè) INDIRECT 函數(shù)是合理的粗蔚,可以當(dāng)做普通的兩個(gè)單元格構(gòu)成的一個(gè)區(qū)域。所以在上節(jié)課我們使用 OFFSET 函數(shù)構(gòu)成區(qū)域的方法致扯,可以用 INDIRECT 替代急前。

在 Tamplate 工作表的 A3 位置填寫如下公式

=VLOOKUP($C3, CHOOSE({1,2}, INDIRECT(Settings!$B$5):INDIRECT(Settings!$B$8), INDIRECT(Settings!$B$3):INDIRECT(Settings!$B$6)), 2, FALSE)

注意瀑构,INDIRECT 函數(shù)內(nèi)的參數(shù)使用了絕對(duì)引用寺晌,因?yàn)閷?duì)于所有的待填充的單元格來說澡刹,分類標(biāo)準(zhǔn)的起止位置是完全相同的罢浇。

將公式向下填充至 A9 單元格即可補(bǔ)齊一級(jí)分類沐祷。處理二級(jí)分類時(shí)赖临,不能再將 A3 的公式向右填充灾锯,需要在 B3 位置重寫,如下

=VLOOKUP($C3, CHOOSE({1,2}, INDIRECT(Settings!$B$5):INDIRECT(Settings!$B$8), INDIRECT(Settings!$B$4):INDIRECT(Settings!$B$7)), 2, FALSE)

與 A3 處公式的區(qū)別僅在于兼雄,第二個(gè) INDIRECT 組,也即 CHOOSE 的 value2 參數(shù)块攒,也即最終被 VLOOKUP 作為取用區(qū)域的索引地址金砍,發(fā)生了改變恕稠。即 INDIRECT 從上一個(gè)公式的 “ 從 G1_first 到 G1_last ” 變?yōu)檫@個(gè)公式的 “ 從
G2_first 到 G2_last ”。

將 B3 的公式向下填充至 B9 即可補(bǔ)齊二級(jí)分類千扶,效果如下圖

最終效果

如此便完成了 Example 4.xlsx澎羞。


下一課中敛苇,將介紹整體切換分類體系的方法,把這節(jié)課化簡(jiǎn)為繁的內(nèi)容真正用起來括饶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末图焰,一起剝皮案震驚了整個(gè)濱河市蹦掐,隨后出現(xiàn)的幾起案子僵闯,更是在濱河造成了極大的恐慌鳖粟,老刑警劉巖超陆,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件时呀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡航攒,警方通過查閱死者的電腦和手機(jī)漠畜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門憔狞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彰阴,“玉大人,你說我怎么就攤上這事簇抵∩渲冢” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵典蜕,是天一觀的道長(zhǎng)嘉裤。 經(jīng)常有香客問我栖博,道長(zhǎng)仇让,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任卫玖,我火速辦了婚禮踊淳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脱茉。我一直安慰自己垄开,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布榜田。 她就那樣靜靜地躺著箭券,像睡著了一般疑枯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庆捺,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天滔以,我揣著相機(jī)與錄音氓拼,去河邊找鬼。 笑死坏匪,一個(gè)胖子當(dāng)著我的面吹牛撬统,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凭迹,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼脾猛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猛拴,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤愉昆,失蹤者是張志新(化名)和其女友劉穎造锅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哥蔚,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糙箍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年深夯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咕晋。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掌呜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出势篡,到底是詐尸還是另有隱情模暗,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布碍侦,位于F島的核電站,受9級(jí)特大地震影響比规,放射性物質(zhì)發(fā)生泄漏拦英。R本人自食惡果不足惜测秸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一霎冯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慷荔,春花似錦缠俺、人聲如沸显晶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盒使。三九已至,卻和暖如春少办,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枉疼。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工骂维, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贺纲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓潦刃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親分扎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胧洒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容