¿Cómo hacer una macro para este algoritmo?

Soy un estudiante de física, y necesito con bastante urgencia que me resolváis un problema que tengo. No sé si va en esta sección, pero os lo planteo.

Necesito realizar una macro para unos archivos excel de varias columnas. La macro me gustaría que reprodujera el siguiente algoritmo:

CFI, x Stdev LDR, y Octas

x=<1 y=<0.5 0

x=<1 0.5<y=<2 1

x=<1 y>2 2

1<x=<1+az y=<1 1

1<x=<1+az 1<y=<2 2

1<x=<1+az y>2 3

1+az<x=<1+bz y=<1 2

1+az<x=<1+bz y>1 4

1+bz<x=<1+cz y=<4 5

1+bz<x=<1+cz y>4 6

x>1+cz y>8 6

x>1+cz 2<y=<8 7

x>1+cz y=<2 8

El CFI, x iría en la primera columna; el Stdev LDR, y, en la segunda; el límite 1+az, en la tercera; el límite 1+bz, en la cuarta; el límite 1+cz, en la quinta; y lo que quiero obtener finalmente, Octas, en la sexta. Tengo que decir que soy completamente novato en macros y Visual Basic, así que me haríais un gran favor si alguien me la pudiera hacer y explicar cómo se utilizaría, ya que me es de vital importancia, ya que estoy finalizando mi proyecto final de carrera.

1 Respuesta

Respuesta
1
Supongo que no sabrás donde poner la función para que te salga en el excel.
Yo uso el excel 2007, en esta y supongo que en las posteriores tambien
Hay un botón a la izquierda arriba del todo, es como el menú archivo, 
donde creas un nuevo libro, abres un libro, etc
Dentro del menú abajo pone Opciones de Excel, lo señalas.
Vas a Personalizar, te salen los botones de la barra de herramientas que hay.
En el 1er combo te pondrá Comandos más utilizados, señalas la flecha que hay
y verás un listado, justo por en medio verás que pone Ficha Programador
Te han cambiado los botones que tenías antes y te ha puesto los botones que más usarias 
para programar macros, señala el de visual Basic y dale al botón Agregar.
Ya tienes el botón visual Basic en la barra de herramientas, haces click
Seguramente tendrás el EuroTool (EUROTOOL.XLAM) o puede que no
Tu libro se muestra como VBAProject( Nombre de tu libro excel)
Tendra las diferentes hojas y una parte que pondra ThisWorkbook, 
es para hacer macros con el libro de excel, como que en vez de que te salgan las hojas 
estén protegidas y te salga un formulario y que la gente no vea los datos.
Señalas la parte de VBAProject ( nombre de tu libro excel), le das al botón derecho
señalas insertar y Módulo, te saldrá como una hoja en blanco.
En esa hoja en blanco has de pegar el código que hay más abajo, para que te salgan 
las funciones que hayas hecho tu.
Entonces te pones en la celda donde quieres el número de Octas, pones =Oct 
y te saldrán las 2 funciones.
Si haces click en el botón de fx, en la barra de funciones, 
las funciones están abajo del todo donde pone Definidas por el usuario.
Si tienes dudas me envías un toque
---------------------------------------------------------------------------
Public Function Octas(x As Double, y As Double, az As Double, bz As Double, cz As Double) As Integer
' No se hasta que punto eres completamente novato
' lo que escribes después del apóstrofe indica que es un un comentario y no afecta a la función
' La x,y,az,bz y cz son variables
' el As Double que hay después de ellas indica que es un numero que usa decimales
' el Integer sería un numero entero sin decimales
    Dim valorX As Integer '<--- Esto es una variable
    If (x <= 1) Then valorX = 1
    If ((x > 1) And (x <= (1 + az))) Then valorX = 2
    If ((x > (1 + az)) And (x <= (1 + bz))) Then valorX = 3
    If (x > (1 + cz)) Then valorX = 4
 'Esto sirve para que según el valor de la variable valorX
'haga tal cosa u otra
    Select Case (valorX)
        Case (1):
            If (y <= 0.5) Then Octas = 0
' Esto se leeria, estamos en el 1, que significa que x<=1, por los ifs de arriba
' entonces si (x<=1) y si (y<=0.5) entonces Octas=0
' Octas es el nombre de la funcion, como es una funcion has de devolver un algo
' al final de Public Function Octas, ves que pone Double) as Integer
' eso significa que la funcion devuelve un numero entero, un numero del (-32767 al 32767)
            If ((y > 0.5) And (y <= 2)) Then Octas = 1
            If (y > 2) Then Octas = 2
        Case (2):
            If (y <= 1) Then Octas = 1
            If ((y > 1) And (y <= 2)) Then Octas = 2
            If (y > 2) Then Octas = 3
        Case (3):
            If (y <= 1) Then Octas = 2
'-------------------PROBLEMA-----------------
 ' Si y es 3 pondra octas 4 porque 3 es mayor que 1
            If (y > 1) Then Octas = 4
 ' Despues viene aqui y pone octas 5 porque 3 es menor de 4
            If (y <= 4) Then Octas = 5
 '--------------------------------------------
            If (y > 4) Then Octas = 6
        Case (4):
            If (y <= 2) Then Octas = 8
            If ((y > 2) And (y <= 8)) Then Octas = 7
           If (y > 8) Then Octas = 6
     End Select
End Function
' Otra forma de hacer todo esto sería, la forma más fácil
 Public Function Octas2(x As Double, y As Double, az As Double, bz As Double, cz As Double) As Integer
' Esto es más corto si tienes pocos datos, usa la forma que quieras
    If ((x <= 1) And (y <= 0.5)) Then Octas = 0
' Se leeria Si x es menor o igual a 1 e y es menor o igual a 0.5 entonces Octas es 0
     If ((x <= 1) And (y > 0.5) And (y <= 2)) Then Octas = 1
     If ((x <= 1) And (y > 2)) Then Octas = 2
     If ((x > 1) And (x <= (1 + az)) And (y <= 1)) Then Octas = 1
     If ((x > 1) And (x <= (1 + az)) And (y > 1) And (y <= 2)) Then Octas = 2
     If ((x > 1) And (x <= (1 + az)) And (y > 2)) Then Octas = 3
     If ((x > (1 + az)) And (x <= (1 + bz)) And (y <= 1)) Then Octas = 2
'----------------------HAY PROBLEMA AQUI CUANDO Y=3---------------
     If ((x > (1 + az)) And (x <= (1 + bz)) And (y > 1)) Then Octas = 4
     If ((x > (1 + az)) And (x <= (1 + bz)) And (y <= 4)) Then Octas = 5
'--------------------------------------------------------------
     If ((x > (1 + az)) And (x <= (1 + bz)) And (y > 4)) Then Octas = 6
     If ((x > (1 + cz)) And (y <= 2)) Then Octas = 8
     If ((x > (1 + cz)) And (y > 2) And (y <= 8)) Then Octas = 7
     If ((x > (1 + cz)) And (y > 8)) Then Octas = 6
End Function

Muchas gracias por la molestia, me ha sido muy útil. Además, me sirve para el futuro por si quiero hacer una macro por mí mismo. Sí que he llegado a programar en C++ y MATLAB, al principio de mi carrera (hace cuatro años), y ya no me acordaba de nada, pero nunca en Visual Basic y macros en excel.

Lo dicho, muchas gracias.

Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas