Excel VBA使用重现而不是循环

Excel VBA使用重现而不是循环,excel,algorithm,vba,recursion,sum,Excel,Algorithm,Vba,Recursion,Sum,我想请您帮助解决我在构建算法时面临的一个问题 可用数据 我们有一个10行30列的数据表 每行对应于链接到特定参数的变量(例如苹果重量、梨重量、橙子重量…参数10) 每列对应于变量可以采用的值 这就是为什么每个变量/参数有30个可能的值 算法的目标 给出这些参数的所有可能组合的总和(苹果+梨+橙子+…+参数10),通常应该有30^10个可能的组合 描述我的算法版本 它是创建一个包含10个索引的数组。每个索引都对应于变量/参数。每个索引由30个可能值中的一个填充 创建通过同一行中的列的循环。表

我想请您帮助解决我在构建算法时面临的一个问题

  • 可用数据
我们有一个10行30列的数据表

每行对应于链接到特定参数的变量(例如苹果重量、梨重量、橙子重量…参数10)

每列对应于变量可以采用的值

这就是为什么每个变量/参数有30个可能的值

  • 算法的目标 给出这些参数的所有可能组合的总和(苹果+梨+橙子+…+参数10),通常应该有30^10个可能的组合

  • 描述我的算法版本

  • 它是创建一个包含10个索引的数组。每个索引都对应于变量/参数。每个索引由30个可能值中的一个填充

  • 创建通过同一行中的列的循环。表中单元格的每个值都放在相应的索引中(第1行,用于索引1)

  • 每次更改都对应于同一行中的下一个可用值(右侧),但列不同。当列终止时,算法开始对下一行执行相同的操作

  • 数组变量中的每一个更改都必须给出一个新的和,并复制到表中某个新的单元格中

子算法和()

Dim rw等长,第1列等长
Dim Sum1(9)只要“具有10个索引的数组”,第一个困难是找到一种方法,如何将总和与数组Sum1中的每个更改同步。
趁我试试这个。它是递归的(尽管它也使用循环)

  • 使用顶部的常量调整数据
  • 用几行和几列试试看
  • 当前常量假定数据从单元格A1开始,有3个“变量”和2个“值”
  • 它将在运行时将结果打印到即时窗口,但您当然可以调整它以存储在数组中或打印到另一张纸上


谢谢你的回复。您的解决方案与debug.print完美配合

我能够添加表格的自动尺寸标注:

' number of "variables"
Dim ROWS As Integer
' number of "values"
Dim COLS As Integer
' upper left cell of table
Const CELL_UPPER_LEFT As String = "A1"

ROWS = Worksheets("Sheet1").UsedRange.ROWS.Count  
COLS = Worksheets("Sheet1").UsedRange.Columns.Count
a = (ROWS) ^ (COLS) 'The number of possible combinations
但是,我花了一上午的时间更改debug.print以获得另一个选项:

If row_number = ROWS Then
       Debug.Print sum
       Exit Sub
End If
为了更方便地使用以下获得的数据

If row_number = ROWS Then
    For i = 1 To a
        Worksheets("Sheet2").Cells(20, a).Value = sum
        Exit Sub
    Next
End If
据我所知,这不是使用循环的正确位置,因为我得到错误:«下标超出范围»。我的直觉告诉我,这些行与a不对应


你知道这个细节吗?是否可以直接使用debug.print信息?

请参阅下面的我的评论。如果你真的希望枚举所有的和,我建议你寻找一个更有效的算法。不,我会减少变量的数量。这就是为什么自动调整大小选项30^10微秒已经超过18年了,所以我希望您在短期内不需要答案。(如果您正在等待,另一个解决方案是42。)尝试用以下内容替换Debug.Print语句:
工作表(“Sheet2”).Range(“A”)和工作表(“Sheet2”).Rows.Count)。End(xlUp)。Offset(1,0)。Value=sum
。假设Sheet2的A列中没有任何内容,这将在那里写入值。这会更好,但会给出相同的错误。我认为它来自工作表(“表2”)。将尝试其他方法来定义路径并发布最终解决方案。非常感谢。PS:是的,这是工作表(“Sheets2”)的问题。奇怪的是,它拒绝使用直接路径,而更喜欢“ActiveSheet.”版本。非常感谢。
If row_number = ROWS Then
       Debug.Print sum
       Exit Sub
End If
If row_number = ROWS Then
    For i = 1 To a
        Worksheets("Sheet2").Cells(20, a).Value = sum
        Exit Sub
    Next
End If