Jump to content
paikerr

OPERACION MATEMÁTICA

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.

Share this post


Link to post
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 

Share this post


Link to post
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!

Share this post


Link to post
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 +++

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




  • Posts

    • Hola de nuevo @juancyuky Espero sea de utilidad.filtro vacias.xlsm  
    • Hola Mauricio,   Voy a intentar con tu valioso aporte y en este momento anexe el xlsm que al parecer no se cargo anteriormente y te comento si me resulto Muchas gracias!!! filtro vacias.xlsm
    • Mil gracias, si es algo que buscaba realizar, te lo agradezco mucho.
    • Hola @juancyuky No se puede descargar un archivo, pero una solución rápida y práctica podría ser:   Sub filtro() A = Application.WorksheetFunction.CountIf(Range("$A$5:$D$11"), Sheets("base").Range("c4").Value) If A >= 1 Then Range("A5").CurrentRegion.AutoFilter Field:=4, Criteria1:=Sheets("base").Range("c4").Value 'If A <> 0 Then Range("A5").CurrentRegion.AutoFilter Field:=4, Criteria1:=Sheets("base").Range("c4").Value      End Sub Espero se de utilidad, Sigo atento.
    • Hola amigos  De nuevo solicitando su apoya para resolver un tema, al filtrar ciertos datos y requiero copiar la información para procesarla solo que cuando no hay datos se produce un error 1004  como podria condicionarla con un if thense  Sub copiar_filtro() ActiveSheet.Range("$A$5:$D$11").SpecialCells(xlCellTypeVisible).Copy End Sub Sub filtro() Range("A5").CurrentRegion.AutoFilter Field:=4, Criteria1:=Sheets("base").Range("c4").Value      End Sub filtro vacias.xlsm   de antemano gracias        
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy