2011-12-23 6 views
0

У меня проблема с сбоем Excel 2010 (Windows XP говорит, что Excel «не отвечает»), когда я использую VBA для вычисления медианы массива, в случаях где средняя функция вычисляется до нуля. К сожалению, проблема воспроизводима только в контексте определенного набора кода (когда я пытаюсь написать упрощенную версию, для отладки проблема не возникает). Тем не менее, я думаю, кто-то может найти эту проблему интересной по следующим причинам.Crash (программа не отвечает), когда медиана оценивается до нуля (VBA)

Аварийный сигнал возникает при вызове application.worksheetfunction.median. VBA не может пройти этот вызов. Это не проблема последующего погружения на ноль.

Авария происходит даже в том случае, если массив очень мал (например, 8).

Я обнаружил, что эффективным решением для меня является добавление небольшой константы к каждому элементу массива, затем вычисление медианы, а затем сразу же вычитание константы из каждого значения массива. Кажется, это дает правильный ответ. Но меня беспокоит, что Excel требует этого решения.

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

+0

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

+0

Извините. URL-адрес был неверно отформатирован. Вот повторите попытку. http://www.bgsu.edu/departments/psych/faculty/randers/temp/median%20problem.xlsm – user1113568

+0

@CharlesWilliams Спасибо за ваш интерес. Поскольку проблема связана с кодом VBA, взаимодействующим с электронной таблицей, вот URL, где вы можете загрузить весь файл xlsm: http: //www.bgsu.edu/department/psych/faculty/randers/temp/median% 20problem.xlsm (Я также попытаюсь выяснить, как использовать форматирование уценки, чтобы включить только код, здесь, в stackoverflow.) – user1113568

ответ

0

спасибо. Теперь я могу дублировать проблему. Похож на ошибку в Excel 2010 для меня. Сужение его вниз, он выглядит как ошибка, связанная с плавающей проблемы точкой с очень небольшим числом в Медиана: например, вы можете обойти эту проблему путем надстройке нуля до

tempCrossZ(i) = tempA(i) * tempB(i) 

сделать

tempCrossZ(i) = tempA(i) * tempB(i) + 0# 

перед вызовом MEDIAN.
Если вы разрешите это, я сообщу об этом как об ошибке в команде Excel, используя тестовый файл.

+0

Спасибо !. И да, пожалуйста, отправьте код и сообщите об этом как об ошибке. Кроме того, я уже обошел ошибку, повторно выполнив свою программу, чтобы все статистические вычисления выполнялись на диапазонах ячеек электронных таблиц, а не на массивах. – user1113568

0

Я получаю ту же проблему в аналогичных условиях - за исключением Excel 2003 и только при вычислении массива типа Double или Single. То есть, Excel просто зависает (без ответа) при вычислении медианы массива, когда «ответ» на вычисление равен нулю.

То же самое при вычислении функций процентиля или триммера в массиве.

Если я пишу массив в диапазон, то для вычисления используйте формулу («= MEDIAN (myRng)» и т. Д.), Excel не замерзает. Только при вычислении массива типа Double или Single. (Excel, кажется, не против, если я использую Long, не пробовал Integer.)

Я использовал обходной путь, как было предложено выше:

For i = 1 To UBound(myArr) 
    ratioArr(i) = ratioArr(i) + 0# 
Next i 

{мои расчеты здесь, то:}

For i = 1 To UBound(myArr) 
    ratioArr(i) = ratioArr(i) - 0# 
Next i 

Кажется, работает, как клочья. (Но показывает, что мне нужно перенести Excel на любую серьезную статистическую работу. Время, наконец, изучить C++, я думаю, или плакать.)

Смежные вопросы