Buscar con macro un texto en un rango de celdas
Buenas tardes estimada Elsa, te comento que ejecuté la macro que hiciste favor de enviarme y funcionó muy bien, sólo que me faltó comentar y aclarar (error mío) que los títulos de columna de la fila 3 están en orden diferente tanto en la Hoja1 como en la Hoja2, por lo que al ejecutar la macro, copia en la Hoja2 la columna de la Hoja1 de manera automática pero en el orden en que se encuentran y no validando si el texto de hoja1 coincide con el de Hoja2. Ese es el principal problema que tengo que no se como comparar cada uno de los títulos de columna (textos fila3) de la Hoja2 en cada uno de los títulos de columna (textos fila3) de la Hoja1 y cuando exista la coincidencia entonces toda esa columna encontrada de Hoja1 se copie a la Hoja2 al lado izquierdo de la columna que contenía el dato de coincidencia.
Por ejemplo, en la Hoja2 tengo la columna con el título "NETO" (que está en la celda AH3) y deseo buscarlo en la Hoja1 en el rango A3:T3, la macro buscaría la palabra "NETO" en ese rango y al encontrar la concidencia (que sería en la celda T3 de la Hoja1) entonces toda esa columna T se copiaría a la Hoja2 al lado izquierdo de donde está el concepto "NETO" (o sea se pegaría en la celda AG3 porque hubo coincidencia de datos). Y la idea sería esa: cada título de columna de la Hoja2 buscarla en los títulos de columna de la Hoja1 y cuando se encuentre coincidencia entonces copiar y pegar de la Hoja1 a la Hoja2 la columna de coincidencia.
Disculpa tanta molestia, el día de ayer me la pasé leyendo la ayuda de VB que está en excel para encontrar funciones que pienso pudieran ayudarme (Buscarv, BuscarH, Find) pero para uno que empieza con esto del lenguaje de programación aún es algo complicado el entenderlo. Me desesperé y por ello decidí molestarte nuevamente.
Agradezco nuevamente tu atención y ayuda y quedo a tus órdenes.
Saludos.
Del código que me hiciste favor de enviar le hice algunas modificacionesquedando así:
Sub CopiarCuentasContables()
'x Elsamatilde
'me aseguro de ejecutarla desde la hoja2
Sheets("Hoja2").Select
'guardo el númeroro de la última columna ocupada en hoja2
fincol = Range("IV3").End(xlToLeft).Column
'guardo la 1er col de destino DE LA HOJA2
col = 1
'guardo última fila de datos en Hoja1
finfil = Sheets("Hoja1").Range("A65536").End(xlUp).Row
'Se elige la celda activa y al terminar el bucle pasa a la siguiente celda con datos
'esto es en la hoja 2
Range("B3").Select
While ActiveCell.Column <= fincol
Dim mihoja As String, donde As String
Dim quebusco As String
Dim resulta As Object
'Defino la hoja y rango en que se hará la búsqueda y lo que busco
mihoja = Sheets(1).Select
donde = Range("A3:T3").Select
quebusco = ActiveSheet.Range("B3").Value
'se crea un objeto set con el resultado de la función find
Set resulta = Sheets(1).Range("A3:T3").Find(quebusco, LookIn:=xlValues, lookat:=xlWhole)
If resulta Is Nothing Then
ActiveCell.Offset(0, 2).Select
Else
Selection.EntireColumn.Copy Destination:=ActiveSheet.Cells(1, ActiveCell.Column - 1)
End If
Wend
End Sub
El problema es que el comando marcado en negritas me marca error en el depurador y aunque lo he modificado no encuentro como definirle a excel que lo que deseo es que si encontró el valor buscado entonces esa columna la copie.
Agradezco inmensamente el apoyo.
Saludos.
Por ejemplo, en la Hoja2 tengo la columna con el título "NETO" (que está en la celda AH3) y deseo buscarlo en la Hoja1 en el rango A3:T3, la macro buscaría la palabra "NETO" en ese rango y al encontrar la concidencia (que sería en la celda T3 de la Hoja1) entonces toda esa columna T se copiaría a la Hoja2 al lado izquierdo de donde está el concepto "NETO" (o sea se pegaría en la celda AG3 porque hubo coincidencia de datos). Y la idea sería esa: cada título de columna de la Hoja2 buscarla en los títulos de columna de la Hoja1 y cuando se encuentre coincidencia entonces copiar y pegar de la Hoja1 a la Hoja2 la columna de coincidencia.
Disculpa tanta molestia, el día de ayer me la pasé leyendo la ayuda de VB que está en excel para encontrar funciones que pienso pudieran ayudarme (Buscarv, BuscarH, Find) pero para uno que empieza con esto del lenguaje de programación aún es algo complicado el entenderlo. Me desesperé y por ello decidí molestarte nuevamente.
Agradezco nuevamente tu atención y ayuda y quedo a tus órdenes.
Saludos.
Del código que me hiciste favor de enviar le hice algunas modificacionesquedando así:
Sub CopiarCuentasContables()
'x Elsamatilde
'me aseguro de ejecutarla desde la hoja2
Sheets("Hoja2").Select
'guardo el númeroro de la última columna ocupada en hoja2
fincol = Range("IV3").End(xlToLeft).Column
'guardo la 1er col de destino DE LA HOJA2
col = 1
'guardo última fila de datos en Hoja1
finfil = Sheets("Hoja1").Range("A65536").End(xlUp).Row
'Se elige la celda activa y al terminar el bucle pasa a la siguiente celda con datos
'esto es en la hoja 2
Range("B3").Select
While ActiveCell.Column <= fincol
Dim mihoja As String, donde As String
Dim quebusco As String
Dim resulta As Object
'Defino la hoja y rango en que se hará la búsqueda y lo que busco
mihoja = Sheets(1).Select
donde = Range("A3:T3").Select
quebusco = ActiveSheet.Range("B3").Value
'se crea un objeto set con el resultado de la función find
Set resulta = Sheets(1).Range("A3:T3").Find(quebusco, LookIn:=xlValues, lookat:=xlWhole)
If resulta Is Nothing Then
ActiveCell.Offset(0, 2).Select
Else
Selection.EntireColumn.Copy Destination:=ActiveSheet.Cells(1, ActiveCell.Column - 1)
End If
Wend
End Sub
El problema es que el comando marcado en negritas me marca error en el depurador y aunque lo he modificado no encuentro como definirle a excel que lo que deseo es que si encontró el valor buscado entonces esa columna la copie.
Agradezco inmensamente el apoyo.
Saludos.