Cómo redactar un código que permita calcular valores

La presente porque quisiera solicitarles el favor de ayudarme con la siguiente inquietud. Pasa que estoy redactando un código en el cual ya le puse nombre a un rango de valores, pero ahora necesito calcular ciertos valores para una función que creé como usuario. El código es el siguiente:

For i = 1 To Datos
         For j = 1 To Entradas
               Range(Cells(1, 1), Cells(i, j)).Value = Rnd()
         Next
Next

Así como está funciona perfecto, pero tengo una función ya creada que es ésta:

Function Función_sigmoidal(x)
         Función_sigmoidal = 1 / (1 + Exp(x))
End Function

Mi pregunta es: ¿Cómo hago para que la macro calcule los valores con la función creada por mí y no con la función Rnd()?. En este caso, el valor x de la función sería cada uno de los valores del rango donde están almacenados o escritos los datos.

Respuesta
1

H o l a:

No entendí muy bien qué es lo que necesitas.

Si tienes un rango de celdas con datos y quieres pasar cada uno de esos datos por la función, ¿entonces dónde pondrías los resultados?

Tampoco entendí lo que pretendes con la primera macro, ejecuté la macro y lo que hace es poner el mismo valor random a todas las celdas; para eso no necesitas 2 ciclos, se puede hacer de esta forma

 Range(Cells(1, 1), Cells(datos, entradas)).Value = Rnd()

Entonces estoy confundido.

Podrías explicarlo con ejemplos y te ayudo con la macro.

Sal u dos

Buenas tardes Dante Amor

Muchas gracias por tu interés. Bueno, pues lo que estoy tratando de hacer es calcular una serie de valores con la función sigmoidal y efectivamente debe escribir el valor calculado en cada una de las celdas del rango Range especificado de la Hoja2. Se ejecuta bien con la función Rnd() pues está en el "catálogo" de Excel, pero no pasa lo mismo con la función que programé.

Quisiera pedirte el favor de sugerirme cómo puedo hacer para que la función que programé sea reconocida por Excel VBA y que tome como argumento los valores que están presentes en otra hoja de cálculo sin necesidad de usar Range(Cells(1,1),Cells(datos,entradas).Formula="=Función_sigmoidal(Hoja1!A1)". Te agradezco infinitamente tu valiosa ayuda.

Atentamente

Luz González

 H o l a:

Sigo sin entender lo que quieres.

Quieres poner la función Función_sigmoidal en una celda, algo como esto:

=Funcion_sigmoidal(D3)

Lo anterior significa que si en la celda, por ejemplo E3, pones la función =Funcion_sigmoidal(D3) Le estás pasando como parámetro el valor que tienes en la celda D3 y el resultado lo va a poner en la celda E3.

Para lo anterior tienes que poner lo siguiente:

Function Funcion_sigmoidal(x As Range)
    Funcion_sigmoidal = 1 / (1 + Exp(x.Value))
End Function


':)
S a l u d o s . D a n t e A m o r
':) Si es lo que necesitas. Recuerda valorar la respuesta. G r a c i a s.

Te agradezco mucho por la explicación, sí quiero hacer lo que planteas en la respuesta, pero a través de módulos de clase, de manera que no sea necesario colocar la formula en la celda, sino que en la celda correspondiente se copie automáticamente el valor calculado sin fórmula. Quisiera pedirte el favor de decirme de qué manera se podría hacer de modo que no se copien las fórmulas en las celdas, tal como ocurre Rnd(). Te agradezco infinitamente si puedes ayudarme.

Para dejar un valor en una celda no necesitas una función. Lo que necesitas es una macro.

Lo que tienes que hacer, regresando nuevamente al ejemplo. Poner un valor en la celda D3 y ejecutar la macro:

Sub Macro()
    Range("E3") = Funcion_sigmoidal(Range("D3"))
End Sub

La función seguiría siendo la misma:

Function Funcion_sigmoidal(x As Range)
    Funcion_sigmoidal = 1 / (1 + Exp(x.Value))
End Function

Pero si te das cuenta, en la macro le tienes que pasar un dato de una celda x y el resultado lo pones en una celda y.

No entiendo si lo que quieres es poner el resultado en la misma celda.

Eso significa que al ejecutar la macro la celda x tiene un valor y el resultado deberá sobreescribir lo que tiene la misma celda x. Entonces sería así:

Sub Macro()
    Range("E3") = Funcion_sigmoidal(Range("E3"))
End Sub

':)
S a l u d o s . D a n t e   A m o r
':) Si es lo que necesitas. Recuerda valorar la respuesta. G r a c i a s.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas