Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Por Moiss Ortz el 26 de febrero del 2013 Generalmente recomiendo consolidar los datos en una sola hoja de Excel antes de utilizar la funcin BUSCARV, pero si por alguna razn esto no es posible y necesitas utilizar la funcin BUSCARV en varias hojas de Excel, entonces considera alguna de las alternativas que mostrar en este artculo.
Como sabemos, la funcin BUSCARV devuelve el error #N/A cuando no encuentra el valor que se est buscando, es por eso que la primer solucin propuesta es la siguiente: Utilizar la funcin BUSCARV en la primera hoja, si obtenemos un error, entonces buscar en la segunda hoja. Si volvemos a obtener un error, entonces buscamos en la tercera hoja y as sucesivamente.
La funcin SI.ERROR
Para saber si la funcin BUSCARV ha devuelto un error podemos utilizar la funcin SI.ERROR que est disponible desde la versin de Excel 2007. El primer argumento de la funcin SI.ERROR es el valor que ser evaluado y su segundo argumento es la accin a tomar en caso de obtener un error. Si deseamos realizar la bsqueda en dos hojas, entonces nuestra implementacin seguir la siguiente lgica:
Esta no es la sintaxis de la frmula, solo estoy ilustrando que el primer argumento de la funcin SI.ERROR ser la bsqueda sobre la primera hoja y como segundo argumento haremos la bsqueda sobre la segunda hoja. El segundo argumento solo ser ejecutado en caso de que la primera bsqueda resulte en error. Si en lugar de realizar la bsqueda sobre dos hojas necesitamos buscar en tres hojas, entonces necesitamos saber si la bsqueda sobre la segunda hoja nos devuelve un error y para eso volvemos a utilizar la funcin SI.ERROR lo cual nos lleva a tener una anidacin de funciones de la siguiente manera:
Ahora hagamos un ejemplo para probar que nuestra lgica de solucin propuesta funciona correctamente al buscar en varias hojas.
Como primer ejemplo haremos una bsqueda sobre las primeras dos tablas. En una nueva hoja realizar la bsqueda del ttulo de un libro en base a su cdigo el cual colocar en la celda B1 y para ello utilizar la siguiente frmula:
=SI.ERROR(BUSCARV(B1,Hoja1!A2:B6,2,FALSO), BUSCARV(B1,Hoja2!A2:B6,2,FALSO))
Lo ms importante a resaltar de esta frmula es el rango de bsqueda especificado en ambas funciones BUSCARV. En ambas funciones hago la referencia precisa hacia la hoja donde deseo que se realice la bsqueda. Observa el resultado obtenido al aplicar esta frmula a los datos:
Si por el contrario busco un cdigo de producto que no existe en ninguna de las primeras dos tablas, entonces obtendr como resultado el error #N/A:
Ahora consideremos en nuestra bsqueda la informacin de la tercera hoja la cual contiene ms cdigos de producto. Para ampliar nuestra bsqueda a esa tercera hoja debo utilizar de nueva cuenta la funcin SI.ERROR como parte del segundo argumento de la primera funcin SI.ERROR de la siguiente manera:
=SI.ERROR(BUSCARV(B1,Hoja1!A2:B6,2,FALSO), SI.ERROR(BUSCARV(B1,Hoja2!A2:B6,2,FALSO), BUSCARV(B1,Hoja3!A2:B6,2,FALSO)))
Con esta modificacin nuestra bsqueda se extiende a la tercera hoja y podremos saber si el cdigo de producto buscado se encuentra en ella:
Si quisiramos incluir una cuarta hoja en la bsqueda solo debemos utilizar de nueva cuenta la funcin SI.ERROR para validar los resultados de la tercera hoja y en caso de obtener un error volver a buscar en la cuarta hoja. Como sabemos, Excel 2007 y 2010 nos permiten anidar hasta 64 funciones por lo que ese sera el mximo de hojas que podramos incluir utilizando este mtodo. Sin embargo, no te recomiendo llegar hasta ese lmite ya que con solo agregar una o dos funciones anidadas ms a nuestro ejemplo la frmula incrementara su complejidad y cada vez se volvera ms difcil descubrir cualquier error. En caso de que necesites hacer bsquedas sobre una gran cantidad de hojas te recomiendo utilizar una macro ya que eso evitar la elaboracin de una frmula ms compleja.
La segunda alternativa que tenemos para buscar en varias hojas de Excel es utilizar una funcin definida por el usuario. Solo debemos ejecutar la funcin VLOOKUP (BUSCARV) en cada una de las hojas del libro sobre el rango especificado: 1 2 3 Function BUSCARVMultiple(Valor_buscado As Variant, Matriz_buscar_en As Range, _ 4 Indicador_columnas As Integer, Optional Ordenado As Boolean) 5 On Error Resume Next 6 For Each Hoja In ActiveWorkbook.Worksheets 7 Matriz = Hoja.Range(Matriz_buscar_en.Address) 8 Encontrado = WorksheetFunction.VLookup _ 9 (Valor_buscado, Matriz, _ 10 Indicador_columnas, Ordenado) 11 If Not IsEmpty(Encontrado) Then Exit For 12 Next Hoja 13 Set Matriz = Nothing 14 BUSCARVMultiple = Encontrado 15 End Function 16 17 18 A continuacin har una explicacin breve de este cdigo. Los argumentos de la funcin BUSCARVMultiple son los mismos argumentos que utiliza la funcin BUSCARV comenzando por el valor buscado, la matriz de bsqueda, la columna que deseamos como resultado y finalmente el argumento ordenado. En la lnea 6 del cdigo se inicia el recorrido por cada una de las hojas del libro y en la lnea 7 obtenemos la direccin del rango sobre el cual se realizar la bsqueda. De inmediato ejecutamos la funcin VLOOKUP con los argumentos correspondientes y almacenamos el resultado en la variable Encontrado. Es importante recordar que en VBA las funciones de Excel deben ser invocadas por su nombre en ingls y por esa razn usamos la instruccin WorksheetFunction.VLookup. Finalmente en la lnea 12 validamos si la variable Encontrado tiene algn valor. Si la variable no est vaca quiere decir que la funcin VLOOKUP encontr un resultado y por lo tanto terminamos la bsqueda. De lo contrario el ciclo se vuelve a repetir y continuamos la bsqueda en la siguiente hoja del libro. En la siguiente imagen puedes observar que la funcin recin implementada nos devuelve el mismo resultado que nuestra solucin anterior la cual utilizaba funciones de Excel:
Ahora ya conoces dos posibles soluciones para aquellos casos en los que necesites utilizar la funcin BUSCARV en varias hojas de Excel. Descarga el libro de trabajo que contiene la alternativa de solucin utilizando funciones de Excel, as como la alternativa de solucin utilizando la macro y contina experimentando con el ejemplo. Artculos relacionados Funcin BUSCARV con datos de otra hoja
Si deseo conocer las ventas del libro Excel en 24 Horas para el mes de Marzo puedo utilizar la siguiente frmula:
=BUSCARV("Excel en 24 horas", A5:F14, 4, FALSO)
La frmula me da el resultado correcto, pero Qu sucede si ahora necesito las ventas del mes de Enero? Y despus las ventas del mes de Febrero?
Para este ejemplo he colocado la lista de validacin en la celda B1. Para poder utilizar esta lista dentro de la funcin BUSCARV debo utilizar la funcin COINCIDIR la cual buscar el valor seleccionado en la lista y lo comparar con la matriz A4:F4.
Observa que he remplazado el tercer argumento de la funcin BUSCARV con la funcin COINCIDIR de la siguiente manera: COINCIDIR(B1, A4:F4, 0) . El resultado de la funcin COINCIDIR me dar el nmero de columna que corresponde al mes seleccionado en la lista de la celda B1.
De esta manera al seleccionar un valor diferente de cualquiera de las listas obtendremos el resultado correspondiente obtenido por la funcin BUSCARV. Si lo deseas puedes descargar el libro de trabajo. Artculos relacionados La funcin BUSCARV en Excel
DinamicasTablas/ListasTipsValidacion de DatosVarios
Cuando Excel no logra resolver una funcin, da como resultado #N/A (del ingls: not available). Hay situaciones en las cuales este resultado es aceptable, es decir, no hay solucin, pero no quisiramos que aparezca en la planilla. Hay varias formas de evitar que este resultado sea visible. Una de ellas ya la he mostrado en esta nota. Sencillamente seleccionamos los resultados #N/A con Ir A Especial, y borramos el contenido de las celdas seleccionados (Ctrl + Enter).
Otra forma es construir nuestra frmula de tal manera que Excel no d como resultado #N/A.
Veamos este ejemplo. Tenemos aqu dos listas, una con todos los nombres y una segunda con algunos nombres de los cuales queremos averiguar la edad
Si aplicamos la funcin BUSCARV (VLOOKUP) en nuestra frmula, obtendremos dos valores #N/A en la tabla 2
Como comentario aparte, pueden ver que he utilizado un nombre (Lista_1) para sealar el rango de bsqueda. Siempre recomiendo esta tcnica, como ya lo he hecho en esta nota. Volviendo a nuestro tema, como podemos evitar estos resultados?
A la frmula =BUSCARV(D3,Lista_1,2,0) le agregamos una condicin, tal que si el resultado esperado es #N/A, la frmula d como resultado un blanco. Rescribimos nuestra frmula de esta manera:
=SI(ESERROR(BUSCARV(D8,Lista_1,2,0))," ",BUSCARV(D8,Lista_1,2,0))
Nuestra
frmula
funciona
de
la
siguiente
manera:
La funcin SI (If en la versin inglesa) evala en primer lugar el resultado de la funcin ESERROR (IsError) cuya variable es la bsqueda que queremos realizar. Si el resultado es positivo, es decir el resultado ser #N/A, la funcin SI dar un resulta en blanco (sealado por " "). En caso contrario dar el resultado de la bsqueda BUSCARV(D8,Lista_1,2,0). Esta tcnica es til, por supuesto, en cualquier otra frmula que use funciones de Excel.
En ocasiones necesitamos eliminar en Excel aquellas filas vacas que se encuentran en nuestros listados de productos, personas, etc. Muchas veces debemos eliminar algn dato de nuestras hojas de clculo, quedando una fila vaca, la cual tenemos que buscar manualmente y eliminar manualmente algo que no ser muy cmo si se trata de listados grandes. Pues bien, este proceso lo podemos hacer de forma automtica, mediante una Macro, quien se encargara de revisar las filas que se encuentren vacas y proceder a eliminarlas. Para ello vamos a la barra de herramientas, elegimos Macro, Editor de Visual Basic.
Una vez tengamos el editor de visual abierto, vamos al men Insertar y elegimos Insertar modulo, y all pegamos el siguiente cdigo:
Sub eliminarfilavacia() For fila = 1 To 65536 If Cells(fila, 4).Value = "0" Then Rows(fila).Delete End If Next fila End Sub
Luego le damos guardar en la barra de men o presionamos las teclas Ctrl + S Ya tenemos nuestra aplicacin para que haga el trabajo por nosotros. Para ejecutar la macro o iniciar el proceso, vamos al men Herramientas, elegimos Macro, Macros. All nos aparece el listado de macros que tenemos, seleccionamos la que necesitamos y le damos Ejecutar. Otra forma de buscar las macros es presionando las teclas Alt + F8 al tiempo. Podemos tambin crear un botn que al darle Clic nos ejecute la macro. Para ello, vamos al men Ver, Barras de herramientas, Formularios. En la barra de formularios elegimos la opcin Botn, y lo colocamos en la parte de la pantalla que deseemos, y nos aparecer el listado de macros existentes. Luego seleccionamos la macro que se ejecutar al presionar el botn. Solo resta colarle un nombre al botn para identificarlo.
Actualizacin
Como est el cdigo de la macro, elimina las filas que tengan el valor 0 (cero). Para eliminar las celdas vacas el cdigo es el siguiente:
Sub eliminarfilavacia() For fila = 1 To 6000 If Cells(fila, 4).Value = "" Then Rows(fila).Delete End If Next fila End Sub
Tenga en cuenta que en la macro debe definir el rango de filas a revisar, rango que debe estar entre la primera fila ocupada hasta la ltima fila ocupada [en el ejemplo el rango va hasta la fila 6000], puesto que si de deja hasta la fila 65536 puede significar que la macro se ejecute indefinidamente y no sea posible cerrar la aplicacin ni guardar el archivo.
Sub locomocion() ActiveWindow.LargeScroll Down:=-1 Selection.Autofilter Field:=1, Criterial:=">0", Operator:=xlAnd Range("A10:R40").Select Selection.Copy Range("A55").Select ActiveSheet.Paste Application.CutCopyMode=False ActiveWindow.SmallScroll Down:=-9 Selection.Autofilter Field:=1 End Sub a esta macro le cambio el rango a copiar y el de destino y no me funciona, si te es ms facil corregir esta ajustadola a los rangos ("Q10:S40") y pegarlos en Q100. Gracias por anticipado Respuesta: Amigo le voy a dar un consejo, cuando le den una posible solucion pruebela tal como se la dan sin modificarla. Su propuesta quedaria asi: Range("Q10:S40").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="<>" Range("Q10:S40").Select Selection.Copy Range("Q100").Select ActiveSheet.Paste Range("Q10:S40").Select Application.CutCopyMode = False Selection.AutoFilter Si no le funciona por favor agame llegar su archivo para ajustarlo a sus necesidades Saludos
Sabias que a travs del comando de seleccin de MS Excel Ir a Especial podemos eliminar celdas en blanco de forma ms rpida y segura, ya que esta accin en la mayora de las veces se realiza de forma manual lo que en muchos casos se hace tedioso por el volumen de los datos y hasta puede ocasionar errores.
En Practica!
Veamos a continuacin mediante un sencillo ejemplo como emplear este comando: En un conjunto de datos que inicialmente vienen ordenados en una columna que tienen celdas en blanco entre s se requiere tener los datos ordenados pero sin las celdas en blanco; una solucin a este particular es emplear el comando de seleccin Ir a Especial. El conjunto de datos inicialmente viene de la siguiente manera:
El primer paso es hacer la seleccin de todo el rango con datos y presionar la tecla F5 o el mtodo abreviado Ctrl + I en donde automticamente aparecer un cuadro de dialogo Ir a en el cual vamos a seleccionar el botn Especial:
Luego de haber hecho clic en el botn Especial aparecer un nuevo cuadro de dialogo Ir a Especial en donde vamos a seleccionar Celdas en blanco tal como se ve en la imagen anexa:
Una vez hecho la seleccin hacemos clic sobre el botn Aceptar y de inmediato las celdas en blanco ya estn seleccionadas para que puedan ser eliminadas:
Para que las celdas en blanco puedan ser eliminadas debemos usar el metodo abreviado Ctrl en donde luego aparecer un nuevo cuadro de dialogo Eliminar celdas en el cual vamos hacer clic en la opcin Desplazar las celdas hacia arriba:
Una vez seguido estos pasos el resultado que vamos a obtener es que todas las celdas en blanco del rango seleccionado ya no aparecen tal como se ve en la imagen anexa:
Este til comando nos brinda una posibilidad muy util para la eliminacin de celdas en blanco de manera efectiva sobre todo si estamos manejando grandes volmenes de datos.
s frecuente que un informe generado por otro programa se exporte a Excel, por ejemplo
en SAP. Muchos programas contemplan la exportacin directa a Excel, y en otras ocasiones lo que se hace es generar un fichero plano, de texto. Sea por un mtodo o por otro, habitualmente los informes contienen filas vacas, y columnas vacas. Presentamos una macro que elimina las filas y las columnas en blanco, dejando el informe compactado.
Hoja 1
Hoja 2
La macro que elimina las filas vacas es la siguiente.
En la macro recorremos todas las filas del rango usado (UsedRange). Se basa en detectar el nmero de celdas vacas con la funcin CountA, que en espaol se denomina CONTARA. Esta funcin es similar a la funcin CONTAR. La diferencia es que CONTAR cuenta nicamente valores numricos, y CONTARA cuenta todo tipo de celdas, sean estas numricas o de texto.
Creamos la variable Cadena que por concatenacin va acumulando todas las filas vacas que se eliminarn. Al concatenar las diferentes filas las separamos por una coma (,) lo que hace que al final tengamos que eliminar la ltima coma, cosa que se hace con la expresin: Left(Cadena, Len(Cadena) - 1).
Esta macro aplicada a hojas en las que sea necesario eliminar muchas filas puede llegar a dar un error derivado de que la variable Cadena necesita una lngitud mayor de la que es capaz de soportar. Para evitar ese inconveniente hemos creado la macro de la hoja 3 que tambin elimina las filas vacas, pero lo hace cada vez que las localiza. Cdigo:
Sub EliminarFilasVacias() Dim Cadena As String, Fila As Long With Worksheets("Hoja2") 'Nombre de la hoja For Fila = 1 To .UsedRange.Rows.Count If WorksheetFunction.CountA(.Rows(Fila)) = 0 Then Cadena = Cadena & Fila & ":" & Fila & "," End If Next Fila If Cadena <> "" Then Application.ScreenUpdating = False .Range(Left(Cadena, Len(Cadena) - 1)).Delete Application.ScreenUpdating = True End If End With End Sub
Esta macro se aplica a la Hoja2 que es la siguiente. Se lanza con un botn que hay en la parte superior izquierda de la hoja.
Hoja 3
En la Hoja3 disponemos de una macro que elimina las filas vacas y otra que elimina la columnas vacas. La macro que elimina las filas vacas es la siguiente. Es similar a la que hemos utilizado en la Hoja 2.
Cdigo:
Sub EliminarFilasEnBlanco() Dim n As Long 'n filas Dim i As Long Dim Fila As String
n = ActiveSheet.UsedRange.Rows.Count For i = n To 1 Step -1 Fila = i & ":" & i If WorksheetFunction.CountA(Range(Fila)) = 0 Then Range("A" & i).EntireRow.Delete End If Next i End Sub
Hemos necesitado hacer el bucle desde n hasta 1 ya que si lo hacemos de 1 a n en caso de existir dos o ms filas vacas contiguas quedara una de ellas sin eliminar. Para eliminar las columnas vacas existe una macro similar. Es la siguiente.
Cdigo:
Sub EliminarColumnasVacias() Dim n As Integer 'n columnas Dim i As Integer Dim col As String n = ActiveSheet.UsedRange.Columns.Count For i = n To 1 Step -1 If WorksheetFunction.CountA(Cells(1, i).EntireColumn) = 0 Then Cells(1, i).EntireColumn.Delete End If Next i End Sub
Cdigo:
Sub EliminarFilasEnBlanco_bis() Dim Fila As Long For Fila = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 If WorksheetFunction.CountA(ActiveSheet.Rows(Fila)) = 0 Then Cells(Fila, 1).EntireRow.Delete End If Next Fila End Sub
Si no deseamos que se vea el movimiento en pantalla que origina la eliminacin de filas podemos aadir al inicio de la macro (despus de los Dim) la lnea:
Application.ScreenUpdating = False
Application.ScreenUpdating = True
Esto hace que mejore el tiempo de ejecucin, aprecindose en hojas de muchsimas filas. Pulsando sobre el desplegable de la hoja 3 podemos generar un informe con filas y columnas en blanco que podemos hacer desaparecer eligiendo las opciones adecuadas en el desplegable (ComboBox).
Est bueno 3pies, solo le falta la rutina para insertar en la hoja2, pero, seguido de la ultima fila(celda) ocupada Sub copiarypegar() 'Seleccionamos todo el rea contnua de datos, desde la celda donde estamos situados Range("a3:i15").Select 'seleciona el rango especifico ActiveCell.CurrentRegion.Select 'Copiamos Selection.Copy 'Pegamos en A2 de la hoja 7 Sheets(7).Select Range("A2").Select 'el control se har sobre la columna A, a partir de la fila While ActiveCell.Value <> "" 'Busca la ultima fila ActiveCell.Offset(1, 0).Select 'si la celda contiene datos, pasa a la fila siguiente Wend ActiveSheet.Paste Application.CutCopyMode = False Range("A2").Select End Sub
__________________ Las contraseas son como la ropa interior: Nunca tienes que dejarlas donde la gente pueda verlas, tienes que cambiarlas regularmente y no tienes que dejrselas a extraos
Sub copiarypegar() 'Seleccionamos todo el rea contnua de datos, desde la celda donde estamos situados Range("a3:i15").Select 'seleciona el rango especifico ActiveCell.CurrentRegion.Select 'Copiamos Selection.Copy 'Pegamos en A2 de la hoja 7 Sheets("NCC").Select Range("A2").Select 'el control se har sobre la columna A, a partir de la fila While ActiveCell.Value <> "" 'Busca la ultima fila ActiveCell.Offset(1, 0).Select 'si la celda contiene datos, pasa a la fila siguiente Wend ActiveSheet.Paste Application.CutCopyMode = False Range("A2").Select End Sub Existe esta opcion. Para que si alguien te cambia el nombre a las hojas o posicion de ellas, coloca esto en ThisWorkbook Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 'Esto se ejecutar justo unos instantes antes de guardar el fichero If Hoja1.Name <> "?" Then Hoja1.Name = "?" If Hoja2.Name <> "NCC" Then Hoja2.Name = "NCC" If Hoja3.Name <> "?" Then Hoja3.Name = "?" 'ect ect End Sub En lo rojo colocas el nombre de tus hojas. Esto por si alguien cambia el nombre de hojas, al cerrarse el libro todo vuelve como antes. Si sucede el cambio, el codigo referente a la hoja, no funciona.
Para evitar eso, lo mejor es en el editor de VBA, a la izquierda selecionas la hoja, abajo le das el nombre tuyo para definitivo
__________________ Las contraseas son como la ropa interior: Nunca tienes que dejarlas donde la gente pueda verlas, tienes que cambiarlas regularmente y no tienes que dejrselas a extraos
Y esas 41 filas quedaran entremedio de filas ocupadas? o crear 41 filas despus de la ltima ocupada? Explcate mejor y completo para que se entienda A lo mejor no soy capaz de darte ayuda por mis escasos conocimientos pero, algn usuario conocedor podr hacerlo Edito: Te consegui este codigo para un boton, tu vers si te sirve o no. Lo pondrs en un modulo y el comando para el boton es el primer, Sub InsertRowsAndFillFormulas_caller Este, si la celda selecionada contiene formula, la coservar y copiar la formula a las celdas siguientes creadas
Cita:
Sub InsertRowsAndFillFormulas_caller() Call InsertRowsAndFillFormulas End Sub Sub InsertRowsAndFillFormulas(Optional vRows As Long = 0) 'Agrega cantidad de lineas hacia abajo segun la celda seleccionada
' Documented: http://www.mvps.org/dmcritchie/excel/insrtrow.htm ' seleccin de fila basado en la celda activa Dim x As Long ActiveCell.EntireRow.Select 'Segun celda selecionada, seleciona toda la fila If vRows = 0 Then vRows = Application.InputBox(prompt:="How many rows do you want to add?", Title:="Add Rows", _ Default:=1, Type:=1) 'Por defecto presenta 1, una sola fila. Puedes decirle cuantas quieres If vRows = False Then Exit Sub End If 'si slo quiere agregar celdas y no filas enteras, elimine EntireRow "en la siguiente lnea Dim sht As Worksheet, shts() As String, i As Long ReDim shts(1 To Worksheets.Application.ActiveWorkbook.Windows(1).S electedSheets.Count) i=0 For Each sht In _ Application.ActiveWorkbook.Windows(1).SelectedShee ts Sheets(sht.Name).Select i=i+1 shts(i) = sht.Name x = Sheets(sht.Name).UsedRange.Rows.Count 'correccin ltima celda Selection.Resize(rowsize:=2).Rows(2).EntireRow.Res ize(rowsize:=vRows).Insert Shift:=xlDown Selection.AutoFill Selection.Resize(rowsize:=vRows + 1), xlFillDefault On Error Resume Next 'manejar posible error ' Agrega filas aun conservando la o las formula(s) de la(s) celda(s) celecionada Selection.Offset(1).Resize(vRows).EntireRow.Specia lCells(xlConstants).ClearContents Next sht Worksheets(shts).Select End Sub Si colocas en S. google esto, macro insertar filas en excel vers miles de opciones Puede que este te sea mas simple
Cita:
Sub Insertar_filas() ' ' Insertar el numero de filas dado por el usuario Dim a As Integer a=0 a = InputBox("Cuantas filas quieres insertar? ") While a > 0 ActiveCell.Offset(1, 0).Range("a1").Select Selection.EntireRow.Insert a=a-1 Wend End Sub
__________________ Las contraseas son como la ropa interior: Nunca tienes que dejarlas donde la gente pueda verlas, tienes que cambiarlas regularmente y no tienes que dejrselas a extraos
Vamos a seguir con una de las funciones ms tiles que existen de cara al control de una lista de argumentos como podran ser, por ejemplo, productos de una empresa, empleados, estudiantes, etc. BUSCARV: o SINTAXIS: =BUSCARV(CELDA,RANGO,COLUMNA) o SINTAXIS: =BUSCARH(CELDA,RANGO.COLUMNA) Es decir, buscar el valor de una celda en un rango de celdas y retornar el contenido de n columnas a su derecha. Ahora en castellano. Qu significa esto? Supongamos que tenemos un listado de productos tal que as:
Suponte que es una lista sper larga de artculos en almacn. Observa que en la parte superior hemos preparado tres celdas de distintos colores. Estas celdas servirn para nuestro propsito. En la celda C2 colocaremos la frmula: =BUSCARV (C1;A7:C15;2)
Para qu servir esta hoja? Lo que haremos ser escribir un cdigo de artculo en la celda C1 (amarilla) y Excel har que aparezca automticamente la descripcin y la cantidad disponible en las dos celdas inferiores. Este tipo de hojas va perfecto para hacer una consulta a un listado. La frmula mirar lo que hay en la celda C1, y lo buscar en el rango A7:C15. Una vez que lo encuentre, (lo encontrar en la 1 columna), mostrar lo que hay 2 columnas a su derecha (contndose ella), es decir, la descripcin del producto.
Observa detenidamente los tres argumentos que nos pide la funcin =BUSCARV, primero la celda donde estar lo que intentamos buscar (el cdigo), luego el rango donde ha de buscarlo, y por ltimo el nmero de columna que queremos mostrar. Ahora, escribiremos la frmula para la celda C3. Bsicamente es igual a la anterior, pero ahora el nmero de columna ser el 3, es decir, mostrar la cantidad: intntelo usted por favor. Ahora slo faltar comprobar las dos frmulas escribiendo cualquier cdigo de la lista de artculos en la celda C1. Ejercicio1: Imagen 01
Imagen 02
Se nos pide que cuando pongamos el ITEM del Producto salga en la Columna NOMBRE---> la descripcin del producto (ITEM PROD) buscado en las 3 clases de productos que hay. Bueno como vemos contamos con 3 Bsquedas, 2 BUSCARV y 1 BUSCARH , porque???. Bueno como vemos las clases de productos CONSERVAS Y GRANOS son verticales por ende la funcin BUSCARV y la de LACTEOS vemos que es horizontal por ende la funcin BUSCARH. PRIMERO: Nos ubicamos en la celda B2 (ver Imagen 01), y comenzamos a constituir nuestra funcin anidada con las funciones BuscarV y BuscarH. SEGUNDO: Entonces la en celda B2 tendramos algo como lo siguiente: =SI(Y(A2>=301,A2<=306),BUSCARV(A2,E3:H8,2,FALSO),SI(Y(A2>=401,A2<=406),BUSCARV(A2 ,E13:H18,2,FALSO),SI(Y(A2>=501,A2<=503),BUSCARH(A2,F22:H25,2,FALSO),"Dato no Hallado"))) Ejercicio2 En este ejercicio vamos a crear dos hojas y utilizarlas conjuntamente Artculos: esta hoja contendr un listado de artculos Factura: modelo de factura con frmulas que buscarn artculos en la anterior hoja
Utilice la Funcin BUSCARV, para realizar la bsqueda de artculos y sus precios por cdigo Total = cant * precio Suma = (total) En D2 (Escribir o no) palabra CONTADO o no (opcional) Dscto = En caso de que en la celda D2 exista la palabra CONTADO, se calcula el 5% de la suma. En caso de que en D2 no est la palabra CONTADO, en la celda actual aparecer un cero. Igv = (suma dscto) * 19%
Copiar y pegar valores en Excel es una tarea muy comn por lo que ser casi inevitable que en algn momento necesites hacer un copiado y pegado de celdas dentro de una macro. Para copiar y pegar celdas con VBA haremos uso de los mtodos Copy y PasteSpecial del objeto Range.
Este cdigo copiara el contenido de la celda A1 y lo pegar en la celda B1. El argumento xlPasteAll ocasiona que se pegue todo el contenido en la celda B1incluyendo el formato de la celda y las frmulas. Finalmente la instruccin Application.CutCopyMode = False hace que Excel de por finalizada la accin de copiado y pegado.
Observa que ahora el argumento utilizado es xlPasteValues el cual ocasionar que se peguen solamente los valores de las celdas copiadas.
Si en lugar de copiar la columna A, necesitas copiar la fila 1 y pegarla en la fila 2, entonces puedes usar el siguiente cdigo:
Ahora bien, si tanto la hoja origen como la hoja destino son diferentes a la hoja activa, entonces ser necesario indicar el nombre de la hoja tanto al momento de copiar como al momento de pegar. En el siguiente cdigo estoy suponiendo que el botn que ejecuta la macro se encuentra en la Hoja1 y copiar todo el contenido de la celda A1 de la Hoja2 hacia la celda B1 de la Hoja3:
Este cdigo copia todo el contenido de la celda A1 (incluyendo frmulas y formato) a la celda B1 de la misma hoja. El argumento Destination es el que nos permite especificar el rango en el cual se pegarn los valores. A continuacin puedes observar, en el mismo bloque de cdigo, diferentes ejemplos utilizando este mismo mtodo abreviado para copiar celdas con VBA:
Como has visto en los ejemplos de este artculo, el primer mtodo que utilizamos nos ofrece una gran flexibilidad a travs del mtodo PasteSpecial el cual nos permite elegir si deseamos pegar todo el contenido de una celda o solo sus valores. Pero si ests seguro de querer copiar siempre todo el contenido de las celdas, entonces el mtodo abreviado, utilizando el argumento Destination del mtodo Copy, ser suficiente para lograr nuestro objetivo. Ahora ya sabes cmo copiar y pegar celdas con VBA y solo es cuestin de que elijas el mtodo adecuado
Algo que me preguntan con frecuencia es como quitarle la contrasea a los archivos de Excel que nos hemos bajado de Internet, ya sea algn formulario, alguna hoja de trabajo, etc., podemos intentar seleccionar el contenido de la hoja y copiarla en una hoja nueva, probablemente podamos usar los datos o algunos de las funciones del libro y podamos adaptarlo a nuestras necesidades, pero en ocasiones el autor del libro quita o evita la opcin de seleccionar las celdas bloqueadas, en este caso no funciona el copiar y pegar en otra hoja.
Existen programas que nos pueden ayudar a descubrir la contrasea del libro o de la hoja, testeando cientos de combinaciones por segundo o usando la fuerza bruta, pero desgraciadamente estos programas son de paga, uno de ellos es Accent EXCEL Password Recovery otro de los mejorcitos es Excel Key. Si te gusta leer, en este blog puedes aprender sobre como hacerte de tu versin full, recuerda, si te gusta algn programa cmpralo, di no a la piratera. Vamos a ver como podemos desbloquear una hoja de Excel usando un pequeo cdigo que podemos insertar en el editor de Visual Basic:
Sub Quitar_contrasea() Dim a As Integer, b As Integer, c As Integer Dim d As Integer, e As Integer, f As Integer Dim a1 As Integer, a2 As Integer, a3 As Integer Dim a4 As Integer, a5 As Integer, a6 As Integer On Error Resume Next For a = 65 To 66: For b = 65 To 66: For c = 65 To 66 For d = 65 To 66: For e = 65 To 66: For a1 = 65 To 66 For a2 = 65 To 66: For a3 = 65 To 66: For a4 = 65 To 66 For a5 = 65 To 66: For a6 = 65 To 66: For f = 32 To 126 Contrasea = Chr(a) & Chr(b) & Chr(c) & Chr(d) & Chr(e) & Chr(a1) _ & Chr(a2) & Chr(a3) & Chr(a4) & Chr(a5) & Chr(a6) & Chr(f) ActiveSheet.Unprotect Contrasea If ActiveSheet.ProtectContents = False Then MsgBox "Enorabuena!" & vbCr & "Se ha quitado la contrasea:" & vbCr & Contrasea Exit Sub End If Next: Next: Next: Next: Next: Next Next: Next: Next: Next: Next: Next End Sub
Si no sabes como insertar el cdigo, mira el tema Convertir numeros a letras en Excel, una vez insertado deber quedar as:
Ya insertado el cdigo cierra el editor y regresa a Microsoft Excel y ve a Herramientas->Macro->Macros o con el mtodo abreviado Alt+F8, en la lista de macros selecciona Quitar contrasea y clic ejecutar:
Con suerte y dependiendo de la velocidad de tu pc vers una ventana como este pasados unos minutos.:
Lo he usado para libros creados con Excel 2003, para otras versiones desconozco si funciona.
Sheets("Hoja1").VISIBLE = xlVeryHidden
Sheets("Hoja2").VISIBLE = xlVeryHidden
With ActiveWindow
End With
End Sub
Sheets("Hoja1").VISIBLE = True
Sheets("Hoja2").VISIBLE = True
With ActiveWindow
End With
End Sub
Deseas conocer cmo proteger o desproteger una hoja Excel a travs de macros? En este tutorial te explicaremos en tan solo cuatro pasos como crear una macro muy simple que te permitir proteger una hoja de Excel, y otra que te permitir desprotegerla, unas escasas lneas de cdigo que puede resultarte de amplia utilidad en aquellos casos donde requieres trabajar con macros mucho ms grandes que deben intervenir sobre hojas de clculo protegidas con contrasea.
Programador. Recuerda que este paso solo aplicar en caso de que no tengas activa esta ficha; si ya la tienes activa puedes ir directamente al paso siguiente. En Excel 2007 ubica la cinta de opciones de la barra de herramientas e ingresars en: Botn Inicio/ Opciones de Excel/ Ms frecuentes/ y debers seleccionar la opcin Mostrar ficha programador en la cinta de opciones. La imagen anexa te muestra cul es la opcin a seleccionar para activar esta ficha:
Una vez ubiques el grupo cdigo hars clic en el botn Visual Basic, el cul te llevar al Editor de Visual Basic. Cuando ingreses al editor ubicars a la derecha de la pantalla la ventana del Proyecto VBAProject. All debers hacer clic derecho sobre la carpeta Microsoft Excel Objetos correspondiente al libro Excel en donde desees incluir tu nueva macro para proteger y desproteger una hoja Excel. En el men desplegable que aparecer selecciona Insertar y luego Mdulo, para crear un nuevo mdulo en donde sern alojadas nuestras macros.
En la imagen anexa puedes apreciar cuales son las opciones a seleccionar para incluir un nuevo mdulo:
End Sub
Para probar o ejecutar cualquiera de tus nuevas macros para proteger o desproteger una hoja Excel solo debes colocar el cursor al comienzo de cada cdigo y presionar el botn de ejecucin de la Macro (Ejecutar Sub/UserForm (F5)).
Para que la Macro sea ms segura debes bloquear el acceso al Editor de Visual Basic y con esto restringir el acceso. Nuestro ltimo paso de este tutorial nos mostrar como hacerlo.
Una vez seleccionada la opcin Propiedades de VBAProject te va aparecer un cuadro de dialogo en donde vas a seleccionar la pestaa Proteccin en donde marcars la opcin Bloquear proyecto para visualizacin. Debajo de esta opcin debes ingresar la contrasea de tu preferencia para tener acceso al
Editor de Visual Basic. Esta contrasea te ser solicitada la prxima vez que intentes editar el cdigo al momento de acceder al Editor de Visual Basic.
Esperamos que este tutorial te haya resultado de mxima utilidad, no dudes comentarnos si tienes alguna duda o consulta adicional. Recuerda que en nuestra categora de artculos relacionados con Macros en Excel podrs encontrar muchsima ms informacin, artculos y tutoriales.
Yo tengo una as 1) Sheets("VENTAS").Select 2)Range("B9:BT45").Select ' aqu tu rango de celdas que sera algo as Range("A3:A8").Select 3)Selection.ClearContents 4)Selection.ClearComments Donde 1. Es la hoja de la cual quiero borrar datos. 2. El rago de celdas que deseo borrar. 3. Elimino contenido 4. Elimino comentarios Espero te sea til Salu2
Pasos a seguir: 1.- Crea un fichero nuevo de Excel (ej: Libro1.xls). 2.- Pulsa Alt y F11, para entrar en el proyecto VBA (Visual Basic para Aplicaciones). 3.- En el men de opciones, selecciona Insertar. Selecciona a continuacin Mdulo. 4.- En la parte izquierda, donde se observa el Proyecto, se habr creado una carpeta llamada Mdulos, y dentro de ella, figurar Mdulo1. 5.- Nos situaremos en la ventana de la derecha al cliquear sobre de ese Mdulo1, y copiaremos este cdigo: Cdigo:
Sub Descubrir_contrasea() Dim a As Integer, b As Integer, c As Integer Dim d As Integer, e As Integer, f As Integer Dim a1 As Integer, a2 As Integer, a3 As Integer Dim a4 As Integer, a5 As Integer, a6 As Integer On Error Resume Next For a = 65 To 66: For b = 65 To 66: For c = 65 To 66 For d = 65 To 66: For e = 65 To 66: For a1 = 65 To 66 For a2 = 65 To 66: For a3 = 65 To 66: For a4 = 65 To 66 For a5 = 65 To 66: For a6 = 65 To 66: For f = 32 To 126 Contrasea = Chr(a) & Chr(b) & Chr(c) & Chr(d) & Chr(e) & Chr(a1) _ & Chr(a2) & Chr(a3) & Chr(a4) & Chr(a5) & Chr(a6) & Chr(f) ActiveSheet.Unprotect Contrasea If ActiveSheet.ProtectContents = False Then MsgBox "Enorabuena!" & vbCr & "La contrasea es:" & vbCr & Contrasea Exit Sub End If Next: Next: Next: Next: Next: Next Next: Next: Next: Next: Next: Next End Sub
6.- A continuacin, una vez hayamos pegado ese cdigo, seleccionaremos en el men de opciones, Archivo, y a continuacin Exportar archivo. Le pondremos de nombre Descubrir_contrasea.bas (por ejemplo, aunque puede ser ota, ya que no tiene porqu tener el mismo nombre que el procedimiento cuyo cdigo aparece en el punto 5 anterior), y lo guardaremos por ejemplo, en Mis documentos.
7.- Ahora imaginemos que tenemos una hoja de clculo protegida, y que queremos descubrir su password. Para poder saber cual es su password, tendremos que acceder al proyecto (Alt+F11), e importar el mdulo (.bas) anterior. Para ello, desde el men de opciones, seleccionamos Archivo, y a continuacin Importar archivo. Buscamos la ruta donde habamos guardado el fichero del punto 6 anterior, y lo seleccionamos. Salimos ahora del proyecyo VBA, para volver a la hoja de clculo protegida. 8.- Con la hoja de clculo cuya contrasea deseamos descubrir, en primer plano (activa), seleccionamos desde Excel (no desde VBA, aunque tambin se puede hacer, pero lo haremos de la forma ms grfica y sencilla posible), en el men de opciones Herramientas. A continuacin, seleccionamos Macro y luego Macros (si quereis ahorraros eso, pulsad Alt+F8). En la lista de macros, seleccionamos el que se llama Descubrir_contrasea, y pulsamos el botn Ejecutar. 9.- En ese momento, comienza el procedimiento para obtener el password de la hoja. El proceso puede tardar desde unos cuantos segundos, hasta algo ms de un minuto (o incluso varios minutos). No os preocupeis, que el sistema no ha entrado en un bucle infinito , tan solo hay que tener un poco de paciencia. 10.- Para finalizar, el sistema nos mostrar un mensaje, dicindonos cul era el password de la hoja, a la vez que la misma se desprotege. Puede que esa contrasea no sea literalmente la que puso el autor de la hoja que hasta hace unos segundos estaba protegida, pero tanto el password original, como este nuevo que el sistema nos da, son equivalentes. Por ejemplo, si tenemos una hoja protegida con el password pepe, la podemos desproteger con ese password, o con este que es el que obtenemos al ejecutar ese macro: AAABBABBBAA/. Podeis probar que tras proteger una hoja con el password pepe, sta se puede desproteger con el password pepe (evidentemente), y tambin con el password AAABBABBBAA/.
No dices dnde debe estar el botn. Supongamos que sobre las celdas de una hoja. Para hacer el botn abre la barra de herramientas llamada Cuadro de controles. Si haces click derecho sobre la barra de men aparece una lista. Click sobre Cuadro de controles. En esa barra vers una serie de controles y uno es un pequeo botn. Si dejas el puntero del mouse sobre l aparece un cartelito de ayuda que dice Botn de comando. Click sobre l. Ahora puedes dibujar un botn sobre la hoja. Haz click sobre el un sitio cualquiera y sin soltar la tecla del mouse arrstralo sobre la hoja. Vers aparecer un rectngulo. Al soltar la tecla del mouse se transformar en tu botn. Ahora haz doble click sobre ese botn. Se abrir el editor de Visual Basic y vers algo como esto: Private Sub CommandButton1_Click() End Sub que son la cabecera y el fin de la macro que se ejecutar al pulsar el botn. En el medio se escribe el cuerpo de la macro. Debe quedarte as: Private Sub CommandButton1_Click() Worksheets("Hoja2").Select End Sub Puse Hoja2 siguiendo tu ejemplo, pero debes escribir el nombre de la hoja a la que quieres ir, siempre entre comillas. Por ejemplo: Worksheets("Mejor Respuesta").Select Cierra el editor de Visual Basic y volvers a Excel. Para cambiar el texto que aparece en el botn, seleccinalo y pulsa el botn Propiedades de la barra Cuadro de controles. Se abrir la ventana de propiedades. All vers la propiedad Caption. Cmbiala por el texto que quieras, por ejemplo Ir a Hoja2. (NO CAMBIES LA PROPIEDAD NAME) Cierra la ventana de propiedades. En el Cuadro de controles haz click sobre el cono que es una escuadra sobre una regla para salir del modo diseo. Cierra el cuadro de controles, guarda el archivo y listo. Cuando pulses el botn irs a la hoja designada. Si quieres cambiar el tamao o la posicin del botn, abre nuevamente el Cuadro de controles y pulsa el cono de la escuadra y la regla para entrar en Modo diseo. Selecciona el botn y cambia su tamao arrastrando los cuadraditos blancos de los bordes, o su posicin arrastrando el botn entero. Sal del modo diseo pulsando el cono de la escuadra y cierra el Cuadro de controles.
Sub tickets1() mio = activeworkbook.name Workbooks.Add otro = activeworkbook.name Workbooks("almacen dulces.xlsm").Activate Sheets(4).Select Range("A1:C57").Select Selection.Copy Workbooks(otro).Sheets(1).range("a1").PasteSpecial Range("E1:G57").Select Selection.Copy Workbooks(otro).Sheets(1).range("d1").PasteSpecial Range("I1:K57").Select Selection.Copy Workbooks(otro).Sheets(1).range("g1").PasteSpecial Range("m1:o57").Select Selection.Copy Workbooks(otro).Sheets(1).range("j1").PasteSpecial Range("q1:s57").Select Selection.Copy Workbooks(otro).Sheets(1).range("m1").PasteSpecial Range("u1:w57").Select Selection.Copy Workbooks(otro).Sheets(1).range("p1").PasteSpecial End Sub
paste:=xlvalues
paste:=xlvalues
paste:=xlvalues
paste:=xlvalues
paste:=xlvalues
paste:=xlvalues
FORMULA DE COPIADO DE UNA HOJA A OTRA EN MACRO EXCEL (los nombres de las hojas los dejamos como: hoja1 y hoja2) Sub copiado() sheets("hoja1").select columna = Range("b39").Value Range("b40:b80").Copy Destination:=Sheets("hoja2").Cells(1, columna) End Sub
Trate de hacer debug paso a paso. Lo que sucede, si cambia su frmula en:
=IF((Sheet1!B2:B3=Sheet2!A2:A3),Sheet2!D2)
? O =IF((Sheet1!B2:B3=Sheet2!A2:A3),"the same values") Tal vez no todos los valores son realmente exactamente lo mismo en las columnas a y B. O D2 no contiene lo que usted espera.
rpondre #2
Copie esta celda hacia abajo tanto como necesita. Excel cambiar todas las referencias de celda para usted.
rpondre #3
rpondre #4
La siguiente rutina va en el Editor en la Hoja1, controlando la seleccin y copiando esos datos en la hoja 2 en las ubicaciones solicitadas.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim fila As Integer fila = Target.Row Range("A" & fila & ":B" & fila).Copy Destination:=Sheets("Hoja2").Range("A1") Range("C" & fila).Copy Destination:=Sheets("Hoja2").Range("B3") Range("D" & fila).Copy Destination:=Sheets("Hoja2").Range("A3") Application.CutCopyMode = False 'si necesitas que se posicione en la hoja2 Sheets("Hoja2").Select End Sub
Experto
Hola: Te dejo una rutina 'sencilla', no coloqu ningn bucle para que te sea fcil modificar si hiciera falta. La macro busca en cada col el fin de datos, pero si todas las col tendrn el mismo largo solo dej la primera lnea donde se busca 'filafin' Sub copiado() Sheets("Hoja1").Select
'col A filafin = ActiveSheet.Range("A65536").End(xlUp).Row ActiveSheet.Range("A8:A" & filafin).Copy Destination:=Sheets("Hoja2").Range("A4") 'col E filafin = ActiveSheet.Range("E65536").End(xlUp).Row ActiveSheet.Range("E8:E" & filafin).Copy Destination:=Sheets("Hoja2").Range("B4") 'col G filafin = ActiveSheet.Range("G65536").End(xlUp).Row ActiveSheet.Range("G8:G" & filafin).Copy Destination:=Sheets("Hoja2").Range("C4") End Sub
Tengo este Macro que me hicieron el favor de pasarme para copiar y pegar datos de una hoja a otra, ya anexe los botones que necesitaba y funciono a la perfecccion.
Este seria la copia de la Hoja 1 a la hoja 6 Private Sub CommandButton1_Click() Hoja1.Range("B5:E100").Copy Destination:=Hoja6.Range("B5:E100") End Sub