在一個(gè)系統剛上線(xiàn)時(shí),需要把以前的數據導入系統,方便使用與管理,程序不是萬(wàn)能的,導入表格要符合系統要求的規則才能順利地導入。在整理龐大而又繁瑣的數據時(shí),為了減少系統報錯的概率,可以事先對excel的表格格式做處理。文章里要說(shuō)的是一個(gè)不常用到的一個(gè)小技巧-----下拉框多選。我問(wèn)了百度,找到了一些方法,把最簡(jiǎn)單最快捷的方法給出來(lái),像我一樣不懂宏不懂代碼的小伙伴可以看下。
首先在某列利用數據有效性-建立下拉菜單表。數據-->數據有效性-->數據有效性,“允許”選擇“序列”,然后把需要選擇的內容輸入到來(lái)源里,中間用英文逗號“,”隔開(kāi)。下拉框單選便成了。


然后在下拉表所打開(kāi)的sheet中(如sheet1),鼠標右擊下面的工作表,選擇“查看代碼”,就可打開(kāi)VBA編輯界面。復制下方的代碼,并將其中一行的 If Target.Column = 7 Then 中的7修改為下拉數據表所在的列數,搞定。第幾列便是數字幾,A是1,B是2,以此類(lèi)推。

表格中兩個(gè)選項間用中文逗號、英文逗號、頓號、橫杠等等符號隔開(kāi),把下面兩句代碼中雙引號間的符號改為想要的符號即可,注意二者要保持一致。

代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
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
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
代碼來(lái)源:知乎
鏈接:https://www.zhihu.com/question/20484204/answer/142569580
說(shuō)明:代碼中 ' 后面的內容為說(shuō)明文字,可以刪除,不影響代碼的執行,放在excel里會(huì )變?yōu)榫G色,這些只是說(shuō)明。當然也可以加 ' ,然后加入自己要說(shuō)明的東西。

額外說(shuō)明:
excel保存時(shí)會(huì )提示宏無(wú)法保存,這個(gè)問(wèn)題目前還沒(méi)研究出來(lái),慶幸本次的設計只是給自己公司內部人用的,所以只能復制代碼給他們,讓他們自己復制一遍了。

如果哪位大神有解決辦法,望賜教~~
補充:有朋友問(wèn)到,上面的代碼只能實(shí)現一列的多選,那如果我有兩列或更多列要多選,該怎么實(shí)現呢?
這個(gè)很容易實(shí)現,加or,
If Target.Column = 7 or arget.Column = 8 Then
即可實(shí)現很7列與第8列同時(shí)多選。
聯(lián)系客服