Saltar al contenido

Buscar en cualquier libro, hoja, columna


Antoni

Recommended Posts

Hola a todos:

Aunque se ha contestado a esta cuestión un montón de veces, y como parece que la gente no se entera, porqué siguen preguntando lo mismo una y otra vez, a ver si tenemos mas suerte y se fijan en esta función.

Function Buscar(Valor As Variant, _
Optional Columna As Integer = 1, _
Optional Hoja As Worksheet) As Double
On Error GoTo NotFound
If Hoja Is Nothing Then Set Hoja = ActiveSheet
Hoja.Activate
Columns(Columna).Find(Valor).Select
Buscar = Selection.Row
Exit Function
NotFound:
Buscar = 0
End Function
[/CODE]

Esta función, busca un valor en una columna, de cualquier hoja, de cualquier libro.

Si encuentra el valor, devuelve el número de fila, si no lo encuentra, devuelve 0.

Consta de tres parámetros:

[CODE]
Valor El valor a buscar Obligatorio
Columna Columna en donde buscar Opcional Se asume 1
Hoja Hoja donde buscar Opcional Se asume ActiveSheet

La forma de llamada es:
Fila = Buscar(Valor, Columna, Hoja)[/CODE]

Ejemplos:

Busca "Antoni" en la columna 1 de la hoja activa

[CODE]Fila = Buscar("Antoni")[/CODE]

Busca "Antoni" en la columna 3 de la hoja activa

[CODE]Fila = Buscar("Antoni", 3)[/CODE]

Busca "Antoni" en la columna 3 de la hoja "Proveedores"

[CODE]Set MiHoja = ThisworkBook.Sheets("Proveedores")
Fila = Buscar("Antoni", 3, MiHoja)[/CODE]

Busca "Antoni" en la columna 3 de la hoja "Proveedores", en el libro Cuentas.xls

[CODE]Set MiHoja = WorkBooks("Cuentas.xls").Sheets("Proveedores")
Fila = Buscar("Antoni", 3, MiHoja)[/CODE]

A tener en cuenta: Si se informa el parámetro Hoja, cambia la hoja activa.

Saludos a todos. Antoni.

Enlace a comentario
Compartir con otras webs

Hola Gerson:

Efectivamente, hay un error, no se como ha pasado, porqué lo probé mucho, pero ha pasado.

Queda así:

Function Buscar(Valor As Variant, _
Optional Columna As Integer = 1, _
Optional Hoja As Worksheet) As Double
On Error GoTo NotFound
If Hoja Is Nothing Then Set Hoja = ActiveSheet
Hoja.Activate
Hoja.Columns(Columna).Find(Valor).Select '<============================
Buscar = Selection.Row
Exit Function
NotFound:
Buscar = 0
End Function[/CODE]

De todas formas, en el adjunto, van todos los ejemplos.

Abrir Libro1.xls para verlos.

Gracias Gerson. Saludos. Antoni.

Libro1.zip

Enlace a comentario
Compartir con otras webs

Crear una cuenta o conéctate para comentar

Necesitas ser usuario para poder dejar un comentario

Crear una cuenta

Registrarse para una nueva cuenta en nuestra comunidad. ¡Es fácil!

Registrar una nueva cuenta

Conectarse

¿Ya tienes una cuenta? Conéctate aquí.

Conéctate ahora
  • 95 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Muchas gracias me a servido de mucho su colaboaracion y ayuda.   Excelente aporte amigo.
    • Gracias @Victor7. La solución que me das no es valida para mi proyecto ya que la idea es que en la pestaña DATAGlobal se vayan añadiendo registros, por lo que la formulas deben ser dinámicas en el sentido que según vaya añadiendo registros, se vayan completando el cuadro con los valores únicos.    Por otro lado, no puedo prescindir de la pestaña de valores únicos por que con esa información realizo otro tipo de informes con unidades totales, graficas con las fechas etc.. Muchas gracias por la ayuda
    • Abre el adjunto y pulsa el botón  GENERAR HOJAS y luego pulsa sobre cualquier fecha del calendario para ir a la hoja deseada. Observa que he añadido 2 botones en la hoja CALENDARIO, uno para generar las hojas y otro para eliminarlas. También he añadido una flechita azul en las hojas generadas para volver a la hoja CALENDARIO. Estas son las macros: En la hoja CALENDARIO: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d As Integer, m As Integer, a As Integer On Error Resume Next If IsNumeric(Target) Then If Not Target = "" Then x = Int((Target.Row - 6) / 9) y = Int((Target.Column - 5) / 8) + 1 m = x * 6 + y d = Target a = Right([E3], 4) Sheets(Format(d, "00") & "-" & Format(m, "00") & "-" & a).Activate End If End If End Sub En el Módulo1: Sub GenerarHojas() Application.ScreenUpdating = False Application.CopyObjectsWithCells = True Dim a As Integer a = Right([E3], 4) With Sheets("ORIGI") For fecha = CDate("01/01/" & a) To CDate("31/12/" & a) '<-- Periodo a generar .Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Format(fecha, "dd-mm-yyyy") [B4] = [B4] & " " & fecha Next End With Volver End Sub '-- Sub EliminarHojas(): On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Dim a As Integer a = Right([E3], 4) For fecha = CDate("01/01/" & a) To CDate("31/12/" & a) '<-- Periodo a eliminar Sheets(Format(fecha, "dd-mm-yyyy")).Delete Next End Sub '-- Sub Volver() Sheets("CALENDARIO").Activate End Sub   Libro1 (15).xlsm
    • Hola un cordial saludo a todos.  Tengo una hoja con un formato de calendario y tengo 365 hojas cada una con nombre de un dia mes y año  en especifico agradecería me ayuden a como puedo realizar la vinculacion de cada dia del calendario con cada hoja respectivamente sin hacerlo de forma manual , ya que es muy laborioso dado que lo tengo que hacer de una por una.   adjunto coloco un ejemplo de lo que tengo gracias. Libro1.xlsm
    • Muchas gracias @Israel Cassales. La hoja es un ejemplo de como seria la hoja definitiva. ( Por desgracia no puedo poner la información real). Los datos los saco de un registro automático por donde pasan unidades con un numero de referencia único para cada producto. Estas unidades pasan por unos puntos de control y en el registro automático se graban duplicando el numero de producto e indicando el registro del nuevo punto de control. Se que parece un poco lío explicado por aqui. Probaré la solución de @Victor7 y comentaré por aquí los progresos. Muchas gracias   
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.