¿Hay una vba equivalente a la función de mod
de Excel?VBA equivalente a la función de mod de Excel
Respuesta
Quiere el mod operator.
The expression a Mod b is equivalent to the following formula:
a - (b * (a \ b))
Editado para agregar:
Hay algunos casos especiales que pueda tener en cuenta, porque Excel está utilizando cálculos de coma flotante (y devuelve un float
), que la función de VBA devuelve un entero. Debido a esto, el uso de mod
con números de punto flotante puede requerir una atención especial:
resultados de Excel pueden no corresponder exactamente con lo que se puede predecir; esto se cubre brevemente here (see topmost answer) y en gran longitud here.
Como señala @ André en los comentarios, los números negativos pueden redondear en la dirección opuesta a la esperada. La función
Fix()
que sugiere se explica here (MSDN).
El Mod
operator, es más o menos equivalente a la MOD
function:
number Mod divisor
es más o menos equivalente a MOD(number, divisor)
.
Mi manera de replicar de Excel MOD(a,b)
en VBA es el uso de XLMod(a,b)
en VBA, donde se incluye la función:
Function XLMod(a, b)
' This replicates the Excel MOD function
XLMod = a - b * Int(a/b)
End Function
en su módulo de VBA
tener mucho cuidado con el Ministerio de Defensa de Excel (a, b) función y el operador VBA a Mod b. Excel devuelve un resultado de punto flotante y VBA un entero.
En Excel = MOD (90.123,90) devuelve ,123000000000005 en lugar de 0,123 En VBA 90.123 Mod 90 vuelve 0
Desde luego, no son equivalentes!
equivalentes son: En Excel: = redondo (Mod (90.123,90), 3) devolver 0.123 y En VBA: ((90.123 * 1000) Mod 90000)/1000 volver también 0,123
La parte superior la respuesta es realmente incorrecta
La ecuación sugerida: a - (b * (a \ b))
resolverá a: a - a
que por supuesto es 0 en todos los casos.
La ecuación correcta es:
a - (b * INT(a \ b))
O, si el número (a) puede ser negativo, utilice esto:
a - (b * FIX(a \ b))
\ operator no es lo mismo que/operador \ El resultado es el cociente entero de expression1 dividido por expression2, que descarta cualquier resto y conserva solo la parte entera. Esto se conoce como truncamiento. El/Operador (Visual Basic) devuelve el cociente completo, que conserva el resto en la parte fraccionaria. https://msdn.microsoft.com/en-us/library/0e16fywh.aspx –
Pero si lo que desea es decir la diferencia entre una iteración impar y una iteración par, esto funciona bien:
If i Mod 2 > 0 then 'this is an odd
'Do Something
Else 'it is even
'Do Something Else
End If
- 1. Actualizar Excel Función VBA Resultados
- 2. Función de llamada a Excel VBA con nombre de variable
- 3. ¿Cuál es el equivalente de "! =" En Excel VBA?
- 4. Subcadena de Excel VBA
- 5. La función Dir() no funciona en Mac Excel 2011 VBA
- 6. Números mod negativos en SQL como excel
- 7. Función de hash de contraseña para Excel VBA
- 8. Crear una función de hoja personalizada en Excel VBA
- 9. Función de Excel VBA que devuelve una matriz
- 10. ¿Puede una función de VBA en Excel devolver un rango?
- 11. Cerrar la aplicación de Excel usando VBA
- 12. llamando a la función de hoja de cálculo excel desde la celda excel
- 13. VBA Excel: Agregar un segundo a la vez
- 14. Excel VBA - salida de bucle
- 15. matriz en Excel VBA
- 16. Excel VBA - xlDown
- 17. Excel VBA - Interpretar valores "N/A"
- 18. Excel VBA Colón
- 19. OnClick en Excel VBA
- 20. ¿Cómo programar código una función 'deshacer' en Excel-Vba?
- 21. Excel vba - cadena de conversión al número
- 22. VBA cambia Excel 2002 -> Excel 2007
- 23. celda de Excel desde la que se llama una función
- 24. Assign en función de VBA clic a un botón creado de forma dinámica en Excel formUsuario
- 25. Función Excel VBA para imprimir una matriz en el libro
- 26. Función Dir en Excel 2010 VBA no funciona
- 27. Documentación para macros VBA de Excel
- 28. ¿Existe un equivalente a Thread.Sleep() en VBA
- 29. ¿Cómo formateo la hora en [h]: formato mm excel usando la función de formateo() en VBA
- 30. Buenas prácticas de desarrollo de Excel VBA
Será mejor que cambie '(a \ b)' para 'Fix (a/b)'. De lo contrario, puede tener problemas con los argumentos decimales. Prueba tu fórmula con 'a = 1.75' y' b = 1' y verás mi punto. –
La fórmula sugerida es incorrecta y siempre producirá 0 como respuesta – PSVSupporter
@PSVSupporter Creo que está confundiendo el operador '\' con '/'. Ellos son diferentes. – egrunin