Está en la página 1de 55

BUSCARV en varias hojas de Excel

Por Moisés Ortíz el 26 de febrero del 2013


Generalmente recomiendo consolidar los datos en una sola hoja de Excel antes de utilizar la función BUSCARV,
pero si por alguna razón esto no es posible y necesitas utilizar la función BUSCARV en varias hojas de Excel,
entonces considera alguna de las alternativas que mostraré en este artículo.

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.

Función BUSCARV en varias hojas


En la siguiente imagen puedes observar tres tablas, cada una en hojas diferentes, que contienen una
columna con el código de un libro y su título.
Como primer ejemplo haremos una búsqueda sobre las primeras dos tablas. En una nueva hoja realizaré la
búsqueda del título de un libro en base a su código el cual colocaré en la celda B1 y para ello utilizaré la
siguiente fórmula:

=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.

Buscar en varias hojas con una macro


La segunda alternativa que tenemos para buscar en varias hojas de Excel es utilizar una función definida por
el usuario. Solo debemos ejecutar la función 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 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

Combinar BUSCARV y COINCIDIR


Por Moisés Ortíz el 14 de marzo del 2012

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:

=BUSCARV("Excel en 24 horas", A5:F14, 4, FALSO)

Al colocar esta fórmula en la celda E1 obtengo el resultado esperado:


La fórmula me da el resultado correcto, pero ¿Qué sucede si ahora necesito las ventas del mes de Enero?
¿Y después las ventas del mes de Febrero?

Crear una lista de validación


Para evitar la edición de la función BUSCARV cada vez que necesitamos un dato diferente podemos crear
una lista de validación con las posibles opciones para los meses. La lista de validación la creamos desde la
ficha Datos y el botón Validación de datos.

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.

Última mejora a la función BUSCARV


Una pequeña mejora que aún podemos hacer es agregar otra lista de validación con los nombres de los
libros y utilizar dicho valor en el primer argumento de la función BUSCARV.
De esta manera al seleccionar un valor diferente de cualquiera de las listas obtendremos el resultado
correspondiente obtenido por la función BUSCARV. Si lo deseas puedes descargar el libro de trabajo.

Artículos relacionados
La función BUSCARV en Excel

DinamicasTablas/ListasTipsValidacion de DatosVarios

Cómo evitar resultados #N/A en fórmulas de Excel


JUEVES, FEBRERO 09, 2006

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))

El resultado será el siguiente

Nuestra fórmula funciona de la siguiente manera:


La función SI (If en la versión inglesa) evalúa en primer lugar el resultado de la función ESERROR (IsError)
cuya variable es la búsqueda que queremos realizar. Si el resultado es positivo, es decir el resultado será
#N/A, la función SI dará un resulta en blanco (señalado por " "). En caso contrario dará el resultado de la
búsqueda 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

Luego le damos guardar en la barra de menú o presionamos las teclas Ctrl + S

Ya tenemos nuestra aplicación 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 también crear un botón 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 opción Botón, 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 botón.

Solo resta colarle un nombre al botón para identificarlo.

Actualización
Como está el código de la macro, elimina las filas que tengan el valor 0 (cero).

Para eliminar las celdas vacías el código 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 aplicación ni guardar el archivo.

Pregunta: Copiar datos sin tomar filas vacias


Usuario:

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

For Each c In Worksheets("Diario").Range("Q10:Q40")

If c.Value <> "" Then


Worksheets("Diario").Cells(100 + contador2, 17).Value = Worksheets("Diario").Cells(10 +
contador1, 17).Value
Worksheets("Diario").Cells(100 + contador2, 18).Value = Worksheets("Diario").Cells(10 +
contador1, 18).Value
contador2 = contador2 + 1
End If

contador1 = contador1 + 1

Next c

Saludos

Usuario:

En primer lugar el rango indicado no es el corrector, deberia de ser (Q10:S40).


lo he cambiado y no funciona, no elimina las celdas vacias y al copiar los datos en
Q100, el primer dato es la suma del total, hasta ahora yo funcionaba con una macro
para hacer lo mismo en el rango (A10:R40) y pegarlos en (A55) que es el siguiente y me funciona
correctamente
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 más 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 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!

Veamos a continuación 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 solución a este particular
es emplear el comando de selección Ir a Especial.

El conjunto de datos inicialmente viene de la siguiente manera:

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.

Eliminar Filas y Columnas vacias

Descargar el fichero: LimpiaFilas.xlsm

E s frecuente que un informe generado por otro programa se exporte a Excel, por ejemplo

en SAP. Muchos programas contemplan la exportación directa a Excel, y en otras ocasiones lo


que se hace es generar un fichero plano, de texto. Sea por un método o por otro, habitualmente
los informes contienen filas vacías, y columnas vacías. 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 vacías es la siguiente.


En la macro recorremos todas las filas del rango usado (UsedRange). Se basa en detectar el
número de celdas vacías con la función CountA, que en español se denomina CONTARA. Esta
función es similar a la función CONTAR. La diferencia es que CONTAR cuenta únicamente valores
numéricos, y CONTARA cuenta todo tipo de celdas, sean estas numéricas o de texto.

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:

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 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

Otra variante para eliminar filas en blanco es la siguiente.


Código:

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 eliminación de filas


podemos añadir al inicio de la macro (después de los Dim) la línea:

 Application.ScreenUpdating = False

Y al final de la macro pondríamos la línea:

 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

Respuesta: Macro para copiar un rango de celdas en excel y pasar a hoja


2

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

Respuesta: Macro para copiar un rango de celdas en excel y pasar a hoja 2

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

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 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

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

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
' selección 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 sólo quiere agregar celdas y no filas enteras, elimine EntireRow "en la siguiente línea

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 'corrección ú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 verás 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 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.

SEGUNDO: Entonces la en celda B2 tendríamos 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
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:

La segunda hoja tendrá el siguiente aspecto:

Utilice la Función “BUSCARV”, para realizar la búsqueda de artículos y sus precios por código

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%

Total neto = suma – dscto + Igv

Cómo copiar y pegar celdas con VBA


Por Moisés Ortíz el 19 diciembre, 2012
Copiar y pegar valores en Excel es una tarea muy común por lo que será casi inevitable que en algún
momento necesites hacer un copiado y pegado de celdas dentro de una macro. Para copiar y pegar
celdas con VBA haremos uso de los métodos Copy y PasteSpecial del objeto Range.

Copiar y pegar celdas en la misma hoja


Si los valores serán pegados dentro de la misma hoja, entonces puedes utilizar un código como el
siguiente:

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.

Copiar y pegar los valores de una celda con VBA


Si en lugar de copiar todo el contenido de una celda deseas copiar solamente los valores, entonces debes
hacer una pequeña modificación en el argumento del método PasteSpecial de la siguiente manera:

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:

Copiar y pegar a otra hoja


Para pegar los valores a una hoja diferente, solamente debemos especificar la hoja destino haciendo uso
del objeto Worksheets de la siguiente manera:
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 código estoy suponiendo que el botón 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:

Método abreviado para copiar celdas con VBA


En todos los ejemplos anteriores he utilizado el método PasteSpecial para pegar los valores en las celdas
destino. Una ventaja de ese método es que puedo elegir si deseo copiar el contenido completo de la celda
(xlPasteAll) o solo sus valores (xlPasteValues) sin embargo existe otro método alterno en caso de querer
copiar siempre todo el contenido de una celda. Observa 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

Quitar contraseña en Hojas de Excel


Publicado enero 21, 2008 Tutos Manuales542 Comentarios
Etiquetas: descubrir contraseña de excel, desproteger excel, Quitar contraseña de excel, recuperar contraseña de excel

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

algún programa cómpralo, di no a la piratería.

Vamos a ver como podemos desbloquear una hoja de Excel usando un pequeño código que podemos insertar

en el editor de Visual Basic:

Sub Quitar_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 & "Se ha quitado la contraseña:" & vbCr & Contraseña

Exit Sub

End If

Next: Next: Next: Next: Next: Next

Next: Next: Next: Next: Next: Next

End Sub

Si no sabes como insertar el código, mira el tema Convertir numeros a letras en Excel, una vez insertado

deberá quedar así:


Ya insertado el código cierra el editor y regresa a Microsoft Excel y ve a Herramientas->Macro->Macros o con

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.

Paso1: Insertar Módulo

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

A continuación vas a copiar la siguiente sentencia en el Modulo 1 insertado en el paso 1 la cual va a


permitir ejecutar la Macro para que se puedan ocultar y mostrar las hojas, para ejecutar esta Macro solo
debes posicionarte con el cursor al inicio de cada sentencia y presionar el botón de ejecución de la Macro
(Ejecutar Sub/UserForm (F5)), el mismo procedimiento se realiza para ocultar y mostrar las hojas.

Private Sub OCULTAR()

Sheets("Hoja1").VISIBLE = xlVeryHidden

Sheets("Hoja2").VISIBLE = xlVeryHidden

With ActiveWindow
End With

End Sub

Private Sub MOSTRAR()

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.

Paso 1: Activar la ficha Programador.

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:

Paso 2: Ingresar al editor de Visual Basic y crear un nuevo Módulo.

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:

Paso 3: Alojar código para proteger o desproteger una hoja Excel.

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.

En el campo (“xxxx”) de ambas macros vas a colocar la contraseña de tu preferencia, recomendablemente


una que puedas recordar fácilmente:

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.

Paso 4: Proteger el acceso al Editor de Visual Basic.

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:

Una vez seleccionada la opción Propiedades de VBAProject te va aparecer un cuadro de dialogo en


donde vas a seleccionar la pestaña Protección en donde marcarás la opción “Bloquear proyecto para
visualización”. Debajo de esta opción debes ingresar la contraseña de tu preferencia para tener acceso al
Editor de Visual Basic. Esta contraseña te será solicitada la próxima vez que intentes editar el código al
momento de acceder al Editor de Visual Basic.

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.

Yo tengo una así

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:

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 continuación “Módulo”.

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:

Private Sub CommandButton1_Click()

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í:

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 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

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
Cómo copiar datos de Hoja1 a Hoja2 con una condición en Excel

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)

=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.

répondre #2

Poner la siguiente fórmula en la primera celda de la columna g

=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

Esto debe hacer lo que está después.

= IF(Sheet1!B1 = Hoja2!A1, Hoja2!D1)


répondre #4

= Si (exacta (Hoja1!B1, Hoja2!A1), Hoja2!D1)

La siguiente rutina va en el Editor en la Hoja1, controlando la selección 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

Macro copiar columnas rango variable


Hola Elsamatilde, llevo tiempo consultando la web de todoexpertos, y siempre que surge una duda intento
resolverla a partir de alguna respuesta que encuentro en el site, aunque no siempre es evidente!... Te
comento, tengo una tabla excel en hoja1 y quiero seleccionar, copiar y pegar a hoja 2 (donde tengo
fórmulas) columnas A, E y G, de rango variable, para entendernos, que el numero de filas varia!
Añadir que las columnas A, E y G de hoja1 tienen encabezamiento y los datos empiezan en fila 8. También
que las columnas anteriores al copiarse en hoja 2, aparecen en las columnas A, B y C a partir de la fila 3,
entendiendo que en fila 3 hay los encabezamientos.
He encontrado el código siguiente que he adaptado:
fila=Sheets("Hoja2").Range("A65536").End(xlUp).Row+2
Selection.Copy Destination:=Sheets("Hoja2").Cells(fila,1)
Pero para que funcione debo seleccionar manualmente las columnas A, E y G de Hoja1.
La duda... como puedo a partir de una macro "sencilla" que seleccione, copie y pegue las columnas A, ¿E y
G en la Hoja 2?

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.

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

También podría gustarte