Подсчет первого появления последовательных значений, соответствующих критериям - PullRequest
0 голосов
/ 28 августа 2018

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

32 19 4 293 -30 -2 -5 -25 29 58 74 -90 -73 -62

Я бы хотел, чтобы в этом случае функция возвращала 4 (подсчет последовательных отрицательных значений от -30 до -25 и полное игнорирование значений от -90 до -62)

Я дошел до получения индекса первого отрицательного значения, но я не знаю, как отсчитать последовательные значения оттуда. Может кто-нибудь помочь, пожалуйста?

РЕДАКТИРОВАТЬ:

Пока у меня есть следующая формула:

=COUNTIF(INDEX(R3:EQ3,MATCH(TRUE,INDEX(R3:EQ3<0,),0)),"<0")

Чтобы объяснить это, используя оригинальный пример:

Эта формула находит первое отрицательное значение в этом диапазоне, равное -30, а затем возвращает индекс этого значения. Затем Countif переходит к этому индексу и проверяет, является ли он отрицательным, и считает его, если он есть. Однако эта формула не будет учитывать -2, -5 и -25, которые идут после этого, и в настоящее время она всегда возвращает 1.

Мне нужно, чтобы он нашел -30, посчитал его, а затем посчитал любые другие отрицательные значения, которые после прямой .

Ниже показано, какие значения я хотел бы посчитать в примере диапазона.

 N  N N   N   Y  Y  Y   Y  N  N  N   N   N   N
32 19 4 293 -30 -2 -5 -25 29 58 74 -90 -73 -62
           This is counted       This is ignored

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Пока в вашем наборе данных нет первого экземпляра отрицательных значений, оканчивающегося на столбец XFD (последний столбец), вы можете использовать эту формулу массива:

=MATCH(TRUE,INDEX(1:1,1,MATCH(TRUE,1:1<0,0)):INDEX(1:1,1,16384)>=0,0)-1

Измените ссылку на строку в формуле на строку, которую вы хотите проверить.

Эта формула не может быть введена в той же строке, что и проверяемые данные, без изменения, иначе вы получите ошибку циклической ссылки

Чтобы ввести / подтвердить формулу массива , удерживайте нажатой клавишу ctrl + shift при нажатии , введите . Если вы сделаете это правильно, Excel поместит фигурные скобки {...} вокруг формулы, отображаемой на панели формул.

0 голосов
/ 28 августа 2018

То же самое, что и формула Рона, я думаю, но вот небольшое объяснение

Учитывая, что ваши данные находятся в ячейках A1: O1 и у вас есть положительные значения либо в середине, либо в конце диапазона, тогда эта формула массива будет работать.

= ПОИСКПОЗ (TRUE, ДВССЫЛ (АДРЕС (1, MATCH (TRUE, то A1: О1 <0,0), 4) & ": О1")> 0,0) -1

MATCH (TRUE, A1: O1 <0,0) </strong> - Мы пытаемся найти позицию первого отрицательного числа в списке.

Внешний MATCH ищет положительное число, которое идет после первого отрицательного числа.

т.е. Отсчет начинается от отрицательного к положительному, если первые положительные числа идут после двух последовательных отрицательных значений, тогда он возвращает 3. (поэтому в конце необходим минус 1).

Надеюсь, это поможет!

0 голосов
/ 28 августа 2018

Попробуйте следующую пользовательскую функцию:

Public Function consec(rng As Range) As Long
    Dim r As Range, StartCount As Boolean
    consec = 0
    StartCount = False
    For Each r In rng
        If StartCount Then
            If r.Value < 0 Then
                consec = consec + 1
            Else
                Exit Function
            End If
        Else
            If r.Value < 0 Then
                StartCount = True
                consec = 1
            End If
        End If
    Next r
End Function

enter image description here

Пользовательские функции (UDF) очень просто установить и использовать:

  1. ALT-F11 открывает окно VBE
  2. ALT-I ALT-M открывает новый модуль
  3. вставьте материал и закройте окно VBE

Если вы сохраните книгу, UDF будет сохранен вместе с ней. Если вы используете версию Excel позже, чем 2003, вы должны сохранить файл в формате .xlsm, а не .xlsx

К Удалить UDF:

  1. вызвать окно VBE, как указано выше
  2. очистить код
  3. закрыть окно VBE

Для используйте UDF из Excel:

= Consec (A1: Z1)

Чтобы узнать больше о макросах в целом, см .:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

и

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

и подробности о UDF см .:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Для работы должны быть включены макросы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...