从一个单元格移动到另一个单元格并计算两个数据之间的行数

时间:2010-08-13 05:18:48

标签: excel vba excel-vba

我有一列有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行。请帮忙。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用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,所有条目的计数,其中一(3)个减去行号(1))。

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

所有这些都说明,给出包含1的条目的第二大行,并减去包含1的条目的第三大行。

当你填写到B2时,它变为:给出包含1的条目的第1大行并减去第2大行。

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

我知道你要求一个宏,但你可能会发现更合适的公式。