首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Excel中,我希望遍历两个下拉列表,以使用VBA运行所有可能的组合

在Excel中,我希望遍历两个下拉列表,以使用VBA运行所有可能的组合
EN

Stack Overflow用户
提问于 2019-09-15 18:48:45
回答 1查看 54关注 0票数 0

我的目标是拥有一个Excel宏。在Excel中,我希望遍历两个下拉列表,以使用VBA运行所有可能的组合。

问题是必须手动遍历下拉列表。

第二个下拉列表依赖于第一个下拉列表。第一个下拉列表是3种类型的车辆:福特、丰田和马自达。第二个下拉列表是维修站点:福特经销商、丰田经销商、马自达经销商、通用维修车间A和通用维修车间B。第二个列表依赖关系是,福特经销商只能维修福特;丰田经销商只能维修丰田。马自达经销商只能修理马自达。一般修理厂A和一般修理厂B可以修理任何类型的车辆。实际问题的数据集要大得多,我必须使用Excel来解决这个问题。

我试着使用两个四个循环。但是有很多我不想发生的组合。

代码语言:javascript
复制
sub test()
Dim i as Integer
Dim j as Integer
For i =1 to 3
Next i
For j=1 to 5
Next j
End Sub()
EN

回答 1

Stack Overflow用户

发布于 2019-09-15 23:02:58

假设下拉框是表单控件,下面的代码将执行您想要的操作。

代码语言:javascript
复制
Sub AutoIterate()
Dim i As Long, j As Long
Dim cmb1 As ControlFormat, cmb2 As ControlFormat
    Set cmb1 = ActiveSheet.Shapes("Drop Down 1").ControlFormat 'change the worksheet and the combobox name to those that fit for you.
    Set cmb2 = ActiveSheet.Shapes("Drop Down 2").ControlFormat
    For i = 1 To cmb1.ListCount
        For j = 1 To cmb2.ListCount
            If (cmb2.List(j) Like "*" & cmb1.List(i) & "*") Or (cmb2.List(j) Like "*General*") Then
                Debug.Print cmb1.List(i) & " - " & cmb2.List(j)
            End If
        Next
    Next
    Set cmb1 = Nothing
    Set cmb2 = Nothing
End Sub

请记住,如果:

  • cmb2的每个官方商店都包括与cmb1完全相同的公司(区分大小写),
  • cmb2的每个普通商店都有" general“(区分大小写)一词,

然后,这也将为更大的数据集做这项工作。

否则,只需相应地调整If语句即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57943390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档