Visual Basic para Aplicaciones - Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por Laura (8 intervenciones) el 30/07/2019 13:09:20
Buenas a tod@s, mi nombre es Laura, y a continuación expongo una simplificación del problema que necesito resolver. Pido disculpas de antemano porque no se como empezar a escribir la macro que necesito.

Ruego revisen el Excel adjunto para entender el problema, ya que he incluido imágenes.

Tengo 4 pares de coordenadas, con las que dibujo diferentes áreas, en las que debo comprobar cuantos puntos se encuentran dentro de ellas.

En la imagen se ve el AREA 1 (verde) y el AREA 2 (roja) y una serie de puntos (azul). Para el AREA 1 habría 6 puntos en su interior. Para el AREA 2 habría 3 puntos en su interior.

Dispongo de una herramienta que indica cuando un punto está dentro de un área o fuera, lo que necesito es una macro que permita automatizar el contaje de los puntos.

La idea es la siguiente:

Tengo una tabla (TABLA 1) con las coordenadas para cada área que desee identificar y una tabla (TABLA 2) con todos los puntos que se han de evaluar.

Necesito que para cada una de las áreas se haga una comprobación, y que el total de puntos que se encuentran dentro de dicha área quede registrado en la tabla de Resultados (TABLA 3).

Mi problema es que no se como escribir MACROS en VBA que permitan realizar la comprobación de la primera AREA, que el resultado se anote y que luego esos datos se borren para dar paso a la comprobación de la segunda AREA.

Agradecería cualquier tipo de indicación.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por JuanC (565 intervenciones) el 30/07/2019 19:27:19
Hola Laura, estuve haciendo el código para resolver tu problema, no puedo subir el archivo porque no estoy registrado.
Enviame email y te paso el archivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por Laura (8 intervenciones) el 30/07/2019 20:37:12
Buenas tardes Juan,

Te he enviado un correo a la dirección que aparece en tu comentario. Puedes pasarme el archivo a través de ese correo, muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por Antoni Masana (498 intervenciones) el 31/07/2019 07:04:10
Por favor Laura cuando tengas el código y comprobado que funciona publicalo que servirá de ayuda a todos.

Yo mismo estoy interesado en verlo.

Gracias.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por Laura (8 intervenciones) el 31/07/2019 08:15:45
Aún no he conseguido que funcione, porque soy bastante nueva en esto de las macros, por lo que sigo en ello, pero si alguien consigue alguna cosa nueva también agradecería que lo colgase por aquí.

Muchas gracias a todos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por Antoni Masana (498 intervenciones) el 31/07/2019 12:51:04
He estado mirando tu problema y tiene dos casuísticas diferentes.

AREA 1

Saber si un punto está dentro o fuera es bastante simple:
Esta dentro Punto_X >Min(AREA_X) y < Max(AREA_X) y Punto_Y es > Min(AREA_Y) y > (Max(AREA_Y)

Esto quiere decir que:
- el valor mínimo del AREA_X es 3 y el máximo 9
- el valor mínimo del AREA_Y es 4 y el máximo 10
Por consiguiente el punto X=4 , Y=9 cumple esta regla.
Ahora solo falta definir los que estan encima de la linea, ejemplo punto X=4 , Y=10, están dentro o fuera

AREA 2

Esta es más complicado porque los margenes no son verticales u horizontales y hay que crear una fórmula para cada línea para saber si el punto esta por encima o por debajo, a la derecha o a la izquierda de la línea imaginaria que debemos calcular.

Una de las lineas
1
2
3
4
5
6
Eje_X  Eje_Y
 10      3
 11     ¿?
 12     ¿?
 13     ¿?
 14      8

¿cuanto vales los puntos intermedios? No son valores enteros

Adjunto una tabla que he realizado para saber que puntos están dentro y fuera del área 2.

Ahora hace falta una fórmula que sea capaz de hacer lo que he realizado a mano. y para ello se necesita una ecuación que genera una gráfica lineal a partir de dos puntos.

Yo ahora no las recuerdo porque hace mucho que no lo toco, quizas esto te ayude a refrescar las ideas.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por Antoni Masana (498 intervenciones) el 31/07/2019 13:35:56
Ya lo recuerdo, lo que se tiene que usar es trigonometría, exactamente las TANGENTES.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por JuanC (565 intervenciones) el 01/08/2019 15:52:45
Hola Antoni, te dejo un link para que descargues el archivo con lo que hice (una versión corregida y mejorada de la original)

https://www.sendspace.com/file/12g3h5

Saludos, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por Antoni Masana (498 intervenciones) el 01/08/2019 19:00:08
He estado pensando en este problema y he visto que hay cuatro tipos de figuras con tres tipos de problemas diferentes y soluciones diferentes.

El primer caso el cuadrado o rectángulo que tiene dos las líneas horizontales y verticales y paralelas.
1
2
3
+---+
|   |
+---+

El segundo solo tiene dos lados verticales u horizontales y paralelos
1
2
3
4
5
6
7
8
9
+--+
|  |
|  /
| /
+
o
+-+
| \
+--+

El tercero es el robo regular o irregular
1
2
3
4
5
---
 +
/ \
\ /
 +

Y por último esta la flecha esta es un dolor de cabeza.

El primero es muy fácil de resolver. No lo voy a explicar porque creo que todos lo tenemos claro

El segundo es la mitad como el primero y la otra mitad como el tercero.

El tercero es un poco liado y hay que tener muy claro que se está haciendo porque después será muy complicado de resolver un error.

Para poner en antecedentes hay que abrir el fichero que envío Laura al principio de este post.

Voy a tomar la figura ROJA que tiene 4 lados y voy a examinar el lado inferir derecho.

Este lado va del ponto X=10 - Y=3 hasta el punto X=14 - Y=8, para solucionar este problema tenemos que saber por dónde pasa la línea y para ello vamos a hacer una tabla solo de este tramo

1
2
3
4
5
6
7
X    Y
--  --
10   3
11   ?
12   ?
13   ?
14   8

¿Que vale Y en estos puntos? Vamos a tomar el triangulo formado por los puntos X/Y= 10/3 - 14/3 - 14/8 y dos de ellos coinciden con la línea roja, la cual a su vez es la hipotenusa del triángulo.

Voy a trabajar sobre el ángulo 10/3.

Y voy a utilizar TRIGONOMETRíA, como me interesa el valor de los catetos y se el valor de uno de ellos calculo el otro.

Vamos a utilizar la TANGENTE y recordemos que es Cateto Opuesto dividido por Cateto Continuo.

Para el triángulo grande el cateto opuesto es el lado vertical y vale: 8 - 3 = 5 y el cateto contiguo vale 14 - 10 = 4.

Tenemos esto:
1
2
3
C.O.   5
      --- = 1.25
C.C.   4

Por lo que podemos decir que:
5 = 1.25 * 4

Ahora recortamos un poco el cateto continuo:
3 * 1.25 = 3.75
Si a esto le sumamos los tres puntos que hemos quitado antes cuando X = 13 las Y = 6.75


Ahora recortamos un poco el cateto continuo:
2 * 1.25 = 2.50
Si a esto le sumamos los tres puntos que hemos quitado antes cuando X = 12 las Y = 5.50

Ahora recortamos un poco el cateto continuo:
1 * 1.25 = 1.25

Si a esto le sumamos los tres puntos que hemos quitado antes cuando X = 11 las Y = 4.25
Y ahora relleno la tabla anterior con los valores que faltan

1
2
3
4
5
6
7
X    Y
--  --
10   3
11   4.25
12   5.50
13   6.75
14   8

Bien pues hay que hacer lo mismo con los otros tres lados y después con estos número resolvemos el siguiente paso.

No se si toda esta explicación se entiende, pero es el primer paso para resolver el problema.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro VBA - Calcular, anotar resultado, borrar y calcular de nuevo

Publicado por Laura (8 intervenciones) el 06/08/2019 16:11:31
Hola a todos,

Respecto al comentario tan trigonométrico de Antoni, creo que no sería necesario analizar tan detenidamente la forma del polígono. Tan solo hay que conocer las ecuaciones de cada lado (si conoces las 4 coordenadas del polígono sus ecuaciones pueden deducirse), y teniendo esa ecuación pueden calcularse "puntos límite" con los que comparar el punto que se quiere analizar.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar