Necesito hacer un algoritmo de iteración en vb

5 envíos / 0 nuevos
Último envío
excel1977
Imagen de excel1977
Offline
última acción: Hace 1 año 12 meses
Nivel 1 - 200 puntos
alta: 19/11/2014 - 10:00
Puntos: 450
Necesito hacer un algoritmo de iteración en vb

Buenas a todos, bueno la cosa es complicada al menos para mi.

Necesito hacer un algoritmo en vb para un problema iterativo y no se por donde empezar, os comento.-

En el archivo adjunto tengo en la hoja ejercicios dos zonas , datos de entrada, donde selecciono a mano los datos con los que voy a trabajar y datos de salida que es el calculo de la hoja de excel.- Pues bien una vez que determino los valores de entrada seas cuales sean pasamos a datos de salida que es donde tengo el problema y os comento lo que me gustaría hacer.-

1) Intensidad (A) es mi primer parámetro a calcular I =((C5*1000)/(RAIZ(3)*C7*C6)) es un dato directo no hay problemas, ademas esto no lo necesito meter en vb.-

2) Valor Calculado Sección ( mm2 ) =10^5*C5*C9/(C11*C8*C7^2) es el tercer parámetro tambien directo, ni siquiera necesito que aparezca en la hoja de excel pero este valor me sirve para encontrar el siguiente igual o mayor a el en las tablas que tengo en la hoja tablas.- Osea que si me sale 83.7 como es el caso, me tengo que ir a losdatos de entrada y ver el tipo de coincidencia que tengo que buscar el las tablas en este caso , tipo de cable Cu, Sistema de montaje D, aislamiento y nº de cables PVC3, si miro en la hoja tablas y busco estas coincidencias veo que el siguiente igual o mayor es la sección 95 pintada en gris y la intensidad 170 por coincidencias de los datos de entrada.- Los datos de busqueda e la tabla variaran en función de los datos de entrada evidentemente.-

3) Sección ( mm2 ) e Intensidad Max. ( A ) = 95   170, es el segundo parametro de mi hoja y son los valores encontrados igual o el siguiente mayor al cálculo anterior de la sección.-

4) Temperatura real del cable ( ºC ) =40+(SI(O(C13="XLPE2";C13="XLPE3");90;SI(O(C13="PVC2";C13="PVC3");70))-40)*((C19/D20)^2)  tambien es una fórmula directa en función del aislamiento del cable.-

5) Conductividad K a Tª real ( m/Ω mm2) es el quinto parámetreo de mi hoja =(BUSCARV(C10;datos!D7:E8;2;0))/(1+((BUSCARV(C10;datos!I7:J8;2;0))*(ejercicio!C22-20))) tambien es un paraámetro directo.

6) Comprobar sección ( mm2 ) =10^5*C5*C9/(C23*C8*C7^2) es mi sexto parámetro, y este es directo pero importante porque es aquí donde comparo para iterar o no.-

Si el valor de sección que me sale 103.96 es inferior al que he calculado " encontrado igual o siguiente mayor " en el parametro 2 de mi hoja Sección ( mm2 ) e Intensidad Max. ( A ) en mi caso 95, y ademas la intensidad calculada en este punto en mi caso 170 es mayor a la del parámetro 1, entonces mi comparación es válida y el cable me cumple por lo cual aquí termino el cálculo. En caso de que no me cumpla uno de los dos parámetros, entonces tengoque seleccionar el siguiente mayor en las tablas es decir pasaría de 95 a 120mm2 y de 170 a 192 amperios y volvería a repetir el cálculo anterior hata que se cumplan las dos condiciones anteriormrnte mencionadas.

En el caso de mi ejercicio con una iteración es suficiente, pero en otras ocasiones hay que hacer mas por eso quiero mecanizar esto mediante vb.

Otra cosa, en el caso de que al buscar el valor en las tablas igual o mayor bien en la primera iteración o en otra me salga fuera de la tabla, o sea que si pruebo por ejemplo en la tabla que estamos con el valor 300mm2 que es el mas grande y no me cumple, buscaría un valor mas grande que no hay, en este caso me tiene que salir un mensaje o algo que ponga mayor de 300 o de 240,  segun tabla utilizada.

Bueno no se si me e explicado bien, alguien puede ayudarme con esto.

 

Gracias y saludos.-

AdjuntoTamaño
File calculo.xlsx19.47 KB
pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 días 9 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11035
Si vas a iterar yo

Si vas a iterar yo organizaría los datos de la siguiente manera:

Calcularía los requerimientos estrictos (mm2, intensidad)

Luego pondría los valores que proporciona un tipo de  cable concreto de la tabla, y después las comprobaciones para ver si cumple o no cumple

La macro tendría que ir probando los distintos cables, de menor a mayor sección (o tal vez de menor a mayor precio, que no sé si será igual), hasta que encontrase  el primero que cumpla.

He modificado ligeramente tu presentación.

El valor que tendría que ir sustituyendo la macro será ese 95 que está en la celda recuadrada.

En esa celda no hay una fórmula, hay un valor numérico. La macro escribirá un valor ahí, la hoja de cálculo calculará si cumple o no.

Simplificando el modelo

¿cómo hacer ese bucle?

Bueno, puede ser un bucle que recorra las celdas en el rango de secciones de cables de Cu o de Al. Podría ser algo parecido a esto:

 

Const Título = "Ya sé Excel, pero necesito más"

Sub compruebadiametro()

'bueno, sólo compruebo diámetros de Cu, sería similar para el AL

Dim micelda As Range

   For Each micelda In Range("diametrosCu")

   ' se basa en que las recorre de arriba abajo

      Range("SeccionCablePropuesto").Value = micelda.Value

      If Range("CeldaComprobacion").Value Then

         'cumple

         Exit Sub

      End If

   Next

   'si llegamos aquí es que no lo encuentra

   MsgBox "Ningún diámetro cumple", vbOKOnly, Título

End Sub

 

Adjunto el archivo retocado, con un esqueleto de lo que podría ser


AdjuntoTamaño
File calculo.xlsm25.53 KB

 

------
Ya sé Excel, pero necesito más.

excel1977
Imagen de excel1977
Offline
última acción: Hace 1 año 12 meses
Nivel 1 - 200 puntos
alta: 19/11/2014 - 10:00
Puntos: 450
hay algo que no va bien

Buenas pacomegia, gracias por tu aporte, pero creo que hay algo que no va bien, te comento:

Si en C4 = 125, C12 = XLPE3 y los demás datos de entrada se pueden quedar como están, la solución para cumplir sería una sección de 120mm2 y una intensidad de 230A por lo que cumpliriamos con las dos condiciones, pero en tu ejemplo me busca el 240mm2 que son tres diámetros mayores???? y la verdad que no tengo ni idea de porque porque estoy super pegado de vb.  A ver si puedes echar un vistazo por favor y me comentas algo.-

 

Gracias

 

excel1977
Imagen de excel1977
Offline
última acción: Hace 1 año 12 meses
Nivel 1 - 200 puntos
alta: 19/11/2014 - 10:00
Puntos: 450
Si va Bien

Buenas de nuevo pacomegia me hice la picha un lio. Con la reorganización diferente y siendo el diámetro el valor propuesto si funciona perfectamente.

Pero me gustaría que la iteración fuera para calcular el diámetro del cable y no proponerlo. Te adjunto la siguiente tabla que hice y que aun no he terminado para que le eches un vistazo.

Gracias y saludos.-

AdjuntoTamaño
File calculo_de_cables_fin.xlsx286.37 KB
excel1977
Imagen de excel1977
Offline
última acción: Hace 1 año 12 meses
Nivel 1 - 200 puntos
alta: 19/11/2014 - 10:00
Puntos: 450
Ayuda

Alguien  me puede ayudar con esto pleaseeeee.