накопление вхождения "true" или "1" приводит к отдельному столбцу - PullRequest
0 голосов
/ 09 октября 2018

У меня есть около 100 строк, которые включают в себя генератор случайных чисел в столбце и в другом столбце с вычислениями = A на основе этого случайного числа и других вещей.Я установил столбец с оператором if, чтобы проверить, находится ли A в верхнем и нижнем диапазонах, который возвращает «1», если истина (попадание, если хотите), и «0», если нет.Я хочу запустить цикл и посчитать количество попаданий с течением времени в этих ячейках.По сути, мне нужен столбец, который накапливает результаты, чтобы в конце я смог увидеть, какой диапазон имеет наибольшее количество попаданий и т. Д.

1 Ответ

0 голосов
/ 09 октября 2018

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

     A              | B                | C
1    Random Numbers | Calculated Value | Accumulated Value
2    0              | 1                | 
3    5              | 0                | 
4    8              | 1                | 
5    73             | 0                | 
6    2              | 0                | 

[...]

И, скажем, мы хотим запустить этот процесс 10 000 раз, чтобыпосмотрите, какие строки получают наибольшие накопленные значения, представленные в виде суммы рассчитанного значения для каждой из предыдущих итераций.Я бы предложил следующее решение VBA:

Sub AccumulateValues
    Dim MaxIterations As Long: MaxIterations = 10000        
    Dim curRow as Long, LastRow as Long, it as Long

    Application.Calculation = xlCalculationManual 'Required to set it to manual

    With ws
        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For it = 1 to MaxIterations

            'Force the Recalculation of Cells in columns A and B:
            Application.Calculate

            For curRow = 2 To LastRow                    
                'Sum the result of this iteration with the accumulated value 
                'until the previous iteration and stores it.
                ws.Cells(curRow, 3) = ws.Cells(curRow, 3) + ws.Cells(curRow, 2)    

            Next curRow
        Next it

    End With

End Sub
...