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 Sub

2:

在工程資源-》"模塊"對象 中 「插入模塊」-》查看代碼

保存如下代碼:

Sub ShowFM()

UserForm1.Show

End Sub

3:

在工程資源-&>"窗體"-&>插入"用戶窗體"

然後在"工具箱"里拖放"列表框"和"命令按鈕"到窗體上

接著點擊"查看代碼"

將以下代碼保存:

Private Sub CommandButton1_Click()

Dim Arr(), k, i

ReDim 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 i

End With

"MsgBox "您選擇了:" Join(Arr, ",")

UserForm1.Hide

"Application.ActiveSheet.Range("A1").Value = Join(Arr, ",")

Application.ActiveCell.Value = Join(Arr, ",") //將值放入到當前單元格

End Sub

Private Sub ListBox1_Click()

End Sub

Private Sub TextBox1_Change()

End Sub

Private 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 With

End 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. 單擊要在其中添加複選框或選項按鈕控制項的單元格。

    提示: 一次只能添加一個複選框或選項按鈕。 若要加快速度,請在添加第一個控制項後右鍵單擊它,然後選擇「複製」&>「粘貼」。

  3. 若要編輯或刪除控制項的默認文本,請單擊該控制項,然後根據需要更新文本。

提示: 如果您看不到全部文本,請單擊並拖動控制項手柄之一,直到您可以讀取所有文本。無法編輯控制項的大小和控制項與文本之間的距離。

設置控制項的格式

插入複選框或選項按鈕後,你可能希望確保它按照你希望的方式工作。例如,你可能希望自定義外觀或屬性。

注意: 不能調整大小的控制項和其距離及其關聯文本內的選項按鈕。

  1. 若要設置控制項的格式,請右鍵單擊該控制項,然後單擊「設置控制項格式」。

  2. 在設置控制項格式對話框中,在控制項選項卡上,您可以修改的任何可用選項︰

    • 選中︰ 顯示已選中選項按鈕。

    • 未選中︰ 顯示清除選項按鈕。

    • 在單元格鏈接框中,輸入包含選項按鈕的當前狀態的單元格引用。

      鏈接的單元格組中的選項返回所選的選項按鈕數。使用相同鏈接的單元格組中的所有選項。第一個選項按鈕返回 1,第二個選項按鈕返回 2,以此類推。如果您在同一工作表上有兩個或多個選項組,對於每個選項組使用不同的鏈接單元格。

      在公式中使用返回的數字響應所選的選項。

      例如,人員表單的作業類型分組框,包含兩個選項按鈕標記為全職和兼職鏈接的單元格 C1。在用戶選擇兩個選項之一後,下面的公式的單元格 D1 的計算結果為"全職"如果選中首選項按鈕或"兼職"如果選擇第二個選項按鈕。

      =IF(C1=1,"Full-time","Part-time")

      如果您有三個或多個選項來計算在同一組中的選項,您可以使用選擇或LOOKUP函數類似的方式。

  3. 單擊「確定」。

刪除控制項

  • 右鍵單擊該控制項,然後按 DELETE。


我現在也需要這樣的功能


Excel設置可多選下拉菜單


Alt+enter


剛好搜到了這個題目,以下是微軟的官方教程:

創建下拉列表 - Office 支持

以下是視頻教程:

創建和管理下拉列表 - Excel

總的來說操作還是比較簡單的,沒有上面朋友寫的那麼複雜。


簡單的辦法是使用數據有效性(數據驗證),但是只有在單元格被選中時才會顯示右側的下拉按鈕


推薦閱讀:

同類軟體中,是不是安裝包越大,功能就越強大?
微軟是不是放棄了帝國時代?為什麼?
Surface Pro 4 省電方面有哪些奇技淫巧?
Windows 10 內存佔用率超過 95%,任務管理器無異常,如何解決?
「微軟合伙人」到底是個什麼概念?

TAG:微軟Microsoft | MicrosoftOffice | MicrosoftExcel |