但是如果需要同时录入多个选项的怎么办?例如在一个单元格内需要录入多个采购物品,这样就无法用数据有效性。
但是excel中却有一个好用的功能完美解决了这个问题,看下图演示。
(动图演示)
其实这么好用的功能是用VBA制作的,其实很简单,只要会复制粘贴你也能添加该功能。
在需要录入数据的表格旁边新建一张表格取名【数据源】,然后将菜单内容依次罗列在该表格的A列,如下图所示。
▍录入提示:菜单选项所在列号一定要等于录入区域列号减1。本案例中录入区域是在第2列,如果录入区域在第3列,那么菜单选项要写在数据源表的第2列,依次类推。
(动图演示)
▍注:如果你使用的是Office Excel但是却找不到开发工具选项的话请参照下图设置,设置完成即可有开发工具选项。
到这里我们的准备工作就全部完成了,下方是代码,大家将下方代码直接全部复制粘贴到VBA编辑器中。
Private Sub ListBox1_Change()
contentSeleted = ""
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
contentSeleted = contentSeleted & "," & ListBox1.List(i)
End If
Next
ActiveCell = Mid(contentSeleted, 2)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Target.Column >= 2 And Sheets("数据源").Cells(2, Target.Column - 1) <> "" And Target.Row > 1 Then
c = Target.Column - 1
a = Mid(Sheets("数据源").Cells(2, c).Address, 2, 1)
ListBox1.ListFillRange = "数据源!" & a & "2:" & a & Sheets("数据源").Cells(1, c).End(xlDown).Row
With ListBox1
n = .ListCount
r = Target.Row
c = Target.Column + 1
.Top = Cells(r, c).Top + Cells(r, c).Height
.Left = Cells(r, c).Left
.Width = Target.Width
.Height = Cells(r, c).Height * n
.Visible = True
End With
Set d = CreateObject("scripting.dictionary")
Arr = Split(Target.Value, ",")
For i = 0 To UBound(Arr)
d(Arr(i)) = ""
Next
For i = 0 To ListBox1.ListCount - 1
If d.exists(ListBox1.List(i)) Then
ListBox1.Selected(i) = True
Else
ListBox1.Selected(i) = False
End If
Next
Else
ListBox1.Visible = False
End If
End Sub
▲左右滑动查看完整代码
先复制代码,然后在录入表标签上右键→查看代码,将代码粘贴到右边空白处即可。
(动图演示)
粘贴好代码后就可以任意录入了。
来源:https://mp.weixin.qq.com/s/_l3Alo4mDVw8N0KqR3nQvw