【问题标题】:Repeat loop until empty cell重复循环直到空单元格
【发布时间】:2011-04-03 12:53:29
【问题描述】:

我正在寻找一个 Excel 公式,它可以添加行的结果,直到它碰到一个空单元格。

第一行包含一个公式(包括值 X)。 以下行每行包含 3 个单元格(A、B、C),其中包含值。 简单的 True/False ("=IF(AND(X>=A2;X 是否高于 A,低于 B,如果为真,它返回 C 的值。 然后该公式查看下一行并重复该操作,并将所有返回的值加到一个总和中。

ROW1 - A1(formula)
ROW2 - A2(5) - B2(10) - C2(100)
ROW3 - A3(10) - B3(20) - C3(200)
ROW4 - (empty)

ROW2 - If we set X=8, then 8 is > 5, and < 10, and the value 100 is returned.
ROW3 - The action is repeated - this time with the result 0.
ROW4 - The row/cell is empty and the loop stops.
ROW1 - Formula has stopped and shows result (100 + 0 =) 100.

【问题讨论】:

    标签: excel worksheet-function


    【解决方案1】:

    这正是他们创建 SUMIFS 工作表函数的原因。

    对于整列(如果第一个空白行之后没有任何内容):

    =SUMIFS(C:C, A:A, "<" & X , B:B ,">" & X)   
    

    注意:X 是 X 所在的单元格。

    如果您在第一个空白行之后确实有东西,则以下内容将起作用:

    =SUMIFS(INDIRECT("C2:C" & MATCH(TRUE,INDEX(ISBLANK(A:A),0,0),0)-1),
            INDIRECT("A2:A" & MATCH(TRUE,INDEX(ISBLANK(A:A),0,0),0)-1),"<" & M1,
            INDIRECT("B2:B" & MATCH(TRUE,INDEX(ISBLANK(A:A),0,0),0)-1),">" & M1)
    

    【讨论】:

    • 非常感谢,期待测试您的代码。与此同时,我自己发现解决我的问题的是 SUMIFS 函数,而不是循环宏。由于我无法弄清楚如何让它重复直到空单元格,我只是将它定义为检查一系列单元格 '=SUMIFS(N50:N122;L50:L122;"= 201201")'
    • @Bellman,我现在在我的机器上,看起来最后两个公式不起作用,所以我必须处理它们。
    • @Bellman,好的,我已经用一个工作公式替换了它们,可以进一步修改它以使其更灵活,但如果你的范围永远不会改变,那么我只会对它进行编码像你一样。
    【解决方案2】:

    我现在不在电脑前(使用 excel)。

    我知道有一个select current region(我认为它被映射到Ctrl-/?)您应该能够使用它来检测连续区域的末端。如果您只想要其中的一列,请使用 Range.Intersect 限制到一列(例如 D 列的“$D:D”)。

    这将利用 Excel 的强大功能,而不是自己编写代码。

    查看命名范围(插入/名称,F3 在公式编辑器中选择命名范围)。 IIRC您也可以在名称下拥有“动态”范围(例如:自动检测连续区域)。我必须尝试它是如何提供更多细节的

    【讨论】:

      【解决方案3】:

      如果你不确定会有多少行,那么你最好编写 vba 来循环遍历单元格,直到找到一个空的行

      myValue = 8
      searchRow = 2
      Total = 0
      Do While Cells(searchRow, 1).Value <> ""
        If (myValue > Cells(searchRow, 1).Value And myValue < Cells(searchRow, 2).Value) Then
          Total = Total + Cells(searchRow, 3).Value
        End If
      
      searchRow = searchRow + 1
      Loop
      
      Cells(1, 1).Value = Total
      

      【讨论】:

      • 抱歉,我没有说得足够清楚 - 循环必须运行 50 行或更多行,然后才能到达空单元格/行。
      • 这段代码将一直执行,直到它遇到 A 列中的第一个空单元格,因此您需要评估多少行并不重要
      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 2021-12-04
      相关资源
      最近更新 更多