Ограничение размера массива WorksheetFunction - PullRequest
3 голосов
/ 11 августа 2011

Я пытаюсь вычислить процентиль 99,5% для набора данных из 100000 значений в массиве (arr1) в VBA, используя функцию процентиля следующим образом:

Pctile = Application.WorksheetFunction.Percentile(arr1, 0.995)
Pctile = Application.WorksheetFunction.Percentile_Inc(arr1, 0.995)

Ни то, ни другое не работает, и я постоянно получаю несоответствие типов (13).

Код работает нормально, если я ограничу размер массива максимум 65536. Насколько я знал, вычисление ограничено доступной памятью начиная с Excel 2007 размеры массива при переходе к макросу ограничены по доступной памяти начиная с Excel 2000.

Я использую Excel 2010 на высокопроизводительном сервере. Кто-нибудь может подтвердить, что эта проблема существует? Предполагая, что так, я полагаю, что у меня есть варианты построить функцию vba для вычисления процентиля «вручную» или вывода на лист, вычислить его там и прочитать обратно. Есть ли альтернативы и что будет быстрее?

Ответы [ 2 ]

1 голос
/ 15 марта 2018

Ошибка возникнет, если arr1 является одномерным и имеет более 65536 элементов (см. Ответ Чарльза в Размеры массива ограничивают передачу аргументов массива в VBA ). Размерность arr1 как двумерный массив с одним столбцом:

Dim arr1(1 to 100000, 1 to 1)

Это работает в Excel 2013. Судя по ответу Чарльза, похоже, что оно будет работать с Excel 2010.

1 голос
/ 14 августа 2011

Вот классический пример VBA, имитирующий функцию Excel Percentile.

Уровень процентиля и достоверности (Excel-VBA)

В свете воздействия Джин метода Straight Insertion неэффективного. Я отредактировал этот ответ следующим образом:

Я читал, что QuickSelect, кажется, преуспевает с большими записями и довольно эффективно делает это.

Ссылки:

  1. Wikipedia.org: Быстрый выбор
  2. Можно найти реализацию C # @ Быстрый алгоритм вычисления процентилей для удаления выбросов , которые следует легко преобразовать в VB.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...