gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:27:33 24 4
gpt4 key购买 nike

我正在尝试对 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com