Подтвердить что ты не робот

VBA эквивалентен функции Excel mod

Существует ли эквивалент vba функции excel mod?

4b9b3361

Ответ 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.