Существует ли эквивалент vba функции excel mod
?
VBA эквивалентен функции Excel mod
Ответ 1
Вы хотите мод оператора.
The expression a Mod b is equivalent to the following formula:
a - (b * (a \ b))
Отредактировано, чтобы добавить:
Есть некоторые особые случаи, которые вам, возможно, придется рассмотреть, потому что в Excel используется математика с плавающей запятой (и возвращает число с float
), функция VBA которого возвращает целое число. Из-за этого использование mod
с числами с плавающей точкой может потребовать дополнительного внимания:
-
Результаты Excel могут не соответствовать точно тому, что вы прогнозируете; это кратко освещено здесь (см. самый верхний ответ) и подробно здесь.
-
Как отмечает @André в комментариях, отрицательные числа могут округляться в направлении, противоположном ожидаемому. Предложенная им функция
Fix()
объясняется здесь (MSDN).
Ответ 2
В vba функция MOD. например
5 MOD 2
Вот полезная ссылка.
Ответ 3
Мой способ репликации Excel MOD(a,b)
в VBA - использовать XLMod(a,b)
в VBA, где вы включаете функцию:
Function XLMod(a, b)
' This replicates the Excel MOD function
XLMod = a - b * Int(a / b)
End Function
в модуле VBA
Ответ 4
Будьте очень осторожны с функцией Excel MOD (a, b) и оператором VBA a Mod b. Excel возвращает результат с плавающей запятой, а VBA - целое число.
В Excel = Mod (90.123,90) возвращается 0.123000000000005 вместо 0.123 В VBA 90.123 Mod 90 возвращает 0
Они, конечно, не эквивалентны!
Эквивалент: В Excel: = Round (Mod (90.123,90), 3) возврат 0.123 и В VBA: ((90.123 * 1000) Mod 90000)/1000, возвращающий также 0.123
Ответ 5
Оператор Mod
примерно эквивалентен Mod
функция:
number Mod divisor
примерно эквивалентен MOD(number, divisor)
.
Ответ 6
Верхний ответ на самом деле неправильный.
Предлагаемое уравнение:
a - (b * (a \ b))
Решится к: a - a
Это, конечно, 0 во всех случаях.
Правильное уравнение:
a - (b * INT(a \ b))
Или, если число (a) может быть отрицательным, используйте это:
a - (b * FIX(a \ b))
Ответ 7
Но если вы просто хотите рассказать о разнице между нечетной итерацией и равномерной итерацией, это будет очень хорошо:
If i Mod 2 > 0 then 'this is an odd
'Do Something
Else 'it is even
'Do Something Else
End If
Ответ 8
Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function
Эта функция всегда работает и является точной копией функции Excel.