我有一列有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行。请帮忙。
答案 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的行。
我知道你要求一个宏,但你可能会发现更合适的公式。