¿Cómo se utilizan las funciones en excel?

Respuesta de
Usuario
Estimado Hugolaza buen día!
¿Quería preguntarte, como trabajan las funciones en excel... los códigos se escriben en los módulos o en las hojas?, y si por ejemplo realizo un código, cómo haría para llamarla desde excel, una vez hice un ejemplo sencillo, así como la macro que sumaba dos numero en la hoja 1 y automáticamente se multiplicaban en la hoja 2, ahora con funciones alguien me dijo que puedo llamarle desde una celda, ej. realizo la function prueba() la cual suma dos números de la celda A1 y A2 (números introducidos por teclado) de la Hoja 1, y que se suman automáticamente en la celda B5 de la Hoja 2.
¿Es posible llamar a la función PRUEBA escribiendo algo en la celda B5? Pero que se sume automáticamente cuando se vayan cambiando los valores de A1 y A2 de la Hoja 1
Espero haya sido claro
Experto
Buen día,
Los códigos de visual basic (macros) se escriben en los módulos y se "llaman" (ejecutan) con :
Alt-F8 - seleccionar "nombre del macro" - Ejecutar
Las funciones no son macros. Funciones son determinados cálculos programados por el usuario.
Un Macro sencillo para sumar dos números de una hoja distinta seria :
Sub SumaCeldas()
    Sheets("Hoja2").Range("A1") = Sheets("Hoja1").Range("A1") + _
    Sheets("Hoja1").Range("A2")
End Sub
Copia esta rutina en una hoja de código de Visual Basic y ejecutala así:
Alt-F8   -   seleccionar "SumaCeldas"   -  Ejecutar
Si observas el código, este te dice que "En la hoja2, celda A1, coloca la suma de las celdas en Hoja1 celda A1 + Hoja1 celda A2"
Aunque seria mucho más simple color enla celda a1 de la Hoja2 :
=Hoja1!A1+Hoja1!A2
Saludos
Usuario
Gracias por tu aclaración, está muy comprendible, pero mi duda es la siguiente: tengo un archivo de excel donde hay celdas en las que están escritas por ejemplo las siguientes fórmula: =func! 32 y esta función da como resultado un valor determinado según vayamos introduciendo datos numéricos en otra hoja, osea que el resultado nos da en la celda que nosotros escribimos esta fórmula (=func! 32) sé que esta referencia es igual o parecida cuando llamas de otra hoja, necesito hacer lo mismo... pero no sé como operan
Si yo creo una función en un modulo cualquiera que sea la operación que yo le indique, ¿cómo hago para que el resultado me salga en la celda de cualquier hoja, y que a medida que vaya introduciendo o cambiando datos, en otra hoja me salga los resultados automáticamente? Hay alguna forma de hacer eso, ¿qué me evite estar ejecutándola cada vez que cambien o introduzca un dato?
 
Experto
Hola,
Tu pregunta es un tanto confusa.
La formula =func! 32 no parece tener una sintaxis correcta.
Si la fórmula fuera =func!A32, entonces significa que esta "jalando" el valor de la celda A32 que se encuentra en la hoja "func".
No comprendo cuando dices "sé que esta referencia es igual o parecida cuando llamas de otra hoja". No será que te refieres a otro libro.?
Si el caso fuera que quieres llamar a esta fórmula desde otro libro, la fórmula seria así :
=[nombre del libro donde se encuentar la formula]fun!A32
Ejemplo : =[Libro1.xls]Hoja3!$D$3
Saludos

Usuario
Buenas gracias por atender mi consulta, aunque no se formularla bien:
Lo que pasa es lo siguiente, yo se que cuando se llama el resultado de otra hoja, su sintaxis es por ejemplo Hoja2!D5, ¿Lo qué quiero sabes es si yo realizo una función (lineas de código) puedo llamar el resultado si escribo cierta fórmula en la celda que quiera que me jale el resultado?
Gracias
 
Experto
Hola,
Podrías enviarme tu proyecto, ¿con una breve explicación de lo que quieres hacer en el?
Saludos
Usuario
Hola hugo laza gracias por atender mi consulta y me disculpo si te estoy haciendo renegar:
Te explico: mi intención es aprender Macros y funciones, en otras palabras programar en vb, porque en mi trabajo tenemos unos archivos en excel que realiza operaciones de todo tipo, y ya no nos sirve porque las operaciones cambiaron, así que yo tengo que hacer uno nuevo o por lo menos esa es mi meta.
Poco a Poco estoy intentando realizar macros haciendo pequeñas programaciones con operaciones sencillas como la que me explicaste la sumas dos números etc. etc.
Pero aun esos ejemplos sencillos me cuesta ubicar los resultados en la cierta celda, mira nosotros "Introducimos" muchos datos en una "hoja principal", como ser (nombre de la empresa, fecha de apertura de la misma, fecha de cierre, Ingresos, Egresos etc. etc:)
Y esos datos "dependiendo" que función cumplen, nos dan un resultado en cierta casilla de otra hoja, la que se procesa automáticamente cuando nosotros introducimos los datos.
Por eso te pedía que me explicaras un ej: sencillo de la suma de 2 números, que las introduzco en las casilla A1 y A2 de la Hoja1, y que automáticamente el resultado me salga en una Casilla de la Hoja 2 q yo escoja. Y q me explicaras cada linea para comprender como trabajan las lineas de código, para q luego pueda yo hacer otro tipo de operaciones.
¿Cómo te mando el proyecto es de 16Mb? Necesito tu correo, ¿me lo puedes dar?
Experto
A ver,
En una hoja en blanco escribe :
celda A1=50
celda B1=100
1. Presiona Alt-F11 para abrir el editor de Visual Basic
2. En el Explorador de Proyectos (habitualmente a la izquierda de tu pantalla), veras las hojas de tu libro actual, algo así como :
Hoja1(Hoja1)
Hoja2(Hoja2)
Hoja3(Hoja3)
ThisWorkbook
Haz dbl-click donde dice Hoja1(Hoja1). Aparecera la hoja de codigos de la Hoja1. Aqui debes copiar el siguiente código :
Private Sub Worksheet_Change(ByVal Target As Range)   'Esta linea detecta cualquier cambio en la hoja1
    If Target.Address = "$A$1" Or Target.Address = "$A$2" Then  ' Esta linea confirma que el cambio se haya dado o en la celda A1 o en la celda A2. De ser asi, ejecuta la siguiente linea.
        Sheets("Hoja2").Range("B5") = Range("A1") * Range("A2") ' Esta linea multiplica la celda A1 * A2 y coloca el resultado en la celda B5 de la Hoja2
    End If  ' Final de la condicion Target.Address
End Sub ' Final de la rutina
Esta rutina funciona, aun así en las celdas A1 o A2 exista valores numéricos, fórmulas o funciones.
Saludos
Usuario
Gracias funciona a la perfección espero que a partir de ahí pueda hacer otras operaciones más grandes.
Ahora tengo un problemas más complicado:
En una hoja1: tengo una lista de diferentes Nombres en los rangos (M2:M50), y para la celda A2 seleccioné EN EL MENÚ (DATOS/VALIDACIÓN DE DATOS/LISTA) al cual le dí el rango de la lista que es (M2:M50), entonces en esa celda me sale una pestañita donde puedo "seleccionar" cualquier Nombre de la lista de (M2:M50).
Lo mismo hago pra la celda A3, y así yo puedo tener una lista de los nombres que yo escoja A2, A3, A4 etc..
Y esos nombres escojidos de las celdas A2, A3, A4,... etc, se van acomodando en un rango horizontal de la Hoja2, ejemplo: (Hoja1, Celda A2) el nombre se va a (Hoja2, Celda B2);(Hoja1, Celda A3) el nombre se va a (Hoja2, Celda C2);(Hoja1, Celda A4) el nombre se va a (Hoja2, Celda D2). Espero que me hayas entendido el procedimiento.
Pero mi problema es este, si por ejemplo A5, A6 y A7 están "vacios", o no escojo ningún nombre, como hago para que en la hoja2 se vayan acomodando de forma seguida, que no quede la columna vacía que le correspondía a A5, A6 y A7.
Espero la pregunta haya sido clara, pliase una ayudita con este problemita
 
Experto
Hola,
Cuantas celdas de la columna A las tienes validadas. A2, A3, A4... ¿Hasta dónde?
Saludos
Usuario
Hola gracias por responder:
El Rango de la columna A es (A2:A50). En Base a la lista de la Columna A, que yo vaya escogiendo con la pestañita de la lista, quiero que se vayan acomodando en forma continua, en la Hoja 2, Pero de forma Horizontal, pero si yo escogiera un espacio vacío en medio de mi lista, en la Hoja 2, también se pone Vacía la Columna, y yo quiero suprimir ese vacío, Por ejemplo:
(Hoja1) A2=Nombre1......se va a.........(Hoja2) B2=Nombre1
(Hoja1) A3=Nombre2.....se va a......(Hoja2) C2=Nombre2
(Hoja1) A4="VACIO"......se va a ......(Hoja2)D2="VACIO"
(Hoja1) A5="VACIO".....se va a .....(Hoja2) E2="VACIO"
 (Hoja1)A5=Nombre3.....se va a ....(Hoja2) F3=Nombre3
Más o menos ese es el procedimiento que cumple, lo que yo quiero es que en la Fila Horizontal de la Hoja2 donde se van almacenando los nombres, se vaya acomodando de forma seguida, en este caso los 3 nombre, en B2, C2 y D2, será posible eso, sin importar que tan esporádicamente se selecciones los nombres de la lista. Pero en la Hoja 2 se vayan acomodando de forma continua.
Gracias por tu ayuda...
 
 
Experto
Hola,
Coloca esta rutina en la hoja de códigos de Hoja1(Hoja1) en el Editor de Visual basic :
Private Sub Worksheet_Deactivate()
Sheets("Hoja2").Rows("2:2").ClearContents
For a = 1 To 51
    If Range("A1").Offset(a, 0) <> "" Then
        b = b + 1
        Sheets("Hoja2").Range("A2").Offset(0, b) = Range("A1").Offset(a, 0)
    End If
Next a
End Sub
Saludos
Usuario
Funciona muy bien, gracias por tu ayuda, eres genial
ahh! Un favor, me podrías recomendar algún libro o tutorial, ¿para qué pueda ir aprendiendo por mi cuenta? Un saludo y nuevamente muchas gracias