受到我在网上看到的puzzle的启发,自从我成为VBA新手以来,我认为这可能是一个有趣的练习,可以帮助我学习如何使用For
循环force方法来搜索它的解决方案。
这导致创造了一个怪物,需要很长时间才能部分运行并且实际上根本没有完全运行。 所有代码的目的都是打印3列有效组合
Private Sub CommandButton1_Click()
Dim j As Long
Dim abc As String
Dim def As String
Dim ghi As String
j = 1
For a = 1 To 9
For b = 1 To 9
For c = 1 To 9
For d = 1 To 9
For e = 1 To 9
For f = 1 To 9
For g = 1 To 9
For h = 1 To 9
For i = 1 To 9
'Line breaks included for ease of reading
If a = b Or a = c Or a = d Or a = e Or a = f Or a = g Or a = h Or a = i
Or b = c Or b = d Or b = e Or b = f Or b = g Or b = h Or b = i
Or c = d Or c = e Or c = f Or c = g Or c = h Or c = i
Or d = e Or d = f Or d = g Or d = h Or d = i
Or e = f Or e = g Or e = h Or e = i
Or f = g Or f = h Or f = i
Or g = h Or g = i
Or h = i Then
Else
abc = a & b & c
def = d & e & f
ghi = g & h & i
ThisWorkbook.Sheets("Sheet1").Cells(j, 1).Value = abc
ThisWorkbook.Sheets("Sheet1").Cells(j, 2).Value = def
ThisWorkbook.Sheets("Sheet1").Cells(j, 3).Value = ghi
j = j + 1
End If
Next i
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
End Sub
这显然涉及许多简单的操作,并导致各种(无响应)消息或它不会运行。在点击" Go"之前是否可以说出来?情况会是这样吗?
我的工作让我继续工作,并在其他电子表格上进行大量操作的电子表格,每个电子表格中可以包含数十万个数据项目。继续为这些文件添加功能可能是可持续的,也可能是不可持续的,我需要知道如何在我将时间投入到进一步开发之前。
在数量/运营数量方面,VBA可以做些什么?是否有工具可以估计实际运行完成的宏的可行性?工业中常用的启发式算法?
基本上,有哪些方法或工具可以告知宏或一系列宏的需求是否超过可用内存?
由于
答案 0 :(得分:1)
在开始之前,你应该尝试做一些数学运算。
您的代码会生成9个一次9个内容的所有排列。在开始之前,您知道这将填充 362880 行;所以代码应该可以工作。
另一个问题是它需要多长时间,这是最有效的方法。
答案 1 :(得分:0)
不是答案,但可以通过循环数字来解决吗?沿着这些方向的东西,是检查第一个字符对其余的
Dim l As Long
Dim i As Integer
For l = 11111111 To 99999999
For i = 2 To 8
DoEvents
If (Mid(l, i, 1) <> Mid(l, 1, 1)) Then
Debug.Print l
End If
Next i
Next l