【问题标题】:Nested for loop with step not working嵌套for循环,步骤不起作用
【发布时间】:2016-10-10 16:16:22
【问题描述】:

我有以下代码。正如您在下一步循环中看到的那样。两个内循环工作正常,但外循环根本没有运行。这似乎与我如何“调暗”变量有关,但老实说,我不确定为什么这不起作用。为了简化,我删除了内部循环中的一些代码,但我认为这不会影响 for next 循环。

Sub AlgorithmOptimizertest()

    Dim PBmin As Double
    Dim PBmax As Double
    Dim PBstep As Double
    Dim PRORmin As Double
    Dim PRORmax As Double
    Dim PRORstep As Double

    Dim ROEmin As Double
    Dim ROEmax As Double
    Dim ROEstep As Double

    PBmin = Sheets("ModelSummary").Range("AP6").Value
    PBmax = Sheets("ModelSummary").Range("AP7").Value
    PBstep = Sheets("ModelSummary").Range("AP8").Value
    PRORmin = Sheets("ModelSummary").Range("AO6").Value
    PRORmax = Sheets("ModelSummary").Range("AO7").Value
    PRORstep = Sheets("ModelSummary").Range("AO8").Value
    ROEmin = Sheets("ModelSummary").Range("AD6").Value
    ROEmax = Sheets("ModelSummary").Range("AD7").Value
    ROEstep = Sheets("ModelSummary").Range("AD8").Value

    For k = ROEmin To ROEmax Step ROEstep
        Range("AD5").Value = k
        For j = PRORmin To PRORmax Step PRORstep
            Range("AO5").Value = j
            For i = PBmin To PBmax Step PBstep
                Range("AP5").Value = i

                Call PorfolioBuilder

            Next i
        Next j   
    Next k

End Sub

【问题讨论】:

  • 您是否验证过 AD8 中的值(添加到 AD6 时)没有超过 AD7 中的值,因此只执行了一次循环?我假设最外面的循环至少执行一次,因为你说内部循环工作正常。
  • 这段代码将受益于定义了所有代码的 ModelSummary 工作表的大 'ole With ... End With statement。您是否在 PorfolioBuilder 中选择、激活或创建另一个工作表?
  • ROEmin、ROEmax、ROEstep的值是多少?

标签: vba for-loop next


【解决方案1】:

这绝对不是代码问题。 这可能与您在单元格中的数据有关。

但准确地说,您应该这样做:

dim wb as workbook, ws as worksheet
'put your dim's here

set wb=thisworkbook
set ws=wb.worksheets("ModelSummary")

'read your values here
ROEmin = ws.Range("AD6").Value
'also you might want to try this
'ROEMIN = ws.Cells(ws.Range("AD6").row,ws.Range("AD6").column)

'then call your loops
For k = ROEmin To ROEmax Step ROEstep
    Range("AD5").Value = k
    For j = PRORmin To PRORmax Step PRORstep
        Range("AO5").Value = j
        For i = PBmin To PBmax Step PBstep
            Range("AP5").Value = i

            Call PorfolioBuilder

        Next i
    Next j   
Next k

【讨论】:

  • 感谢您的建议。我将尝试定义工作簿。为了添加到问题陈述中,该代码适用于某些范围集,但不适用于其他范围。例如,如果我将 ROEmin 设置为 0.5,将 max 设置为 1,步长为 0.1,则它可以工作。但如果 min 设置为 0.8 并且 max 为 1 且步长为 0.1,则它不起作用。如果我将最大值设置为略高于我真正想要的位置,它也可以工作。因此,如果我希望最大值为 1.2,那么我将循环中使用的最大值设置为 1.21,步长为 0.1,这样就可以了。
  • 所以看来单元格中的数据确实有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多