excel - 顺序无关紧要的VBA循环

标签 excel vba loops do-while

我正在尝试对 3 个变量运行一个循环,其中的顺序无关紧要。

我首先尝试的代码如下,其中 nx 遍历行,limit 是我数据库的最后一行:

Do While n3 <= limit
    Do While n2 <= limit
       Do While n1 <= limit
          Call Output
          n1 = n1 + 1
       Loop
       Call Output
       n2 = n2 + 1
       n1 = n0
    Loop
    Call Output                         
    n3 = n3 + 1
    n2 = n0
    n1 = n0
Loop

这让我可以测试每一种可能性,但它也会多次重复相同的组合,从而增加了运行时间。如果我计划测试,比方说,20 个变量,这将使代码无法使用。

关于如何优化这个循环有什么建议吗?

谢谢。

最佳答案

根据您的评论,您不想要给定组合的排列。假设我们正在混合油漆。我们有五种不同的颜色:

  1. 白色
  2. 黑色
  3. 黄色
  4. 蓝色
  5. 绿色

我们想混合三个 jar 头的所有可能组合,但是一旦我们混合完毕

白色、蓝色、绿色

我们不需要这些:

白,绿,蓝
绿,白,蓝
绿,蓝,白
蓝,绿,白
蓝,白,绿

因为它们都产生相同的浅蓝绿色。

首先我们以这种交错的方式运行循环:

Sub MixPaint()
    Dim arr(1 To 5) As String
    Dim i As Long, j As Long, k As Long, LL As Long
    arr(1) = "white"
    arr(2) = "black"
    arr(3) = "blue"
    arr(4) = "green"
    arr(5) = "yellow"
    LL = 1
    For i = 1 To 3
        For j = i + 1 To 4
            For k = j + 1 To 5
                Cells(LL, 1) = arr(i) & ":" & arr(j) & ":" & arr(k)
                LL = LL + 1
            Next k
        Next j
    Next i
End Sub

这让我们:

enter image description here

这会删除排列的重复项,但也会删除组合,例如:

蓝色,蓝色,白色

为了恢复这些,我们稍微调整了循环:

Sub MixPaint2()
    Dim arr(1 To 5) As String
    Dim i As Long, j As Long, k As Long, LL As Long
    arr(1) = "white"
    arr(2) = "black"
    arr(3) = "blue"
    arr(4) = "green"
    arr(5) = "yellow"
    LL = 1
    For i = 1 To 5
        For j = i To 5
            For k = j To 5
                Cells(LL, 5) = arr(i) & ":" & arr(j) & ":" & arr(k)
                LL = LL + 1
            Next k
        Next j
    Next i
End Sub

现在我们有:

enter image description here

这可能就是您所追求的。

关于excel - 顺序无关紧要的VBA循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61974473/

相关文章:

javascript - 使用 SheetJS/js-xlsx 读取大型 Excel 文件?

vba - 以整数形式插入日期 (Excel)

java - 无法使用 java 中的 setCellValue api 更新单元格值

vba - 使用 VBA 在 Excel 用户窗体中选择由选项指示的多个下拉框

php - 如何为 mysql 创建一个函数

excel - Rubberduck VBA 代码检查 : Member 'x' has a 'VB_VarHelpID' attribute with value '-1' , 但没有相应的注释

database - Access VBA : enter expression in user form, 将计算结果存储在表中?

excel - 用数字和连接的数字对表进行排序

c++ - 如何在一个数组/容器中使用不同的对象?

r - 在 R 中的大矩阵中添加连续的四/n 个数字