Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BUSCARV en Varias Hojas de Excel
BUSCARV en Varias Hojas de Excel
Como sabemos, la función BUSCARV devuelve el error #N/A cuando no encuentra el valor que se está
buscando, es por eso que la primer solución propuesta es la siguiente: Utilizar la función 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 función SI.ERROR
Para saber si la función BUSCARV ha devuelto un error podemos utilizar la función SI.ERROR que está
disponible desde la versión de Excel 2007. El primer argumento de la función SI.ERROR es el valor que
será evaluado y su segundo argumento es la acción a tomar en caso de obtener un error. Si deseamos
realizar la búsqueda en dos hojas, entonces nuestra implementación seguirá la siguiente lógica:
Esta no es la sintaxis de la fórmula, solo estoy ilustrando que el primer argumento de la función SI.ERROR
será la búsqueda sobre la primera hoja y como segundo argumento haremos la búsqueda sobre la
segunda hoja. El segundo argumento solo será ejecutado en caso de que la primera búsqueda resulte en
error. Si en lugar de realizar la búsqueda sobre dos hojas necesitamos buscar en tres hojas, entonces
necesitamos saber si la búsqueda sobre la segunda hoja nos devuelve un error y para eso volvemos a
utilizar la función SI.ERROR lo cual nos lleva a tener una anidación de funciones de la siguiente manera:
Ahora hagamos un ejemplo para probar que nuestra lógica de solución propuesta funciona correctamente
al buscar en varias hojas.
=SI.ERROR(BUSCARV(B1,Hoja1!A2:B6,2,FALSO), BUSCARV(B1,Hoja2!A2:B6,2,FALSO))
Lo más importante a resaltar de esta fórmula es el rango de búsqueda especificado en ambas funciones
BUSCARV. En ambas funciones hago la referencia precisa hacia la hoja donde deseo que se realice la
búsqueda. Observa el resultado obtenido al aplicar esta fórmula a los datos:
Si por el contrario busco un código de producto que no existe en ninguna de las primeras dos tablas,
entonces obtendré como resultado el error #N/A:
Ahora consideremos en nuestra búsqueda la información de la tercera hoja la cual contiene más códigos
de producto. Para ampliar nuestra búsqueda a esa tercera hoja debo utilizar de nueva cuenta la función
SI.ERROR como parte del segundo argumento de la primera función 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 modificación nuestra búsqueda se extiende a la tercera hoja y podremos saber si el código de
producto buscado se encuentra en ella:
Si quisiéramos incluir una cuarta hoja en la búsqueda solo debemos utilizar de nueva cuenta la función
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
sería el máximo de hojas que podríamos incluir utilizando este método.
Sin embargo, no te recomiendo llegar hasta ese límite ya que con solo agregar una o dos funciones
anidadas más a nuestro ejemplo la fórmula incrementaría su complejidad y cada vez se volvería más difícil
descubrir cualquier error. En caso de que necesites hacer búsquedas sobre una gran cantidad de hojas te
recomiendo utilizar una macro ya que eso evitará la elaboración de una fórmula más compleja.
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 continuación haré una explicación breve de este código. Los argumentos de la función
BUSCARVMultiple son los mismos argumentos que utiliza la función BUSCARV comenzando por el valor
buscado, la matriz de búsqueda, la columna que deseamos como resultado y finalmente el argumento
ordenado.
En la línea 6 del código se inicia el recorrido por cada una de las hojas del libro y en la línea 7 obtenemos
la dirección del rango sobre el cual se realizará la búsqueda. De inmediato ejecutamos la función
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 inglés y
por esa razón usamos la instrucción WorksheetFunction.VLookup.
Finalmente en la línea 12 validamos si la variable Encontrado tiene algún valor. Si la variable no está vacía
quiere decir que la función VLOOKUP encontró un resultado y por lo tanto terminamos la búsqueda. De lo
contrario el ciclo se vuelve a repetir y continuamos la búsqueda en la siguiente hoja del libro. En la
siguiente imagen puedes observar que la función recién implementada nos devuelve el mismo resultado
que nuestra solución anterior la cual utilizaba funciones de Excel:
Ahora ya conoces dos posibles soluciones para aquellos casos en los que necesites utilizar la función
BUSCARV en varias hojas de Excel. Descarga el libro de trabajo que contiene la alternativa de solución
utilizando funciones de Excel, así como la alternativa de solución utilizando la macro y continúa
experimentando con el ejemplo.
Artículos relacionados
Función BUSCARV con datos de otra hoja
La función BUSCARV es de gran utilidad para buscar valores dentro de una tabla y hoy les mostraré
cómo podemos mejorar la búsqueda utilizando la función COINCIDIR la cual nos permitirá asociar una
lista de validación de datos a la función BUSCARV.
Empezaremos por definir nuestra tabla de datos que tendrá en la columna A la lista de libros de Excel que
están a la venta y los montos para cada mes en las columnas subsecuentes.
Si deseo conocer las ventas del libro “Excel en 24 Horas” para el mes de Marzo puedo utilizar la siguiente
fórmula:
Para este ejemplo he colocado la lista de validación en la celda B1. Para poder utilizar esta lista dentro de
la función BUSCARV debo utilizar la función 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 función BUSCARV con la función COINCIDIR de
la siguiente manera: COINCIDIR(B1, A4:F4, 0) . El resultado de la función COINCIDIR me dará el número
de columna que corresponde al mes seleccionado en la lista de la celda B1.
Artículos relacionados
La función BUSCARV en Excel
DinamicasTablas/ListasTipsValidacion de DatosVarios
Cuando Excel no logra resolver una función, da como resultado #N/A (del inglés: not available). Hay
situaciones en las cuales este resultado es aceptable, es decir, no hay solución, pero no quisiéramos 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 fórmula 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 función BUSCARV (VLOOKUP) en nuestra fórmula, obtendremos dos valores #N/A en la
tabla 2
Como comentario aparte, pueden ver que he utilizado un nombre (Lista_1) para señalar el rango de
búsqueda. Siempre recomiendo esta técnica, como ya lo he hecho en esta nota.
Volviendo a nuestro tema, como podemos evitar estos resultados?
A la fórmula =BUSCARV(D3,Lista_1,2,0) le agregamos una condición, tal que si el resultado esperado es
#N/A, la fórmula dé como resultado un blanco.
Rescribimos nuestra fórmula de esta manera:
=SI(ESERROR(BUSCARV(D8,Lista_1,2,0))," ",BUSCARV(D8,Lista_1,2,0))
Esta técnica es útil, por supuesto, en cualquier otra fórmula que use funciones de Excel.
En ocasiones necesitamos eliminar en Excel aquellas filas vacías que se encuentran en nuestros listados
de productos, personas, etc.
Muchas veces debemos eliminar algún dato de nuestras hojas de cálculo, quedando una fila vacía, la
cual tenemos que buscar manualmente y eliminar manualmente algo que no será muy cómo si se trata
de listados grandes.
Pues bien, este proceso lo podemos hacer de forma automática, mediante una Macro, quien se encargara
de revisar las filas que se encuentren vacías 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 código:
Sub eliminarfilavacia()
For fila = 1 To 65536
If Cells(fila, 4).Value = "0" Then
Rows(fila).Delete
End If
Next fila
End Sub
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 también crear un botón que al darle Clic nos ejecute la macro.
Actualización
Como está el código de la macro, elimina las filas que tengan el valor 0 (cero).
En un libro de Excel, de la hoja "Diario" por medio de una macro, deseo copiar el rango
(Q10:R40), pegar los datos a partir de la celda (Q100), eliminando las filas vacias.
Un saludo
Respuesta:
Buen dia amigo, por lo que pude entender esto es lo que usted necesita:
contador1 = 0
contador2 = 0
contador1 = contador1 + 1
Next c
Saludos
Usuario:
Respuesta:
Amigo le voy a dar un consejo, cuando le den una posible solucion pruebela tal como se la dan sin
modificarla.
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 través del comando de selección de MS Excel Ir a Especial podemos eliminar celdas
en blanco de forma más rápida y segura, ya que esta acción en la mayoría 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!
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 solución a este particular
es emplear el comando de selección Ir a Especial.
El primer paso es hacer la selección de todo el rango con datos y presionar la tecla F5 o el método
abreviado Ctrl + I en donde automáticamente aparecerá un cuadro de dialogo Ir a en el cual vamos a
seleccionar el botón Especial:
Luego de haber hecho clic en el botón 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 selección hacemos clic sobre el botón Aceptar y de inmediato las celdas en blanco ya
están 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 opción
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 eliminación de celdas en blanco de manera
efectiva sobre todo si estamos manejando grandes volúmenes de datos.
E s frecuente que un informe generado por otro programa se exporte a Excel, por ejemplo
Hoja 2
Creamos la variable Cadena que por concatenación va acumulando todas las filas vacías que se
eliminarán. 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 expresión:
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 lóngitud mayor de la que es capaz de
soportar. Para evitar ese inconveniente hemos creado la macro de la hoja 3 que también
elimina las filas vacías, pero lo hace cada vez que las localiza.
Código:
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 botón que hay en la parte
superior izquierda de la hoja.
Hoja 3
En la Hoja3 disponemos de una macro que elimina las filas vacías y otra que elimina la columnas
vacías.
La macro que elimina las filas vacías es la siguiente. Es similar a la que hemos utilizado en la
Hoja 2.
Código:
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 más filas vacías contiguas quedaría una de ellas sin eliminar.
Para eliminar las columnas vacías existe una macro similar. Es la siguiente.
Código:
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
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
Application.ScreenUpdating = False
Application.ScreenUpdating = True
Esto hace que mejore el tiempo de ejecución, apreciándose en hojas de muchísimas 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).
Otra variante que Elimina Filas Vacías
Sub Elimina_Filas_Vacias()
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
Código:
Sub copiarypegar()
'Seleccionamos todo el área contínua
'de datos, desde la celda donde estamos situados
ActiveCell.CurrentRegion.Select
'Copiamos
Selection.Copy
'Pegamos en A1 de la hoja 2
Sheets("Hoja2").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
End Sub
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 contínua 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 contraseñas son como la ropa interior: Nunca tienes que dejarlas donde la gente pueda verlas, tienes que
cambiarlas regularmente y no tienes que dejárselas a extraños
Respuesta: Macro para copiar un rango de celdas en excel y pasar a hoja 2
Sub copiarypegar()
'Seleccionamos todo el área contínua 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
'ect ect
End Sub
__________________
Las contraseñas son como la ropa interior: Nunca tienes que dejarlas donde la gente pueda verlas, tienes que
cambiarlas regularmente y no tienes que dejárselas a extraños
Y esas 41 filas ¿quedaran entremedio de filas ocupadas? o ¿crear 41 filas después de la última ocupada?
Explícate mejor y completo para que se entienda
A lo mejor no soy capaz de darte ayuda por mis escasos conocimientos pero, algún usuario conocedor
podrá hacerlo
Edito:
Te consegui este codigo para un boton, tu verás si te sirve o no. Lo pondrás 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
'si sólo quiere agregar celdas y no filas enteras, elimine EntireRow "en la siguiente línea
Si colocas en S. google esto, macro insertar filas en excel verás miles de opciones
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 contraseñas son como la ropa interior: Nunca tienes que dejarlas donde la gente pueda verlas, tienes que
cambiarlas regularmente y no tienes que dejárselas a extraños
LA FUNCION BUSCARV Y BUSCARH
Vamos a seguir con una de las funciones más útiles que existen de cara al control de una lista de
argumentos como podrían 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 súper larga de artículos en almacén. Observa que en la parte superior
hemos preparado tres celdas de distintos colores. Estas celdas servirán para nuestro propósito. En
la celda C2 colocaremos la fórmula:
=BUSCARV (C1;A7:C15;2)
¿Para qué servirá esta hoja? Lo que haremos será escribir un código de artículo en la celda C1
(amarilla) y Excel hará que aparezca automáticamente la descripción y la cantidad disponible en
las dos celdas inferiores.
Este tipo de hojas va perfecto para hacer una consulta a un listado. La fórmula 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 (contándose ella), es decir, la
descripción del producto.
Observa detenidamente los tres argumentos que nos pide la función =BUSCARV, primero la celda
donde estará lo que intentamos buscar (el código), luego el rango donde ha de buscarlo, y por
último el número de columna que queremos mostrar.
Ahora, escribiremos la fórmula para la celda C3. Básicamente es igual a la anterior, pero ahora el
número de columna será el 3, es decir, mostrará la cantidad:
inténtelo usted por favor.
Ahora sólo faltará comprobar las dos fórmulas escribiendo cualquier código de la lista de artículos
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
descripción del producto (ITEM PROD) buscado en las 3 clases de productos que hay.
Bueno como vemos contamos con 3 Búsquedas, 2 BUSCARV y 1 BUSCARH , porque???. Bueno
como vemos las clases de productos CONSERVAS Y GRANOS son verticales por ende la función
BUSCARV y la de LACTEOS vemos que es horizontal por ende la función BUSCARH.
PRIMERO: Nos ubicamos en la celda B2 (ver Imagen 01), y comenzamos a constituir nuestra
función anidada con las funciones BuscarV y BuscarH.
Ejercicio2
En este ejercicio vamos a crear dos hojas y utilizarlas conjuntamente
Artículos: esta hoja contendrá un listado de artículos
Factura: modelo de factura con fórmulas que buscarán artículos en la anterior hoja
La primera hoja tiene la siguiente lista de artículos:
Utilice la Función “BUSCARV”, para realizar la búsqueda de artículos y sus precios por código
Suma = ∑(total)
Este código 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 fórmulas.
Finalmente la instrucción Application.CutCopyMode = False hace que Excel de por finalizada la acción 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.
Copiar y pegar una fila o columna con VBA
Es posible copiar y pegar columnas con VBA si modificamos el rango indicado en el método Range. Por
ejemplo, para copiar la columna A en la columna B utiliza el siguiente código:
Si en lugar de copiar la columna A, necesitas copiar la fila 1 y pegarla en la fila 2, entonces puedes usar el
siguiente código:
Este código copia todo el contenido de la celda A1 (incluyendo fórmulas 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 pegarán los
valores. A continuación puedes observar, en el mismo bloque de código, diferentes ejemplos utilizando
este mismo método abreviado para copiar celdas con VBA:
Como has visto en los ejemplos de este artículo, el primer método que utilizamos nos ofrece una gran
flexibilidad a través del método PasteSpecial el cual nos permite elegir si deseamos pegar todo el
contenido de una celda o solo sus valores. Pero si estás seguro de querer copiar siempre todo el contenido
de las celdas, entonces el método abreviado, utilizando el argumento Destination del método Copy, será
suficiente para lograr nuestro objetivo.
Ahora ya sabes cómo copiar y pegar celdas con VBA y solo es cuestión de que elijas el método
adecuado
Algo que me preguntan con frecuencia es como quitarle la contraseña a los archivos de Excel que nos hemos
bajado de Internet, ya sea algún 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 opción 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 contraseña 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 versión full, recuerda, si te gusta
Vamos a ver como podemos desbloquear una hoja de Excel usando un pequeño código que podemos insertar
Sub Quitar_contraseña()
Contraseña = 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 Contraseña
MsgBox "¡Enorabuena!" & vbCr & "Se ha quitado la contraseña:" & vbCr & Contraseña
Exit Sub
End If
End Sub
Si no sabes como insertar el código, mira el tema Convertir numeros a letras en Excel, una vez insertado
el método abreviado Alt+F8, en la lista de macros selecciona “Quitar contraseña” y clic ejecutar:
Con suerte y dependiendo de la velocidad de tu pc verás una ventana como este pasados unos minutos.:
Lo he usado para libros creados con Excel 2003, para otras versiones desconozco si funciona.
Ocultar hojas en Excel a traves de una Macro
¿Deseas conocer como ocultar las hojas de un libro de Microsoft Excel que no quieres que sean vistas
por motivos de seguridad?
En este artículo te explicaremos como desarrollar un código de Visual Basic que te permite a través de una
macro muy sencilla ocultar esas hojas que te interesa que no vean, además que ahorras tiempo ya que a
través de la Macro es mucho mas sencillo y practico ocultar y mostrar las hojas.
En un libro de Excel vas a ir a la cinta de Programador (Para el caso de Microsoft Excel 2007) donde vas a
presionar en las siguinetes opciones: Grupo Código y selecciona Visual Basic luego de esto va aparecer
la ventana de Visual Basic en donde vas a seleccionar con el botón derecho del ratón Microsoft Excel
Objetos luego seleccionas Insertar y escoge de la lista que se despliega a continuación: Módulo donde
vas a alojar la sentencia para que el código de Visual Basic pueda ejecutarse.
Paso2: Ejecutar Macro
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
Paso 3: Funcionalidad de la Macro
Vas a realizar las pruebas correspondientes para efectivamente probar la funcionalidad de la Macro,
recuerda que esta Macro te permite Ocultar las hojas que desees y solo dejar visible las que lo ameriten,
por ejemplo Oculta la Hoja 1 y la Hoja 2 pero deja visible la Hoja 3.
No dudes en seguir visitándonos, en próximas publicaciones vamos a estar colocando más información al
respecto.
Esperamos que este artículo sea de máxima utilidad para todos. Si te gustó este artículo no olvides que en
nuestra sección de Macros en Excel puedes encontrar muchísimos más artículos como este:
Macros para proteger o desproteger una
hoja Excel
POSTED ON 20/10/2009IN MACROS, MACROS EXCEL
¿Deseas conocer cómo proteger o desproteger una hoja Excel a través 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 líneas de código
que puede resultarte de amplia utilidad en aquellos casos donde requieres trabajar con macros mucho más
grandes que deben intervenir sobre hojas de cálculo protegidas con contraseña.
Los comandos que se usan para editar y ejecutar macros en Excel se encuentran en el grupo Código de la
ficha Programador, la cual de forma predeterminada se encuentra oculta. Por ello nuestro primer paso de
este tutorial para proteger o desproteger una hoja Excel será abrir nuestro archivo y activar la ficha
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 ingresarás en: Botón Inicio/
Opciones de Excel/ Más frecuentes/ y deberás seleccionar la opción Mostrar ficha programador en la
cinta de opciones. La imagen anexa te muestra cuál es la opción a seleccionar para activar esta ficha:
Nuestro segundo paso será ingresar al Editor de Visual Basic. Para ello en la ficha Programador deberás
ubicar el grupo Código el cual podrás identificar fácilmente por encontrarse a la izquierda, con una
apariencia como la de la imagen anexa:
Una vez ubiques el grupo código harás clic en el botón Visual Basic, el cuál te llevará al Editor de Visual
Basic. Cuando ingreses al editor ubicarás a la derecha de la pantalla la ventana del Proyecto –
VBAProject. Allí deberás 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 Módulo, para crear un nuevo módulo en donde
serán alojadas nuestras macros.
En la imagen anexa puedes apreciar cuales son las opciones a seleccionar para incluir un nuevo módulo:
Nuestro siguiente paso será copiar en el nuevo Modulo que hemos insertado el siguiente código de Visual
Basic. El código incluye dos macros: Proteger, la cual te permitirá proteger con la contraseña de tu
preferencia una hoja Excel, y Desproteger, la cual te permitirá desproteger cualquier hoja Excel de tu
preferencia si conoces cual es la contraseña de desprotección de la misma.
En la línea de código que hace referencia al objeto Sheets deberás escribir el nombre de la hoja de cálculo
de Excel que deseas proteger o desproteger según la macro que edites.En el código que te estamos
suministrando ambas macros se encuentran trabajando sobre la Hoja1. Puedes cambiar libremente esta
configuración por la hoja de tu preferencia cambiando el tecto Hoja1 por el nombre de la hoja de cálculo a
proteger o desproteger cuidando de respetar las comillas.
Sub PROTECCION()
Sheets("Hoja1").Select
ActiveSheet.Protect ("XXXX")
End Sub
Sub DESPROTEGER()
Sheets("Hoja1").Select
ActiveSheet.Unprotect ("XXXX")
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 código y presionar el botón de ejecución de la Macro
(Ejecutar Sub/UserForm (F5)).
Para que la Macro sea más 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.
En el Editor de Visual Basic harás clic derecho sobre la carpeta Microsoft Excel Objetos del libro de Excel
con el que trabajas para que selecciones en el menú desplegable que te aparecerá la opción Propiedades de
VBAProject. En la imagen anexa podrás apreciar cual es esta opción:
Esperamos que este tutorial te haya resultado de máxima utilidad, no dudes comentarnos si tienes alguna
duda o consulta adicional.
Recuerda que en nuestra categoría de artículos relacionados con Macros en Excel podrás encontrar
muchísima más información, artículos y tutoriales.
1) Sheets("VENTAS").Select
2)Range("B9:BT45").Select ' aquí tu rango de celdas que sería 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
Recuperar Password de Hoja en Excel
Pasos a seguir:
2.- Pulsa Alt y F11, para entrar en el proyecto VBA (Visual Basic para Aplicaciones).
4.- En la parte izquierda, donde se observa el Proyecto, se habrá creado una carpeta llamada “Módulos”, y
dentro de ella, figurará “Módulo1″.
5.- Nos situaremos en la ventana de la derecha al cliquear sobre de ese “Módulo1″, y copiaremos este código:
Código:
Sub Descubrir_contraseña()
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
Contraseña = 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 Contraseña
If ActiveSheet.ProtectContents = False Then
MsgBox "¡Enorabuena!" & vbCr & "La contraseña es:" & vbCr & Contraseña
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub
6.- A continuación, una vez hayamos pegado ese código, seleccionaremos en el menú de opciones, “Archivo”,
y a continuación “Exportar archivo”. Le pondremos de nombre Descubrir_contraseña.bas (por ejemplo,
aunque puede ser ota, ya que no tiene porqué tener el mismo nombre que el procedimiento cuyo código
aparece en el punto 5 anterior), y lo guardaremos por ejemplo, en “Mis documentos”.
7.- Ahora imaginemos que tenemos una hoja de cálculo protegida, y que queremos descubrir su password.
Para poder saber cual es su password, tendremos que acceder al proyecto (Alt+F11), e importar el módulo
(.bas) anterior. Para ello, desde el menú de opciones, seleccionamos “Archivo”, y a continuación “Importar
archivo”. Buscamos la ruta donde habíamos guardado el fichero del punto 6 anterior, y lo seleccionamos.
Salimos ahora del proyecyo VBA, para volver a la hoja de cálculo protegida.
8.- Con la hoja de cálculo cuya contraseña deseamos descubrir, en primer plano (activa), seleccionamos
desde Excel (no desde VBA, aunque también se puede hacer, pero lo haremos de la forma más gráfica y
sencilla posible), en el menú de opciones “Herramientas”. A continuación, seleccionamos “Macro” y luego
“Macros…” (si quereis ahorraros eso, pulsad Alt+F8). En la lista de macros, seleccionamos el que se llama
“Descubrir_contraseña”, y pulsamos el botón “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 más 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, diciéndonos cuál era el password de la hoja, a la vez
que la misma se desprotege. Puede que esa contraseña 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 también con el password “AAABBABBBAA/”.
No dices dónde debe estar el botón. Supongamos que sobre las celdas de una hoja. Para hacer el botón 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 verás una serie de controles y uno es un pequeño botón. Si
dejas el puntero del mouse sobre él aparece un cartelito de ayuda que dice Botón de comando. Click sobre él.
Ahora puedes dibujar un botón sobre la hoja. Haz click sobre el un sitio cualquiera y sin soltar la tecla del mouse
arrástralo sobre la hoja. Verás aparecer un rectángulo. Al soltar la tecla del mouse se transformará en tu botón.
Ahora haz doble click sobre ese botón. Se abrirá el editor de Visual Basic y verás algo como esto:
End Sub
que son la cabecera y el fin de la macro que se ejecutará al pulsar el botón. En el medio se escribe el cuerpo de
la macro. Debe quedarte así:
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 volverás a Excel. Para cambiar el texto que aparece en el botón, selecciónalo y
pulsa el botón Propiedades de la barra Cuadro de controles. Se abrirá la ventana de propiedades. Allí verás la
propiedad Caption. Cámbiala 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 diseño. Cierra el cuadro de controles, guarda el archivo y listo. Cuando
pulses el botón irás a la hoja designada.
Si quieres cambiar el tamaño o la posición del botón, abre nuevamente el Cuadro de controles y pulsa el ícono
de la escuadra y la regla para entrar en Modo diseño. Selecciona el botón y cambia su tamaño arrastrando los
cuadraditos blancos de los bordes, o su posición arrastrando el botón entero. Sal del modo diseño 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 paste:=xlvalues
Range("E1:G57").Select
Selection.Copy
Workbooks(otro).Sheets(1).range("d1").PasteSpecial paste:=xlvalues
Range("I1:K57").Select
Selection.Copy
Workbooks(otro).Sheets(1).range("g1").PasteSpecial paste:=xlvalues
Range("m1:o57").Select
Selection.Copy
Workbooks(otro).Sheets(1).range("j1").PasteSpecial paste:=xlvalues
Range("q1:s57").Select
Selection.Copy
Workbooks(otro).Sheets(1).range("m1").PasteSpecial paste:=xlvalues
Range("u1:w57").Select
Selection.Copy
Workbooks(otro).Sheets(1).range("p1").PasteSpecial paste:=xlvalues
End Sub
En el libro estoy tratando de copiar datos de Hoja1 a Hoja2 con una condición, si de excel
((Hoja1!B2:B80 = Hoja2!A2:A80), Hoja2!D2) no estoy me recibiendo la ayuda de result.please
solucionar esto.
Estoy tratando de copiar de Hoja1 a Hoja2 con una condición, si el valor en la hoja 1, columna b es
igual al valor en la Hoja2 columna al valor en la columna d de la hoja 2 debe copiarse en la columna g
de Hoja1
répondre #1
Trate de hacer debug paso a paso. Lo que sucede, si cambia su fórmula en:
=IF((Sheet1!B2:B3=Sheet2!A2:A3),Sheet2!D2)
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.
répondre #2
=IF((Sheet1!B1=Sheet2!A1), Sheet2!D1)
Copie esta celda hacia abajo tanto como necesita. Excel cambiará todas las referencias de celda para
usted.
répondre #3
Experto
Hola:
Te dejo una rutina 'sencilla', no coloqué ningún bucle para que te sea fácil modificar si hiciera falta.
La macro busca en cada col el fin de datos, pero si todas las col tendrán el mismo largo solo dejá la
primera línea 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.