Как посчитать повторяющиеся элементы в цикле For - PullRequest
0 голосов
/ 06 марта 2020

У меня есть список + 50k данных об измерениях угла, и я хотел бы знать, например, когда значение повторяется более 8 раз. Проблема в том, что я не хочу искать повторяющиеся значения во всем столбце, но только когда значение начинает повторяться для определенной частоты, а затем считать это определенное количество.

Я думал, что делал что-то действительно глупое, но проблема в том, что он найдет это количество времени, но, поскольку я делаю это уже внутри объекта For l oop, он будет считать одно и то же событие несколько раз ...

Также я пытаюсь выяснить, Таким образом, после обнаружения счетчика код переходит к следующему неповторяющемуся значению в For l oop и возобновляет l oop.

  For i = 1 To n

    If Hour(Cells(i, 1).Value) >= Hour(7) And Hour(Cells(i, 1).Value) >= Hour(18) Then
        If Cells(i, 3).Value = Cells(i + 1, 3).Value = Cells(i + 2, 3).Value = Cells(i + 3, 3).Value = Cells(i + 4, 3).Value = Cells(i + 5, 3).Value = Cells(i + 6, 3).Value = Cells(i + 7, 3).Value Then
            'rest of code
        End If
    End If
 Next i

Любая помощь действительно приветствуется!

Образец данных:

Sample

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Вы можете попробовать:

=IF(COUNTIF($B$1:$B1,$B1)=1,IF(COUNTIF($B$1:$B$43,$B1)>8,"More",""),"")

0 голосов
/ 06 марта 2020

Таким образом, вы обычно делаете это для всего списка, сохраняя карту частот. Когда частота становится слишком высокой, вы прекращаете печатать эту запись.

Если вы хотите сделать то же самое в окне (скажем, 50 строк), когда вы шагаете по файлу, то в вашем for-l oop, вы добавляете каждую запись в карту, но вы также уменьшаете счетчик для размера окна записи ранее. Теперь вы можете принять решение пропустить высокочастотные строки.

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

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