Excel 如何做下拉框多選?
比如我做一個表格,其中一項是「使用的品牌」,這一項中,選項有:sony、Lenovo、ASUS、Tosiba、Kodak、Benq、Hp、Thinspak
用戶在選擇的時候,可以選擇:sony、ASUS、Hp。那麼在使用的品牌,這個單元格中,應該顯示:sony+ASUS+Hp怎麼用excel實現呢?
幫忙搜了一下 找到了唯一感覺靠譜的一篇文章。但我看不懂,不知道是否幫到你。如下:
Excel下拉列表多選框實現
Excel提供了下拉列表的實現,但並不支持多選,後來慢慢找資料終於利用VBA編程實現了多選的問題。
首先點擊視圖-&>宏,工程資源所示:有Microsoft Excel對象:對應的是Sheet1或Sheet2對像等;窗體:對應的是彈出的對話框;模塊:對應的是調用某些功能的入口。以Sheet1頁單擊D列為例彈出框供多選1:先建立宏,然後編輯,在"Microsoft Excel對象"中單擊"Sheet2"的右鍵-》查看代碼將此代碼保存:Private Sub Worksheet_SelectionChange(ByVal Target As Range) //說明:監聽sheet1發生的用戶操作事件
If ActiveCell.Column = 8 And ActiveCell.Row &> 1 Then //說明:當前激活列為J列,第二行以下 Call ShowFM2 //調用顯示窗體宏名 End If End Sub2:在工程資源-》"模塊"對象 中 「插入模塊」-》查看代碼保存如下代碼:Sub ShowFM()UserForm1.Show
End Sub3:在工程資源-&>"窗體"-&>插入"用戶窗體"然後在"工具箱"里拖放"列表框"和"命令按鈕"到窗體上接著點擊"查看代碼"將以下代碼保存:Private Sub CommandButton1_Click()
Dim Arr(), k, iReDim Arr(1 To 1)With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then k = k + 1 ReDim Preserve Arr(1 To k) "Arr(k) = .List(i, 1) Arr(k) = Sheet2.Range("A" (i + 1)).Value //獲取Sheet2列表中A列i+1行的值End If
Next iEnd With"MsgBox "您選擇了:" Join(Arr, ",")UserForm1.Hide"Application.ActiveSheet.Range("A1").Value = Join(Arr, ",")Application.ActiveCell.Value = Join(Arr, ",") //將值放入到當前單元格End SubPrivate Sub ListBox1_Click()End SubPrivate Sub TextBox1_Change()End SubPrivate Sub UserForm_Initialize()With UserForm1.ListBox1 .RowSource = "Sheet2!A1:A49" "設定源數據區域 ,下拉列表框的數據來源 .ColumnCount = 1 "設定列數
.ColumnHeads = False "設定列標題。標題為數據區域的上一行 .BoundColumn = 2 .MultiSelect = fmMultiSelectMulti "按空格鍵或單擊滑鼠以選定列表中一個條目或取消選定。" .MultiSelect = fmMultiSelectExtended "按 Shift 並單擊滑鼠,或按 Shift 的同時按一個方向鍵,將所選條目由前一項擴展到當前項。按 Ctrl 的同時單擊滑鼠可選定或取消選定。" .MultiSelect = fmMultiSelectSingle "只可選擇一個條目(默認)。End WithEnd Sub-----保存試試看,不行的話看附件來源http://ganliang13.iteye.com/blog/1312957
找到一個超簡單方法,只需兩步,10秒搞定。
1. 先在某列利用數據有效性-建立下拉菜單表。2. 在下拉表所打開的sheet中(如sheet1),滑鼠右擊下面的工作表。選擇「查看代碼」,就可打開VBA編輯界面。複製答案最後面的代碼,並將其中一行的 If Target.Column = 3 Then 中的3修改為下來數據表所在的列數,搞定。ta-da, we"re done!附代碼(代碼來源:Excel Data Validation - Select Multiple Items)
Private Sub Worksheet_Change(ByVal Target As Range)
" Developed by Contextures Inc.
" www.contextures.com
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count &> 1 Then GoTo exitHandler
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If rngDV Is Nothing Then GoTo exitHandler
If Intersect(Target, rngDV) Is Nothing Then
"do nothing
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If Target.Column = 3 Then
If oldVal = "" Then
"do nothing
Else
If newVal = "" Then
"do nothing
Else
Target.Value = oldVal _
", " newVal
" NOTE: you can use a line break,
" instead of a comma
" Target.Value = oldVal _
" Chr(10) newVal
End If
End If
End If
End If
exitHandler:
Application.EnableEvents = True
End Sub
這東西的方法很多。。啊?
data validation, combo box(developer tools), 騷氣的列了什麼我不會的VBA之類。
我本人一般是不允許別人亂按的就combo box,然後序列弄到另一個tab裡面隱藏起來了。不過這麼弄要弄個vlookup,麻煩一點。
然後你是不是想三個下拉框,允許選擇那麼多品牌中的一個,然後還有一個顯示這三個連起來的?如果是的話,而且用的combo box,用vlookup+concatenate。
看報告看累了,隨手做著玩。
combo box大小不要在意,我做這個表並沒有錢拿。。。
Select Multiple Items from Excel Data Validation List這篇文章中,是我見過的最簡單最易用的實現方式。
我根據大家的回答,修改了一下代碼,做到了重複選擇就是取消選擇的效果。可以試試。
Private Sub Worksheet_Change(ByVal Target As Range)
" Developed by Contextures Inc.
" www.contextures.com
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count &> 1 Then GoTo exitHandler
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If rngDV Is Nothing Then GoTo exitHandler
If Intersect(Target, rngDV) Is Nothing Then
"do nothing
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If Target.Column = 7 Then "這裡規定好哪一列的數據有效性是多選的,A列是第1列,依次類推,如3就是C列,7就是G列
If oldVal = "" Then
"do nothing
Else
If newVal = "" Then
"do nothing
Else
If InStr(1, oldVal, newVal) &<&> 0 Then "重複選擇視同刪除
If InStr(1, oldVal, newVal) + Len(newVal) - 1 = Len(oldVal) Then "最後一個選項重複
Target.Value = Left(oldVal, Len(oldVal) - Len(newVal) - 1)
Else
Target.Value = Replace(oldVal, newVal ",", "") "不是最後一個選項重複的時候處理逗號
End If
Else "不是重複選項就視同增加選項
Target.Value = oldVal "," newVal
" NOTE: you can use a line break,
" instead of a comma
" Target.Value = oldVal _
" Chr(10) newVal
End If
End If
End If
End If
End If
exitHandler:
Application.EnableEvents = True
End Sub
添加複選框或選項按鈕 (表單控制項)
本文轉自:Microsoft Office 幫助和培訓 - Office 支持添加複選框或選項按鈕-(表單控制項)-9f201e46-8f6b-4a9d-a320-f44b28088cb0?ui=zh-CNrs=zh-CNad=CN在Excel 2010和後續版本中,單擊 文件&>選項&>自定義功能區中,選擇開發工具複選框,然後單擊確定。
在Excel 2007,單擊 Microsoft Office 按鈕 &> Excel 選項&>常用&>功能區中的顯示開發工具選項卡。
要添加複選框,請單擊開發工具選項卡,單擊插入,在表單控制項下單擊 。
若要添加選項按鈕,單擊開發工具選項卡,單擊插入,然後單擊在表單控制項下的 。
單擊要在其中添加複選框或選項按鈕控制項的單元格。
提示: 一次只能添加一個複選框或選項按鈕。 若要加快速度,請在添加第一個控制項後右鍵單擊它,然後選擇「複製」&>「粘貼」。
若要編輯或刪除控制項的默認文本,請單擊該控制項,然後根據需要更新文本。
提示: 如果您看不到全部文本,請單擊並拖動控制項手柄之一,直到您可以讀取所有文本。無法編輯控制項的大小和控制項與文本之間的距離。
設置控制項的格式
插入複選框或選項按鈕後,你可能希望確保它按照你希望的方式工作。例如,你可能希望自定義外觀或屬性。
注意: 不能調整大小的控制項和其距離及其關聯文本內的選項按鈕。
若要設置控制項的格式,請右鍵單擊該控制項,然後單擊「設置控制項格式」。
在設置控制項格式對話框中,在控制項選項卡上,您可以修改的任何可用選項︰
選中︰ 顯示已選中選項按鈕。
未選中︰ 顯示清除選項按鈕。
在單元格鏈接框中,輸入包含選項按鈕的當前狀態的單元格引用。
鏈接的單元格組中的選項返回所選的選項按鈕數。使用相同鏈接的單元格組中的所有選項。第一個選項按鈕返回 1,第二個選項按鈕返回 2,以此類推。如果您在同一工作表上有兩個或多個選項組,對於每個選項組使用不同的鏈接單元格。
在公式中使用返回的數字響應所選的選項。
例如,人員表單的作業類型分組框,包含兩個選項按鈕標記為全職和兼職鏈接的單元格 C1。在用戶選擇兩個選項之一後,下面的公式的單元格 D1 的計算結果為"全職"如果選中首選項按鈕或"兼職"如果選擇第二個選項按鈕。
=IF(C1=1,"Full-time","Part-time")
如果您有三個或多個選項來計算在同一組中的選項,您可以使用選擇或LOOKUP函數類似的方式。
單擊「確定」。
刪除控制項
右鍵單擊該控制項,然後按 DELETE。
我現在也需要這樣的功能
Excel設置可多選下拉菜單
Alt+enter
剛好搜到了這個題目,以下是微軟的官方教程:創建下拉列表 - Office 支持以下是視頻教程:創建和管理下拉列表 - Excel總的來說操作還是比較簡單的,沒有上面朋友寫的那麼複雜。
簡單的辦法是使用數據有效性(數據驗證),但是只有在單元格被選中時才會顯示右側的下拉按鈕
推薦閱讀:
※同類軟體中,是不是安裝包越大,功能就越強大?
※微軟是不是放棄了帝國時代?為什麼?
※Surface Pro 4 省電方面有哪些奇技淫巧?
※Windows 10 內存佔用率超過 95%,任務管理器無異常,如何解決?
※「微軟合伙人」到底是個什麼概念?
TAG:微軟Microsoft | MicrosoftOffice | MicrosoftExcel |