Странная математическая ошибка в VBA для Excel
Привет всем, хотел бы получить отзыв о необычной ошибке, которую я получаю.
Очень странно. У меня есть простая формула, которая отлично работает, если я
используйте его только в обычной ячейке листа и копируйте по столбцам,
но если я пытаюсь выполнить простую итерацию в коде vba для выполнения той же функции, я получаю неправильные значения.
Описание: число возводится в квадрат, а затем делится на другое значение
от 0,99 до 1,99, затем берется модуль, а затем
число снова возводится в квадрат, и вся формула повторяется.
Если я скопирую оператор формулы вниз по столбцу, то получится нормально,
включая разумную десятичную точность.
Есть четыре входа;
базовое значение (inputx)
decx = делитель
мод значение
Первая формула, помещенная в (E2), выглядит следующим образом; = MOD (((В2 ^ 2) / $ B $ 3), $ B $ 4)
В (E3) это утверждение помещено; = MOD (((Е2 ^ 2) / $ B $ 3), $ B $ 4)
Затем это точно такое же утверждение копируется по столбцам в следующие 98 ячеек.
Все отлично, без проблем. Кажется, точное значение мудрое, с точностью до десятичного
с точностью до десятичной точки во всех ячейках столбца.
Некоторые образцы входных значений для тестирования;
INPUTX -> 231
DECX 1.010101
MOD 400
LOOPTIMES 100
Но когда я пытаюсь реализовать это, это код Excel VBA (Excel 2007)
Я часто получаю неправильные значения и абсолютно никаких значений после десятичной запятой никогда не показывают.
пытались использовать всевозможные типы данных; одиночный, двойной, вариант и т. д. ... но все значения, возвращаемые созданной мной функцией VBA, всегда возвращаются
целые числа, и часто неправильно и, конечно, не согласен с
значения, возвращаемые простыми операторами на основе столбцов.
Попробовал найти способ обойти это или исправить это, наткнулся на "CDEC", пробовал
это и ничего не изменилось. Полностью озадачен и хотел бы немного понять
если это можно исправить так, чтобы цикл функции возвращал те же значения с
тот же тип десятичной точности, что и операторы на основе столбцов и
Буду очень признателен за отзыв о том, как это можно сделать.
Включаю мой пример кода ниже;
Public Function SQRD(inputx As Variant, looptime As Variant, decx As Variant) As Variant
Application.Volatile
Dim Count As Integer
SQRD = CDec(inputx)
'Dim decx As variant
Count = 1
For Count = 1 To looptime
SQRD = CDec(SQRD ^ 2) '+ looptime
SQRD = CDec(SQRD Mod 400 / decx)
Next Count
End Function