#excel #vba #runtime
#excel #vba #время выполнения
Вопрос:
Я застрял с этой проблемой на VBA… Мне нужно создать комбинации, но когда N> 22 и K = 5, VBA возвращает ошибку времени выполнения ‘6’: переполнение. Я пытался исправить это, сохранив файл с .xlxs, но проблема все еще остается. Итак, я попытался переключить переменные на 32-разрядные, но, честно говоря, я не знаю, как изменить код.
Пожалуйста, найдите это здесь ниже:
Public col(100), r, n, nr As Integer
Function comb(k)
col(k) = col(k - 1)
While col(k) < n - r k
col(k) = col(k) 1
If k < r Then
comb (k 1)
Else
nr = nr 1
For i = 1 To r
Cells(nr, i) = col(i)
Next
End If
Wend
End Function
Комментарии:
1.
Public col(100), r, n, nr As double
Ответ №1:
Public col(100), r, n, nr As Integer
Вы, должно быть, присваиваете большее значение, чем может обработать целое число. Используйте Single или по причинам отладки объявляйте их по отдельности внутри функции таким образом, если ошибка сохраняется, она выделит переменную с ошибкой.
Не используйте double, поскольку для вывода может потребоваться формат, double = десятичные дроби и т.д. (Как указано enderland в комментариях).
Ответ №2:
Числа становятся слишком большими для int
или long
обработки. для небольших чисел вы можете использовать прямую формулу, а для больших чисел вы можете использовать либо приближение Стирлинга, либо формулу Рамануджана для факториала и сохранить ее в double
http://www.johndcook.com/blog/2012/09/25/ramanujans-factorial-approximation/