每天資訊Excel案例之:一個二級級聯選單引發的“陰謀”

菜單

Excel案例之:一個二級級聯選單引發的“陰謀”

花幽草木深,學習要認真,我還是我,一個愛聊Excel的胖小夥,廖晨!今天要聊的事就一個,在我入職不久發生的小事,卻成了入職最大的坎,不過現在再看,它卻成為我的工作經驗中的最大財富。

這件小事發生在一個夏天的上午,天還不錯,就是一晚上母蚊子的騷擾,沒有抗住,搞得雖然到了公司,依然睡眼朦朧,不過沒有一會兒就被QQ資訊鈴聲叫醒,開啟一看,是頂頭上司老王發來的一個檔案和一條訊息;

內容大致的意思就是

把表中的資訊製作成下拉選單,選擇錄入部門後,選擇錄入部門對應的員工,下班前完成!

我心裡說:什麼就下班前,檔案是什麼我都還沒有看呢。檔案內容如圖:

Excel案例之:一個二級級聯選單引發的“陰謀”

部門員工表(圖1)

不過看完之後,這也太容易了,就回:下班前肯定發給你!我做夢也不會想到,就是這簡單的一句話,卻成為我在別人手裡的把柄。

不過說到完成這個功能,主要有2點:

1.資料增減,下拉選項會自動增減相應資料

2.當父級內容發生變化,子選項也發生變化

我首先想到的是Excel新功能,智慧表格,能解決第1點,至於第2點就需要用資料驗證+自定義名稱的方法解決;有了思路,剩下的就看操作了。

1.

在J2:K2,分別錄入“部門”,”員工”;

2.

選擇B2:F2,點選公式下的定義名稱,在彈出的自定義視窗,名稱輸入:部門,引用位置(R):=$B$2:$F$2,點確定

Excel案例之:一個二級級聯選單引發的“陰謀”

自定義名稱操作步驟示意圖(圖2)

3

。選擇B2:F23,ctrl+t,彈出建立表,勾選包含標題,點選確定;ctrl+shift+f3或點選公式選單下的根據內容建立定義的名稱,彈窗去掉勾選最左列(L)的項,點選確定;

Excel案例之:一個二級級聯選單引發的“陰謀”

開啟智慧表格的操作示意圖(圖3)

4

。在名稱框錄入:J3:J100,回車,點選資料選單下的資料驗證,允許選擇序列,來源錄入=部門,確定;

5

。重複第4步,名稱框錄入:K3:k100,回車,在資料驗證視窗中,來源錄入為=INDIRECT(OFFSET($J$1,ROW()-1,0)),確定。

Excel案例之:一個二級級聯選單引發的“陰謀”

資料驗證操作步驟示意圖(圖4)

調整文字格式和樣式,就發給你老王,不一會老王過說:

你這做的不行啊,沒有資料的表格不要樣式,還有我在選擇員工的時候,不要有空白選項。

我說:

那是因為智慧表格......

老王打斷我說:

我不需要解釋,我需要的是結果,ok?

說完就走了,我默默想:

我有什麼地方得罪他了嗎?還是先改表吧!

1

。取消

套用表格格式

,選擇B2:F23中的任一單元格,Excel選單會增加一個

[設計]選單

,點選

設計

,然後在

表格樣式

中選擇

2

。點選

[公式]

選單下的

名稱管理

或CTRL+F3,選擇對應的名稱,手動修改引用位置為當前有資料的實際引用範圍;

經過上面的操作,出現新的問題,資料增加,需要手動增加樣式,新的資料也無法自動增加的下拉列表,既然一個智慧表格無法解決的問題,我們將每一列拆分成單獨的智慧表格,是不是就能解決問題。

於是之前自定義的名稱只保留

部門

,其餘全部刪除,然後進行如下操作:

1.

選擇B2:B12,然後ctrl+t,彈出建立表視窗,勾選標題,選擇確定,

2.

然後分別C2:C8,D2:D10,E2:E21,F2:23,重複1的操作;完成所有設定;

3.

ctrl+F3或點選

公式

->

名稱管理器,

依次將名稱“表1”到“表5改為標題的內容,依次:銷售部、營銷部、設計部、採購部、後勤部;

Excel案例之:一個二級級聯選單引發的“陰謀”

獨立設定智慧表格及修改名稱(圖5)

修改完成,覺的這次應該滿意老王吧,發過去!

這時一看錶,已經下午2點多了,還好已經弄完了,要不,得晚上加班啊。正想下班去哪玩的時候,這做的還是不行啊,我一回頭,還是老王的倒黴臉。

老王:

我要的下拉選單不是在一張表上的,是在另一個表裡,還有就是我刪除表格內容,樣式還保留,而且在下拉列表然後有留白的情況,你再弄弄吧,下班前給我!

我心說:

給你妹兒啊,不在一張表上,怎麼不早說!我轉身坐下,說了一句:好。心裡有氣,但沒有什麼好說的,繼續弄吧!

刪除資料會留白這是智慧表格特性,無法更改,看來智慧上函式解決了,不過思路也比較簡單,就是根據每列的內容,動態生成名稱的實際引用範圍,及每列不為空的單元格數量減1,可以用COUNTA函式來做,然後藉助OFFSET函式生成範圍;

在說用法之前,先簡單介紹一下COUNTA和OFFSET函式用法:

COUNTA(引用範圍):統計出引用範圍內,不為空的單元格數量;常用的引用範圍格式:B1:D5,寫法=COUNTA(B1:D5)

OFFSET(開始位置,上下移的行數,左右移的列數,[行高],[列寬]),比如=OFFSET(A2,1,0,3,2) =A3:B4,

公式解讀

:A2為開始位置,向下移動1個單元格及A3,左右移動為0,行高為3表示引用範圍每一列的行數,列寬為2,引用範圍共為2列;

有思路,就接著弄吧:

1.

刪除原表Sheet1中的J列,F列的資料;

2.

選擇B2:B2,然後單擊滑鼠右鍵,在右鍵選單中選擇【表格】→【轉化為區域】,接下來會彈出一個提示框,點選【是】

Excel案例之:一個二級級聯選單引發的“陰謀”

取消智慧表格的操作步驟示意圖(圖6)

3

。將依次C2:C8,D2:D10,E2:E21,F2:23,重複2的操作,即可刪除自定義名稱;

4

.

重新自定義名稱:CTRL+F3調出名稱管理器,點選【新建(N)】按鈕,彈出新建名稱視窗,名稱輸入:銷售部,只需修改引用位置(R)公式為=OFFSET(Sheet1$B$2,1,0,COUNTA(Sheet1$B:$B)-1,1),點選確定

5.

重複第4步操作,定義名稱為:營銷部,設計部,採購部,後勤部,將引用位置公式中的所有B, 依次改為:C,D,E,F

配圖7

6.

shift + f11,新建工作表Sheet2,A1,B1,錄入部門和員工;

7.

在名稱框錄入:B2:B100,點選資料選單下的資料驗證,允許選擇序列,來源錄入=部門,確定;

當給C2:C100,加資料驗證時,卻無法彈出內容,這時一看錶,已經快6點,都下班半個小時啦!

這時

老王

又過來

弄完了,答應別人的事,一定要完成,這是做人的基本信用!

我心說

:還不是一直在改需求,還有臉說。他看我沒有理他,接著說:弄好了,發給我,我就先回去了,等我讓你下班,才回去啊!

嗯了一聲,就趕緊在網上查資料,終於找到解決方法,需要用宏函式EVALUATE來代替INDIRECT函式,而且宏函式不能直接在單元格中使用,不過可以在自定義中執行,然後就定義名稱為menu,具體操作步驟如下:

8.

ctrl+f3,點選新建(N)按鈕,彈出新建名稱視窗,錄入名稱:menu,引用位置(R),公式為:=EVALUATE(OFFSET(Sheet2!$A$1,ROW()-1,0));(操作可參考圖6)

9.

在名稱框輸入B2:B100,回車,點選【資料】->[資料驗證],彈出視窗中,允許(A),選序列,來源(S),錄入=menu,確定

注:

使用了宏函式,檔案必須儲存成XLSM格式,否則設定的名稱menu不會被儲存;

最後整理一下樣式,就發給了老王,在等回信的時間裡,仔細看一下,為什麼INDIRECT函式無法調出資料?

INDIRECT函式的功能是讀取引數指定單元格地址的值,名稱若是個實際的引用範圍或是實際的值,這都沒有問題,當名稱是表示式,就會返回錯誤編碼,而資料驗證時,會自動過濾掉錯誤編碼,就顯示為空,是不是不好理解,舉個簡單的例子,比如公式=INDIRECT(SUM(3,5)),結果為#REF!。

一看錶過去快半個小時,怎麼還沒有信呢?終於看見

老王

的頭像閃爍,點開一看

嗯,還行吧,你先回去吧,有什麼問題我明天再給你說吧!

什麼!還不滿意嗎?去你的,反正明天再說,先回家了。

第二天上班,

老王

找到我

說:

樣式上有點不喜歡,需要調整字型大小和顏色。看著用的時間步長的份上,就又給他調整幾次,直到後來,他沒有再找過我。

後來才知道,原來當時他家親戚要來,想讓我提辭職走人,好把位置留給他親戚,結果,我沒有按他的套路走,現在想多虧當時的忍耐,不過在這件事裡,我總結了3點:

1。在開始工作前,一定要確認要你做什麼,別怕麻煩;

2。在跟領導彙報進度時,別說滿,給自己留有餘地;。

3。只要你技術好,即使沒有關係,也還是混的住,別人想趕走還是趕走不你的!

不是有句話說的好:爺就靜靜的看著你想幹掉我卻幹不掉我的樣子!文章的最後,花葉草木深,鐵杵磨成針,我就是我,一個愛聊Excel的胖小夥,廖晨,喜歡我就關注吧!你的點贊和留言,都是對我鼓勵!也歡迎你吧生活中遇到的Excel相關的問題,私信給我,看到後必第一時間回覆!