循环在单个单元格内

时间:2017-07-21 11:41:04

标签: vba loops

你对VBA很新,我正在努力奋斗。基本上我正在尝试使用excel来增加风力涡轮机和太阳能电池板的数量,直到达到预算为止

Dim Turbines As Integer, SolarPanels As Integer

If Range("Total_Budget") < 50000 Then

    For Turbines = 1 To 10
        For SolarPanels = 0 To 1000 Step 50

            Range("TNumber") = Turbines
            Range("SPower") = SolarPanels
        Exit For

    Next Turbines

Next SolarPanels

End If

End Sub

TNumberSPower以及单个单元格命名范围。当我尝试运行代码时出现错误: -

  

无效的下一个控制变量引用。

就像我说的那样,我是VBA的新手并且正在努力解决这个问题,如果我的问题没有完全理解,那么道歉

1 个答案:

答案 0 :(得分:0)

根据您的comment,这可以通过公式完成:

设置TurbineCount单元格:
=INT(Total_Budget/CostPerTurbine)

设置您的SolarPanel计数单元格:
=INT((Total_Budget-(TurbineCount*CostPerTurbine))/CostPerSolarPanel)

并完成它。

INT()向下舍入到最接近的整数,这样您就不会得到部分涡轮机或面板。

<小时/> 如果您 在VBA中执行此操作:

Public Sub CalcTurbinesAndPanels()

  Dim TotalBudget as Range
  Set TotalBudget = ThisWorkbook.ThisWorksheet.Range("Total_Budget")
  If  TotalBudget.Value < 50000 Then
    Dim TurbineCount as Range
    Set TurbineCount = ThisWorkbook.ThisWorksheet.Range("TNumber")

    Dim TurbineCost as Range
    Set TurbineCost = ThisWorkbook.ThisWorksheet.Range("TurbineCost")

    TurbineCount.Value = TotalBudget.Value / TurbineCost.Value

    Dim RemainingBudget as Long
    RemainingBudget = TotalBudget.Value - (TurbineCount.Value * TurbineCost.Value)

    Dim PanelCount as Range
    Set PanelCount = ThisWorkbook.ThisWorksheet.Range("SPower")

    Dim PanelCost as Range
    Set PanelCost = ThisWorkbook.ThisWorksheet.Range("SolarPanelCost")
    PanelCount.Value = RemainingBudget / PanelCost.Value

  End If

End Sub

注意:

  • 我假设您的 TurbineCount SolarPanelCount TurbineCost SolarPanelCost <还有一些额外的命名范围/ em>细胞。根据需要进行调整。
  • 声明Range个变量并将它们设置为等于它们所引用的范围意味着从长期来看,在较长的函数上输入的次数较少。
    • 我添加ThisWorkbook.ThisWorksheet.至少强制引用始终指向运行代码的工作簿/工作表。
    • 在如此小的例行程序中,这可能是一个微不足道的重点,但最好早点养成适当的习惯。
  • .ValueRange的默认属性,因此您无需使用它,但我将其用于使其更明确
  • Range()始终引用当前的ActiveWorkbook.ActiveWorksheet。在您的代码中使用不合格的Range()从长远来看会遇到麻烦 - 在某些时候,您,您的用户或您的代码将切换到不同的工作表,一切都会因为难以追踪的奇怪错误而中断并且可能会对工作簿中的数据造成重大损害。
  • 在代码中执行此操作重要过度杀伤,除非工作表的格式被锁定且您无法/允许添加或编辑公式。
  • 这是一些快速的代码。它尚未经过测试,甚至没有在VBE中编写。可能存在一些小错字。 YMMV。