【问题标题】:VBA use for each loop to divide through a rangeVBA 使用每个循环来划分一个范围
【发布时间】:2018-07-26 21:51:26
【问题描述】:

我有一个值范围(估计的项目时间),我有一个状态单元格(估计的项目总时间。我也有使用 vba 生成的日期列。本质上,我想划分范围内的每个单元格通过状态总估计小时单元格,并为每个日期在该行中重复该值(给出每周估计小时数)。该行完成后,我想下降到该范围内的下一个单元格并重复该过程。

到目前为止,这是我的代码:

Sub headers()
    Dim start As Double
    Dim weeks As Integer

    start = Range("B1").Value
    weeks = Range("B3").Value
    For i = 0 To weeks - 1
        Cells(8, 5 + i).Value = start + 4 + (i * 7)
    Next

End Sub


Sub PopulateValues()
    Dim weeks As Integer
    Dim rRng As Range
    Dim rCell As Range

    weeks = Range("B3").Value
    resources = Range("B6").Value
    Set rRng = Range("D9:D50")

    For Each rCell In rRng.Cells

        If IsEmpty(rCell.Value) Then Exit For

        For i = 0 To weeks - 1
            Cells(9, 5 + i).Value = rCell.Value / weeks
        Next
    Next rCell

End Sub

它所做的是循环遍历范围,但它在同一行上进行所有除法,从不迭代到下一行。

任何帮助都会很可爱。

提前致谢。

https://www.dropbox.com/s/l6dxa9ethbsix58/VBA.PNG?dl=0

【问题讨论】:

  • 对于这部分Cells(9, 5 + i).Value = rCell.Value / weeks,因为您永远不会更改“9”,它不会总是填充第 9 行的单元格吗?

标签: excel vba foreach


【解决方案1】:

所以在你的 for 循环中你有 Cells(9, 5 + i).Value。这里的变量是列的“i”。

你需要另一个变量 对于 rRng.Cells 中的每个 rCell

    If IsEmpty(rCell.Value) Then Exit For
    For j = 0 to weeks - 1
        For i = 0 To weeks - 1
            Cells(9+j, 5 + i).Value = rCell.Value / weeks
        Next
    Next
Next rCell

它将从第一行 9 (9 + j = 9) 开始,经过所有列 (i) 后,它将转到下一个 j(第 10 行)。

【讨论】:

  • 嗨@Rossle,感谢您的意见。但是,使用该代码,这些是我得到的结果:dropbox.com/s/l8dstyyyvh5xf5g/VBA%201.PNG?dl=0 这些是期望的结果:dropbox.com/s/frshel1l1r5umdz/VBA%202.PNG?dl=0 本质上,每一行应该是 Estimated Project Hours / 7 的重复值。示例:第 9 行 = 200 / 7;第 10 行 = 90 / 7 等
  • 很遗憾,我无法在工作时打开您的文件。我添加的代码更像是一个示例,可能还没有打包并准备好使用。也许今晚我在家的时候可以看看你的档案。同时,如果是我,我会使用 F8 一次执行一行代码,并在执行时查看每个变量。从那里你可以看到它是如何确定在哪里写入每个值的。
  • 不用担心@rossle。我能够弄清楚。我的代码中有太多循环导致它被覆盖。
  • 酷,很高兴你能弄明白。
猜你喜欢
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
相关资源
最近更新 更多