js樹(shù)形下拉菜單代碼(js 樹(shù)形菜單)
編按:
一說(shuō)起下拉菜單,我相信大多數有點(diǎn)Excel基礎的都會(huì )做。但今天我們來(lái)點(diǎn)不一樣的下拉菜單,從青銅級別到王者級別,應有盡有,趕緊來(lái)看一看吧!
下面,我們將按照從簡(jiǎn)單到高級來(lái)給大家介紹如下幾種下拉菜單。
1、最簡(jiǎn)單的下拉菜單
2、名稱(chēng)制作下拉菜單
3、動(dòng)態(tài)下拉菜單(沒(méi)有空白選項的)
4、多內容下拉菜單,填充時(shí)拆分內容
5、智能錄入下拉菜單,填充時(shí)拆分內容
注意:今天主要說(shuō)的內容是“數據驗證(Validation)”的內容,不涉及控件使用,各個(gè)Excel版本都可以使用。
【正文】
1、青銅(最簡(jiǎn)單的下拉菜單)
制作方法:
在工具欄中,點(diǎn)擊“數據驗證”功能;
展開(kāi)全文
在彈出的窗口中,按下圖:
在【允許】中選擇“序列”,在【來(lái)源】中輸入“男,女”,按確定鍵完成操作。
注意:無(wú)論選填的內容是什么,都要用“英文的逗號間隔”,而且不需使用雙引號。
2、白銀
方法1:在數據驗證窗口中,如下設置
【來(lái)源】處可以直接選擇單元格區域,即可把這部分的內容作為下拉菜單的內容。
方法2:我們也可以使用名稱(chēng)管理器來(lái)操作:
選擇A2:A17單元格,然后在【名稱(chēng)框】中編輯一個(gè)名稱(chēng):例如我們輸入“科學(xué)家”,然后【按回車(chē)結束編輯】
然后在數據驗證窗口中如下圖設置;
3、黃金——動(dòng)態(tài)下拉菜單
如果我們的選擇項數量不確定,隨著(zhù)添加或者刪除,下拉選項也要隨之增加減少,如下圖所示:
按CTRL+F3組合鍵,打開(kāi)【名稱(chēng)管理器】窗口,新建一個(gè)名稱(chēng)“選項”,按下圖設置名稱(chēng)內容:
引用位置的函數:=OFFSET(黃金!$A$2,,,COUNTA(黃金!$A$2:$A$997),)
使用COUNTA函數確定區域中的內容數量,然后在使用數據驗證創(chuàng )建下拉菜單即可。
如果A列數據是使用函數后得到的,例如把某列數據去重,如下圖:
A2單元格的函數為:
{=IFERROR(INDEX($A$2:$A$38,SMALL(IF(MATCH($A$2:$A$38,$A$2:$A$38,0)=ROW($1:$37),ROW($1:$37),9^9),ROW(B1))),"")}
這個(gè)函數是萬(wàn)金油,之前的教程中有解釋的,就不在這里贅述了。然后下拉A2單元格填充至A18,就得到了去重后的內容,然后再使用名稱(chēng)即可引用到數據驗證中。
但是要注意:表中從B8:B18都是IFERROR函數容錯后的空格,那么剛才用COUNTA函數引出選項個(gè)數的方式就不正確了,我們換一個(gè)寫(xiě)法即可,如下:
函數如下:
=OFFSET(黃金!$B$2,,,COUNTA(黃金!$B$2:$B$18)-COUNTBLANK(黃金!$B$2:$B$18),)
用COUNTA-COUNTBLANK的方式確定應該取多少個(gè)選項內容。
截止到此,【下拉選填菜單】的操作方法,配合【函數】和【自定義名稱(chēng)】還可以適應工作,但是已經(jīng)顯得力不從心,因為隨著(zhù)數據的變化,對于函數和自定義名稱(chēng)的調整是在所難免的。那么【更高級別的下拉選填菜單】我們繼續看。
4、鉆石級別——多內容下拉菜單,填充時(shí)拆分內容
下拉菜單選擇項包含多個(gè)不同屬性的內容,選填后自動(dòng)填入多個(gè)單元格。這個(gè)方式是使用VBA操作的,代碼如下:
Private Sub Worksheet_Change(ByVal Target As Range) '''單元格值改變,觸發(fā)事件
If Target.Column = 4 And Target.Count = 1 Then '''判斷是否在D列,選擇一個(gè)單元格
With Target '''使用這個(gè)單元格
s = .Text '''單元格的值賦值給一個(gè)變量s
.Resize(1, 2) = Split(s, ":") '''單元格擴展1行2列,然后把用Split函數按冒號拆分的數組賦值到單元格區域
End With '''with結束語(yǔ)句
End If '''結束判斷
End Sub '''工程結束
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '''選擇單元格改變,觸發(fā)事件
If Target.Column = 4 And Target.Count = 1 Then '''判斷是否在D列,選擇一個(gè)單元格
With Sheets("鉆石")
s = Join(Application.Transpose(.Range("A2:A" .[A65000].End(3).Row)), ",") '''將A列從A2開(kāi)始,有值的單元格Join成一個(gè)字符串,用英文逗號間隔
End With
With Selection.Validation '對所選擇的單元格,創(chuàng )建數據有效性
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=s
.IgnoreBlank = True '設置單元格 允許空值
.InCellDropdown = True '提供下拉列標
End With
End If '結束判斷
End Sub '''工程結束
按下圖粘貼或者編寫(xiě)代碼亦可。
5、王者——智能錄入下拉菜單,填充時(shí)拆分內容
同學(xué)們做過(guò)多級聯(lián)動(dòng)的下拉菜單嗎?你是如何做的呢,按首行批量創(chuàng )建自定義名稱(chēng),然后再I(mǎi)NDIRECT?
這種方法對于簡(jiǎn)單的數據源還是可以采用的,但是對于比較多的內容就不是很方便,例如我們今天的這份數據源——“全國【省、市、縣 三層】的智能下拉填充功能”
如果同學(xué)們用傳統方式做的話(huà),自定義名稱(chēng)要做多少呢?
下面看看作者E圖表述制作后的效果吧:
這也是用VBA做的,VBA可以做很多日常不敢想想的內容,也只有VBA才能做出高級的功能。不說(shuō)廢話(huà),代碼如下:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 And Target.Row = 2 Then '''如果被改變值的單元格7行2列【G2】單元格時(shí)
With Sheets("王者") '''使用《王者》工作表
arr = .Range("A2:C" .[A100000].End(3).Row) '''將從A2單元格開(kāi)始到A列已使用的末行結束的單元格區域賦值數值arr
s = Target.Text '''將被操作單元格的值賦值給變量s
If s "" Then '''如果s不為空值
For i = 1 To UBound(arr) '''循環(huán)數組arr
st = arr(i, 1) "|" arr(i, 2) "|" arr(i, 3) '''將省市縣內容合并,并且用|間隔
If st Like "*" s "*" Then '''如果st字符串包含s變量的內容
svd = svd st "," '''將st賦值給svd變量,并用英文逗號間隔,作為下拉菜單的內容
End If
Next i
End If
With .Range("G3").Validation '對G3單元格創(chuàng )建數據有效性
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=svd
.IgnoreBlank = True '設置單元格 允許空值
.InCellDropdown = True '提供下拉列標
End With
.[G3] = "" '''G3單元格初始值為空
End With
End If
If Target.Column = 7 And Target.Row = 3 And Target.Text "" Then '''如果G3單元格的值被改變,且值不為空時(shí)
With Sheets("王者")
a = .[H100000].End(3).Row + 1 '''確定H列中為空的第一行
.Cells(a, 8) = Split(Target.Text, "|")(0) '''Split方法拆分下拉菜單的內容,將第1個(gè)值放入第8列的末行空白行
.Cells(a, 9) = Split(Target.Text, "|")(1) '''同上,放入第2個(gè)值
.Cells(a, 10) = Split(Target.Text, "|")(2) '''同上,放入第3個(gè)值
'''注意:Split方法拆分后,是一個(gè)一維數組。vba中的內存數組序號默認是從0開(kāi)始計數的
.[G3] = "" '''G3單元格再歸零
End With
End If
End Sub
不需自定義名稱(chēng),不需多級聯(lián)動(dòng)的大量數據驗證,這將極大的節省EXCEL的內存,大大提高了運行的效率,同時(shí)一級選擇、多級錄入的方式也節省了操作的環(huán)節。
寫(xiě)在最后:王者只是人間的強者,而這世間還有更高的存在。人外人、天外天,EXCEL之外有EXCEL,除開(kāi)上面這種“下拉菜單”,我們還有更高級別的,大家想不想看呢?
做Excel高手,快速提升工作效率,部落窩教育《一周Excel直通車(chē)》視頻和《Excel極速貫通班》直播課全心為你!
學(xué)習交流請加微信:hclhclsc進(jìn)微信學(xué)習群。
相關(guān)推薦:
如何制作智能的下拉菜單?輸入數據模糊匹配對應的下拉選項
最簡(jiǎn)單的多級下拉菜單制作方法,不需要定義名稱(chēng)
別怕,VBA入門(mén)級教程來(lái)了,條件語(yǔ)句很簡(jiǎn)單!
八大查找函數公式,輕松搞定數據中的多條件查找
版權申明:
本文作者E圖表述;同時(shí)部落窩教育享有專(zhuān)有使用權。若需轉載請聯(lián)系部落窩教育。
掃描二維碼推送至手機訪(fǎng)問(wèn)。
版權聲明:本文由飛速云SEO網(wǎng)絡(luò )優(yōu)化推廣發(fā)布,如需轉載請注明出處。