Convertir fórmulas de excel a código vba

Utilizo varias fórmulas en un formato de excel para buscar y mostrar información de personal buscando los datos con un ID único para cada persona, ahora estoy tratando de utilizar un userform para mostrar más fácilmente la información y lo que necesito es de alguna manera poder transferir las fórmulas de excel al código de vba para que al ingresar el código en un textbox efectúe el mismo procedimiento que en la hoja de calculo, busque los datos y los muestre en otros textbox específicos para cada dato, las fórmulas que más utilizo son indice/coincidir y min(si, max(si.

2 respuestas

Respuesta
1

La mejor manera de obtener el código VBA de una fórmula es mediante la grabadora de macros. Seguí estos pasos:

Encendé la grabadora de macros (desde el botón al pie de la hoja o desde el menú Macros)

Seleccioná la celda que tiene la fórmula y posicionate en la barra de fórmulas. Enter

Detené la grabadora.

Entrá al Editor con Alt y F11. En algún módulo encontrarás el código para esa celda con esa fórmula. Por ej para la fórmula de la celda E:

ActiveCell.FormulaR1C1 = _
"=INDEX('Control Rev.'!R17C2:R[18]C[-3],MATCH(Datos!R2C10,'Control Rev.'!R17C3:R[18]C[-2],0)+1)"

Si luego necesitas hacer variable algunos de los argumentos recordá de encerrar entre comillas dobles la parte 'fija' y entre signos & la parte variable.

Ej. en lugar de R[18] es decir a 18 filas de la fila activa podemos utilizar una variable:

ActiveCell.FormulaR1C1 = _

"=INDEX('Control Rev.'!R17C2:R["  & filx  & "]C[-3],MATCH(Datos!R2C10,'Control Rev.'!R17C3:R[18]C[-2],0)+1)"

Si te queda alguna duda podés solicitar más aclaraciones. Si está comprendido no olvides valorar la respuesta (excelente o buena) para darla por cerrada.

Gracias por tu respuesta Elsa, es lo que buscaba, adicionalmente, como puedo asignar el valor de respuesta de esta fórmula a un textbox, para que pueda mostrar en userform ya que son varios los resultados que debo mostrar de una sola búsqueda,

Gracias.

Si vas a utilizar la fórmula en una celda ya sabras de que cwlda se trata y el modo de pasarlo al textbox es:

Textbox = Cells(fila, col)

Donde fila es la de la fórmula y col según de que col necesites el dato.

Pero se me hace que no debieras colocar en una celda la fórmula para luego obtener los resultados... Sino directamente realizar la búsqueda.

No das ninguna idea de referencias ni nada por lo que no me puedo explayar demasiado. Te dejó un sencillo ejemplo de búsqueda, en este mismo foro podes utilizar el buscador ... Debo haber dejado cientos de instrucciones de este tipo.

Set busco= Sheets(hoja).Range(rango).Find(dato,lookin:= xlvalues, Lookat:= xlwhole)

If not busco is nothing Then

'Encontró el dato, guarda la fila

Filx= busco.row

Else

Msgbox "dato no encontrado"

End If

Y una vez que ya tenes ubicada la fila podrás completar los textbox con los datos de cad columna.

Como verás se necesitan más referencias y aclaraciones para enviarte una macro más precisa. Espero te sirva el ejemplo y los que seguramente encontrarás tambien en la seccion Ejemplos de mi sitio, sino aclara tu situación.

Sdos.

Elsa

http://aplicaexcel.galeon.com/macros.htm

Gracias por la respuesta, es cierto, no me explique adecuadamente, lo que tengo es un formato en excel para mostrar horas de entrada y salida del personal, utilizo tres archivos de excel, el primero que utilizo como plantilla para mostrar e imprimir los datos y donde están las formulas, el segundo donde almaceno la información de horas y fechas de entrada y salida, y el tercero donde esta la información de cada persona, para buscar los datos utilizo un ID único de cada persona, para buscar las horas por fecha utilizo las formulas MIN y MAX con la función SI para ubicar los valores por fecha y por hora,

aquí la funcion MIN para entrada y la función MAX para salida, SI(fecha=fecha) para complementarla,  para encontrar la información de personal utilizo la funciones INDICE y COINCIDIR, utilizando el código de la persona, sin embargo por la cantidad de información el reporte en excel ya no es muy practico, necesito utilizar algo un poco mas visual y fácil de utilizar para quien no este familiarizado con el procedimiento  

y por eso quiero trasladar los reportes a formularios VB, pero no conozco mucho de programación, aunque buscando información he logrado modificar algunos formularios pero no se como ejecutar las funciones de las formulas dentro de la programación del formulario, para no tener que utilizarlas en excel para luego mostrarlas en algún textbox, que inicialmente era mi idea, pero si es posible ejecutar las búsquedas directamente del formulario seria mejor, adjunto algunas imágenes para ilustrar mejor lo que necesito.

muchas gracias por la ayuda

Como bien dices, inicialmente tu idea fue convertir las fórmulas en vba para luego mostrarlas en un textbox... y así te lo respondí correctamente.

Como ahora ya necesitas una búsqueda por diferentes criterios es otro tema y te solicitaré que dejes una nueva consulta en el tablón con su título correspondiente. Valora lo hecho hasta aquí y luego con mucho gusto me dedicaré a lo nuevo.

Sdos!

Al final de este mensaje encontrarás un cuadro para seleccionar bueno o Excelente. Así cerraremos esta consulta para que puedas dejar otra nueva en el tablón y ya nos dedicaremos al nuevo tema.

Sdos!

Respuesta

Por lo general en las macros las fórmulas como max, min, promedio o suma: se mandan llamar así

sumar=worksheetfunction.sum(rango)

prom=worksheetfunction.average(rango)

mini=worksheetfunction.min(rango)

maxi=worksheetfunction.max(rango)

cuentasi=worksheetfunction.countif(rango,"=" & valor)

para determinar el rango por lo general en programacion avanzada se usa

set area=range(celda inicial).currentregion, luego si trae encabezados estos se descartan con 

set area=rango.offset(1,0).resize(area.rows.count-1,area.columns.count)

Y luego rango puede ser columna o fila

Por ejemplo si los datos que vamos a sumar están en la columna 3

En el userform quedaría así

sumar=worksheetfunction.sum(rango.columns(3) y para pasarla a un textbox solo resta poner textbox1.text=sumar

Espeto te sea de ayuda esta respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas