VBA эквивалентно функции модема Excel

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

Вам нужен оператор мод .

 The expression a Mod b is equivalent to the following formula: a - (b * (a \ b)) 

Отредактировано для добавления:

Есть некоторые особые случаи, которые вам, возможно, придется учитывать, поскольку Excel использует математику с плавающей запятой (и возвращает float ), которую функция VBA возвращает целое число. Из-за этого использование mod с номерами с плавающей запятой может потребовать дополнительного внимания:

  • Результаты Excel могут не соответствовать точному outlookу; это кратко описано здесь (см. самый верхний ответ) и здесь .

  • Как отмечает Андре в комментариях, отрицательные числа могут округлить в противоположном направлении от ожидаемого. Здесь предлагается функция Fix() он предлагает, (MSDN) .

В vba функция MOD. например

  5 MOD 2 

Вот полезная ссылка .

Мой способ репликации MOD(a,b) Excel в VBA – использовать XLMod(a,b) в VBA, где вы включаете функцию:

 Function XLMod(a, b) ' This replicates the Excel MOD function XLMod = a - b * Int(a / b) End Function 

в вашем модуле VBA

Будьте очень осторожны с функцией 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 и In VBA: ((90.123 * 1000) Mod 90000) / 1000, возвращающий также 0.123

Оператор Mod , примерно эквивалентен функции MOD :

number Mod divisor примерно эквивалентен MOD(number, divisor) .

Главный ответ на самом деле ошибочен.

Предлагаемое уравнение: a - (b * (a \ b))

Решает: a - a

Это, конечно, 0 во всех случаях.

Правильное уравнение:

a - (b * INT(a \ b))

Или, если число (a) может быть отрицательным, используйте это:

a - (b * FIX(a \ b))

Но если вы просто хотите сказать разницу между нечетной итерацией и равномерной итерацией, это работает отлично:

 If i Mod 2 > 0 then 'this is an odd 'Do Something Else 'it is even 'Do Something Else End If 
 Function Remainder(Dividend As Variant, Divisor As Variant) As Variant Remainder = Dividend - Divisor * Int(Dividend / Divisor) End Function 

Эта функция всегда работает и является точной копией функции Excel.

  • Как дать задержку времени менее одной секунды в excel vba?
  • Как объединить значения из нескольких строк в одну строку в Excel?
  • Выполните команду в командной строке с помощью excel VBA
  • Определите, добавляет ли пользователь или удаляет строки
  • Получение ошибки Процедура слишком велика в макросах VBA (Excel)
  • Как вернуть результат из функции VBA
  • VBA проверяет, существует ли файл
  • Обновить результаты функции Excel VBA
  • Ошибка Excel 1004 «Невозможно получить ... свойство classа WorksheetFunction», появляющееся непоследовательно
  • Странный остаток на ячейке с проверкой данных при использовании Excel VBA
  • Цикл через таблицы Excel
  • Давайте будем гением компьютера.