Jump to content

OPERACION MATEMÁTICA


paikerr

Recommended Posts

Hola a todxs,

 

Tengo un problemilla con la siguiente expresión matemática:

Sub MATHS_1()
  [A1] = 2 \ 3			 ' Igual a 0.
  [A2] = 2 \ 3 * 2		 ' Igual a 0.
  [A3] = 2 \ 3 * 2 / 3	 	' Igual a 1.
End Sub

El resultado de la celda [A3] si aplican la macro anterior, podrán comprobar que es 1.

Pues bien, no termino de entender muy bien la siguiente lógica:

> Paso 1: "2 \ 3" el resultado es 0, pues sólo se recoge la parte entera de la división. Es decir, si 2 / 3 = 0,666 (período), entonces 2 \ 3 = debería ser 0.

> Paso 2: Del resultado anterior, es decir del 0 obtenido, se lo multiplica por 2. Y cualquier número multiplicado por 0 es siempre 0.

> Paso 3: Y finalmente, el 0 obtenido hasta el momento se divide entre 3, es decir 0 / 3, y es cuando llegamos aquí en donde da como resultado final un 1.

Sin embargo, cualquier número que divida a 0 debería dar error. Y no es así en este ejemplo.

Lo cual me induce a pensar en la siguiente teoría: Creo que el operador "\" en realidad no recoge la parte entera, sino que recoge también la parte decimal y la aplica en las siguientes operaciones para evitar precisamente que den como resultado un error, pero en la celda sólo se muestra la parte entera de la división.

 

En este otro código (que es igual al anterior), tenemos que:

Sub MATHS_2()
  [A1] = 2 \ 3		' Igual a 0.
  [A2] = [A1] * 2	' Igual a 0.
  [A3] = [A2] / 3	' Igual a 0.
End Sub

Si aplicamos lo mismo que en el ejemplo anterior, pero esta vez recogemos el valor dentro de las celdas, podremos observar como en esta ocasión el resultado de la celda [A3] es igual a 0.


No sé... alguien que sepa de matemáticas y de operadores en Excel, quizás pueda enfocarme un poco.

Gracias de antemano por vuestro tiempo.

Link to comment
Share on other sites

Hola!

¿Que resultado esperas? ¿ya probaste manualmente o con calculadora?

Excel trabaja los numeros perfectamente, como cualquier calculadora, pero ojo, debes tener en cuanta el orden de ciertas reglas matematicas

En tu ejemplo, en ninguna parte, trabajas con enteros, Excel sigue tratando cada operación con los decimales correspondientes

Para poder obtener la parte entera, puedes utilizar Vba.Int

Si tienes mas dudas, pues comentas

 

Saludos 

Link to comment
Share on other sites

¡Hola, a ambos!

El operador "\" en VBA es el operador "División entera", el cual, como su nombre lo indica, devuelve la parte entera de una división, sin redondear.

El tema va más por el orden de las operaciones en VBA, la cual la puedes ver aquí:

https://docs.microsoft.com/es-es/dotnet/visual-basic/language-reference/operators/operator-precedence

Operaciones aritméticas y operadores de concatenación

  • Exponenciación (^)
  • Unario identidad y negación (+, –)
  • Multiplicación y división de coma flotante (*, /)
  • División de enteros (\)
  • Módulo aritmético (Mod)
  • Suma y resta (+, –)
  • Concatenación de cadenas (&)

Entonces, en el caso que expones, primero se resuelve la multiplicación y división normal, y luego, la división de enteros.

En ese orden de ideas:

[A3] = 2 \ 3 * 2 / 3
[A3] = 2 \ 6 / 3
[A3] = 2 \ 2
[A3] = 1

Que es el resultado correcto, tal y como lo comentas inicialmente.  La teoría expuesta al final es incorrecta.  ¡Bendiciones!

Link to comment
Share on other sites

Hace 3 horas, johnmpl dijo:

Operaciones aritméticas y operadores de concatenación

  • Exponenciación (^)
  • Unario identidad y negación (+, –)
  • Multiplicación y división de coma flotante (*, /)
  • División de enteros (\)
  • Módulo aritmético (Mod)
  • Suma y resta (+, –)
  • Concatenación de cadenas (&)

Gracias @johnmpl, efectivamente ahí es dónde estaba mi duda.
Me guardo este orden para tenerlo en cuenta frente a futuras operaciones.

 

Pensaba que la división de números enteros y la división en coma flotante tenían el mismo orden en la lista, de ahí mi duda... Al ver el orden del listado, todo cobra sentido.

Obviamente con el uso de paréntesis en las operaciones, todo se soluciona mucho más fácil, pero quería trabajar sin paréntesis precisamente por eso, para conocer el orden de los operadores.

 

Muchísimas gracias a todos por vuestra colaboración.

 

+++ TEMA CERRADO +++

Link to comment
Share on other sites

  • Silvia locked this topic

Archived

This topic is now archived and is closed to further replies.

Guest
This topic is now closed to further replies.
  • Crear macros Excel

  • Posts

    • Hola tod@s!!! me gustaría saber como puedo capturar los datos de un formulario a un otro libro (que no sea el libro que contiene la macro con el form). La idea es que varias personas puedan ir criando datos desde formularios "personales" y que estos datos generados por todos sean grabados  una única hoja. ahora mismo tengo el formulario funcionando, pero cada usuario guarda en "su archivo" la información. :( les agradezco de antemano toda la ayuda!!!
    • Hola sagamoal Ser miembro de paga, te da algunas ventajas, como subir archivos. Prueba esta formula, deberás adecuar a tus rangos =SI(INDICE(MES(Hoja1!$D$5:$D$9)=7,COINCIDIR(B6,Hoja1!$B$5:$B$9,)),INDICE((Hoja1!$D$5:$D$9,Hoja1!$E$5:$E$9),COINCIDIR(B6,Hoja1!$B$5:$B$9,),,SI(Hoja2!C6="i",1,2)),"") B6 es el código, y lo busca en la hoja 1 en la columna que corresponda. te adjunto imágenes para que te guíes. hoja1 Espero te sea de utilidad Saludos, Silvia   Hoja2    
    • Esta es la propiedad: ActiveSheet.Shapes(ShapeName).Fill.Transparency = valor (Entre 0 y 1) Por asociación con el resto de scrollsbar, no creo que un nuevo control para que controle esta propiedad.
    • Muy buenas. Espero su ayuda, en poder mostrar la fecha, cuando estén en cierta condición. En la Hoja1, se ingresan los datos, ya sea el código de la persona, la fecha de ingreso y la fecha de retiro. Codigo Nombres F.Ingreso F.Retiro 10 X1 01/02/2020   20 X2 01/02/2020 20/07/2021 30 X3 01/02/2020   40 X4 01/02/2020   100 X10 01/02/2020   110 X11 01/02/2020   120 X12 01/02/2020   130 X13 01/07/2020   140 X14 01/02/2020   150 X15 10/07/2020   160 X16 01/02/2020   170 X17 01/02/2020   180 X18 01/02/2020   190 X19 23/07/2021   200 X20 01/06/2021   En la hoja2, se ingresa el código de la persona y ademas un carácter, que es la novedad, cuando es I, debe mostrar todas las fechas que están dentro del mes, eso se lo relaciona con la fecha del cierre, y la letra R, cuando es la fecha de retiro.   Fecha Cierre 30/07/2021       Codigo Novedad Fecha 10 I   20 R 20/07/2021 30 I   40 I   100 I   110 I   120 I   130 I 01/07/2021 140 I   150 I 10/07/2021 160 I   170 I   180 I   190 I 23/07/2021 200 I         He tratado de subir el ejemplo en la planilla excel, pero hay líos para subirlo. gracias    
    • Hola @GabrielRaigosa, Gracias por el enlace, pero esto no me da la solución que busco.  Con eso copio las filas según una condición, pero no se eliminan de la tabla principal. Yo necesito que se eliminen de la tabla ya que una vez esta entregado el paquete, no quiero que siga visible en la tabla de "pendientes"   Saludos,
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy