Excel VBA利用下拉框实现数据统计案例实现最近用Excel做一个销售预测表单,为了实现操作的便捷性使用VBA编写了一个简单的下拉框功能,中间查了很多资料,但很难有完全适合自己功能需求的,最后消化了几份文档,整合里面使用的方法,终于得到自己想要的结果,现在分享给大家。
我的表单有以下5张Sheets:
其中可供机型明细表存有下月销售产品的详细信息,表头如下:
现在想在机型销量预测表单上型号列使用下拉框实现机型选择功能,效果如下:
功能需求:单击型号列的单元格出现下拉框,选择需要预测的机型,机型填入相应的单元格,然后弹出文本框提供预测该机型必要的参考信息。
流程及代码如下:
1、插入模块
模块1的代码用于在机型销量预测表单建立下拉框:
Public list
Sub ListData()
If https://www.wendangku.net/doc/708197973.html,<> "机型销量预测" Then Exit Sub
Dim list As Object
Set list = ActiveSheet.OLEObjects("ComboBox1")
If Err <> 0 Then
ActiveSheet.OLEObjects.Add(classtype:="https://www.wendangku.net/doc/708197973.html,boBox.1",
Left:=ActiveCell.Offset(0, 1).Left, Top:=ActiveCell.Top, Width:=1000).Select End If
End Sub
然后在机型销量预测表单下编写如下代码,该代码定义了一个事件,当机型销量预测表单发生变化即选择第3列(型号列)弹出下拉框,同时定义了下拉框的内容:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
IfIsEmpty(list) ThenListData
Dim ws As Worksheet, rownum As Integer
Set ws = Worksheets("可供机型明细表")
rownum = ws.Cells(Rows.Count, 1).End(xlUp).Row
https://www.wendangku.net/doc/708197973.html,boBox1.Left = Target(1).Offset(0, 1).Left
https://www.wendangku.net/doc/708197973.html,boBox1.Top = Target(1).Top
If Target.Column = 3 Then
ComboBox1.Style = fmStyleDropDownCombo
ComboBox1.Visible = True
ComboBox1.list = ws.Range("B2:B" &rownum).Value
Else
ComboBox1.Visible = False
End If
End Sub
最后将选择的下拉框内容填入单元格,并搜索该型号近三个月的销量信息显示出来:
Private Sub ComboBox1_Change()
Dim ws1 As Worksheet, ws2 As Worksheet, str1 As String, str2 As String
Dim Sales(1 To 3)
Set ws1 = Worksheets("营销公司月订单数据")
Set ws2 = Worksheets("机型销量预测")
ActiveCell.Value = ComboBox1.Value
str1 = ActiveCell.Value
str2 = Sheets("营销公司年、月总量预测").Cells(1, 3).Value
ComboBox1.Visible = False
Sales(1) = Application.WorksheetFunction.SumIfs(ws1.Range("L:L"), ws1.Range("D:D"), str2, ws1.Range("B:B"), Month(Now()) - 3, ws1.Range("I:I"), str1)
Sales(2) = Application.WorksheetFunction.SumIfs(ws1.Range("L:L"), ws1.Range("D:D"), str2, ws1.Range("B:B"), Month(Now()) - 2, ws1.Range("I:I"), str1)
Sales(3) = Application.WorksheetFunction.SumIfs(ws1.Range("L:L"), ws1.Range("D:D"), str2, ws1.Range("B:B"), Month(Now()) - 1, ws1.Range("I:I"), str1)
For i = LBound(Sales) To UBound(Sales) '将数组转换成String格式str_A = str_A&Sales(i) & ","
Next
str_A = "={" & Left(str_A, Len(str_A) - 1) & "}"
MsgBox "最近三个月销量" &str_A
End Sub
完成上述工作就能实现一个简单的下拉框及数据统计功能,当然基于该代码框架还可以扩展出更复杂的下拉菜单功能。由于Word排版原因代码中的空格和换行可能会出问题,直接复制张贴要注意。
最后祝你成功!