Переместитесь из одной ячейки в другую и посчитайте количество строк между двумя данными - PullRequest
0 голосов
/ 13 августа 2010

У меня есть один столбец с 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 ]

1 голос
/ 13 августа 2010

Введите с помощью 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).

Все это говорит, дайте мне 2-ую самую большую строку для записей, которые содержат 1, и вычтите 3-ую самую большую строку для записей, которые содержат 1.

Когда вы заполняете до B2, это становится: дайте мне 1-ую самую большую строку для записей, которые содержат 1, и вычтите 2-ую самую большую строку.результат исключительный (а не включающий) строк, которые содержат 1.

Я знаю, что вы просили макрос, но вы можете найти формулы более подходящими.

1 голос
/ 13 августа 2010

Это должно делать то, что вы после. Предполагается, что данные в столбце 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...