通过VBA下拉列表进行迭代

在这里输入图像说明

我有三个下拉validation列表,我试图编写一些代码,遍历所有可用的“pipe理方法”排列。

我可以找出遍历一个列表的第一步(例如通过Excel下拉列表/validation列表和其他列表迭代 ),但是我无法弄清楚如何通过其中的三个列表。

理想情况下,即使增加了更多的选项,我也希望能够以一种可行的方式编写。

为了达到这个目的,我想你需要一种方法来计算每个列表中有多less个选项,然后从0-n开始迭代。

任何帮助将非常感激。

Sub LoopThroughList() Dim Dropdown1, Dropdown2, Dropdown3 As String Dim Range1, Range2, Range3 As Range Dim option1, option2, option3 As Range ' *** SET DROPDOWN LOCATIONS HERE *** ' *********************************** Dropdown1 = "C6" Dropdown2 = "D6" Dropdown3 = "E6" ' *********************************** ' *********************************** Set Range1 = Evaluate(Range(Dropdown1).Validation.Formula1) Set Range2 = Evaluate(Range(Dropdown2).Validation.Formula1) Set Range3 = Evaluate(Range(Dropdown3).Validation.Formula1) For Each option1 In Range1 For Each option2 In Range2 For Each option3 In Range3 Worksheets("Sheet1").Range("C6:E6").Copy With Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1) .PasteSpecial Paste:=xlPasteColumnWidths .PasteSpecial Paste:=xlPasteValues End With Next option3 Next option2 Next option1 End Sub 

目前我得到这个:

在这里输入图像说明

这是迭代通过作物types下拉菜单,但为有害生物和pipe理方法返回相同。 我用来创build下拉列表的代码如下所示:

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("C6")) Is Nothing Then Range("D6:E6").ClearContents End If End Sub 

执行遍历每个可能的组合的循环的最简单方法是使用For Each循环。 你可以find更多的信息关于他们在这里 , 这里 , 这里和这里 ……. !!! 诸如此类….

这将通过3个下拉列表的每个组合循环。 您将需要更改我的代码中的下拉列表的位置。

 Sub LoopThroughList() Dim Dropdown1, Dropdown2, Dropdown3 As String Dim Range1, Range2, Range3 As Range Dim option1, option2, option3 As Range ' *** SET DROPDOWN LOCATIONS HERE *** ' *********************************** Dropdown1 = "D8" Dropdown2 = "E8" Dropdown3 = "F8" ' *********************************** ' *********************************** Set Range1 = Evaluate(Range(Dropdown1).Validation.Formula1) Set Range2 = Evaluate(Range(Dropdown2).Validation.Formula1) Set Range3 = Evaluate(Range(Dropdown3).Validation.Formula1) For Each option1 In Range1 For Each option2 In Range2 For Each option3 In Range3 ' *** PERFORM CODE HERE *** ' EXAMPLE ' Sheets(1).Cells(1, 1) = option1 ' Sheets(1).Cells(2, 1) = option2 ' etc... Next option3 Next option2 Next option1 End Sub 

编辑:

 Sub LoopThroughList() Dim Dropdown1, Dropdown2, Dropdown3 As String Dim Range1, Range2, Range3 As Range Dim option1, option2, option3 As Range Dim Counter As Long Counter = 1 ' *** SET DROPDOWN LOCATIONS HERE *** ' *********************************** Dropdown1 = "C6" Dropdown2 = "D6" Dropdown3 = "E6" ' *********************************** ' *********************************** Set Range1 = Evaluate(Range(Dropdown1).Validation.Formula1) Set Range2 = Evaluate(Range(Dropdown2).Validation.Formula1) Set Range3 = Evaluate(Range(Dropdown3).Validation.Formula1) For Each option1 In Range1 For Each option2 In Range2 For Each option3 In Range3 Sheets(2).Cells(Counter, 1) = option1 Sheets(2).Cells(Counter, 2) = option2 Sheets(2).Cells(Counter, 3) = option3 Counter = Counter + 1 Next option3 Next option2 Next option1 End Sub