OFFSET на самом деле медленный или просто волатильный? - PullRequest
1 голос
/ 03 мая 2020

У меня есть таблица в Excel, которая часто использует OFFSET, чтобы получить один столбец относительно другого. Это необходимо, чтобы позволить мне динамически изменять размер таблицы.

Так, например, в ячейке D5 из MyTable, у меня есть такая формула - где D $ 2 - первая строка таблицы

=INDEX(
    OFFSET(
        D$2,
        0,
        (- OffsetDistance ),
        ROWS(
            MyTable
        )
    ),
    MATCH(
        LARGE(
            OFFSET(
                D$2,
                0,
                (- 1 ),
                ROWS(
                    MyTable
                )
            ),
            ROW() -
                ROW(
                    MyTable[#Headers]
                )
        ),
        OFFSET(
            D$2,
            0,
            (- 1 ),
            ROWS(
                MyTable
            )
        ),
        0
    )
)

Теперь я слышал, что "1009 * медленный, потому что он волатильный". Это все равно что сказать, что RAND() медленно; генерация случайного числа не медленная, ничто по сравнению с сортировкой списка или поиском подстроки - медлительность заключается в том, что лист часто пересчитывается.

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

Итак, как правило, сам по себе OFFSET может быть источником медленности на листе ? Я думаю, что нет, потому что я предполагаю, что это операция O(1), которая просто добавляет пару чисел вместе. Но я не могу думать, как это количественно оценить

...