【问题标题】:Move from one cell to another and count the number of rows in between two data从一个单元格移动到另一个单元格并计算两个数据之间的行数
【发布时间】:2015-01-30 22:49:11
【问题描述】:

我有一列有 250 行。在这些行中,输入的数据是随机的 0 和 1。我需要找到任何两个 1 之间的行数。我需要为此编写一个宏。例如:如果我的专栏如下:

       A1 0        B1 2
       A2 0        B2 2
       A3 0        
       A4 1
       A5 0 
       A6 0 
       A7 1
       A8 0 
       A9 0 
      A10 1

我想要的是检查从 A1 到 A10 的整个列。从 A1 开始,我的程序将检查“1”,它在 A4 中找到,它将继续向下移动,直到找到另一个“1”。在这里它将移动到 A7。现在结果应该是“中间的行数”,在这种情况下为 2。此结果应粘贴到另一列中,比如说 B1。这个过程需要继续,直到我的光标到达 B10 行。请帮忙。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    这应该做你所追求的。它假定 A 列中的数据是连续的。

    Sub helpSandeep()
        Dim c As Range
        Dim counting As Boolean
        Dim zeroCount As Long
    
        [B:B].ClearContents
        [B1] = "Results"
    
        For Each c In Sheets("Sheet1").[A1:A65536].Cells
            If Len(c) = 0 Then
                'Assuming that an empty cell means we are finished
                Exit For
            Else
                If c.Value2 = 1 Then
                    'Update the results and reset the count
                    counting = True 'Avoids counting any initial zeroes as per your example
                    If zeroCount > 0 Then
                        [B65536].End(xlUp).Offset(1, 0) = zeroCount
                    End If
                    zeroCount = 0
                Else
                    'Increment count, assuming we are actually counting
                    If counting Then
                        zeroCount = zeroCount + 1
                    End If
                End If
            End If
        Next c
    End Sub
    

    【讨论】:

      【解决方案2】:

      使用 Control+Shift+Enter 输入以使其成为数组公式。在B1

      =LARGE((ROW($A$1:$A$10))*($A$1:$A$10=1),SUM(--($A$1:$A$10=1))-(ROW()))-LARGE((ROW($A$1:$A$10))*($A$1:$A$10=1),SUM(--($A$1:$A$10=1))-(ROW()-1))-1
      

      然后填写。该公式包括减去两个 LARGE 函数,然后从结果中减去 1。

      LARGE 函数的第一个参数是一个数组,它返回每个包含 1 的条目的行号。

      (ROW($A$1:$A$10))*($A$1:$A$10=1)
      

      LARGE 函数的第二个参数是一个 SUM 数组公式,它计算所有条目为 1,然后减去当前行号(或当前行号 -1)。对于 B1 中的公式,这将返回 3-1(或 2,即行号 (1) 减去一 (3) 的所有条目的计数)。

      对于第二个 LARGE 函数,第二个参数将返回 3-0 (3)。

      所有这一切都说,给我包含 1 的条目的第二大行,并减去包含 1 的条目的第三大行。

      当您填写到 B2 时,就变成:给我包含 1 的条目的第 1 大行并减去第 2 大行。

      最后,我们从整个事物中减去 1,以使结果不包含(而不是包含)包含 1 的行。

      我知道您要求使用宏,但您可能会发现更合适的公式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 2018-03-15
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        相关资源
        最近更新 更多