16- Búsqueda (FIND) en Excel con VBA

Поділитися
Вставка
  • Опубліковано 8 лис 2024

КОМЕНТАРІ • 24

  • @Antonio8688
    @Antonio8688 6 років тому

    Qué grato es haber encontrado tu canal. Había perdido tu pista. Gracias por tus enseñanzas.

    • @ElsaMatilde
      @ElsaMatilde  6 років тому

      Gracias Antonio por tus comentarios. Saludos cordiales.

  • @ElCanalDeNito
    @ElCanalDeNito 3 роки тому

    Hola Elsa, si me ha gustado mucho.
    Muy buenos lo ejemplos.
    Ya le he dejado mi 👍.
    Un cordial saludo.

  • @gamalielsierraaltauria5950
    @gamalielsierraaltauria5950 6 років тому

    Gracias Elsa Matilde, tus enseñanzas son valiosas.

    • @ElsaMatilde
      @ElsaMatilde  6 років тому

      Gracias Gamaliel. Me motivas a continuar con esta tarea... ya se viene el próximo video. Saludos cordiales!

  • @josemariacorderoherrera640
    @josemariacorderoherrera640 2 місяці тому

    Gracias por compartir doña Elsa. En el caso que el rango de búsqueda tenga un filtro el método find no logra encontrar los valores ocultados por el filtro. ¿Que sugiere en esos casos?

    • @ElsaMatilde
      @ElsaMatilde  2 місяці тому +1

      Hola. Una opción sería quitar el filtro, hacer la búsqueda y volver a colocar el filtro. Dejo un pequeño ejemplo:
      Sub busca_con_filtro()
      'dato a buscar en la col C
      dato = "mayo"
      'se quitan posibles filtros
      If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
      On Error GoTo noEncontrado
      Range("C:C").Find(what:=dato, LookIn:=xlValues, lookat:=xlWhole).Activate
      'si encuentra el dato guarda la ubicación en una variable o mensaje
      MsgBox ubica 'opcional
      'vuelve a colocar el filtro que tenía
      ActiveSheet.Range("$A$4:$D$26").AutoFilter Field:=1, Criteria1:="" & "COBRANZAS"
      Exit Sub
      noEncontrado:
      MsgBox "No se encontró el texto " & dato & " en la col C"
      'vuelve a colocar el filtro que tenía
      ActiveSheet.Range("$A$4:$D$26").AutoFilter Field:=1, Criteria1:="" & "COBRANZAS"
      End Sub
      Otra opción es recorrer el rango con un bucle del tipo For... Next donde se incluyan las celdas ocultas:
      Sub busca_con_ocultos()
      'dato a buscar en la col C
      dato = "OCT"
      For i = 5 To Range("A" & Rows.Count).End(xlUp).Row
      If Range("C" & i) = dato Then
      MsgBox "Dato encontrado en fila " & i
      Exit For
      End If
      Next i
      End Sub

    • @josemariacorderoherrera640
      @josemariacorderoherrera640 2 місяці тому +1

      @@ElsaMatilde muchísimas gracias por compartir su conocimiento. En mi caso prefiero la opción de quitar y poner los filtros para usar el Find dado que se trata de muchos registros a evaluar. Le saludo desde Costa Rica 🇨🇷.

  • @vicodca2
    @vicodca2 4 роки тому

    que buen video, tenés un suscriptor nuevo, enseñas muy bien y muchas gracias por compartir

  • @nicoromano2225
    @nicoromano2225 3 роки тому

    Buen video 👌

  • @ShadowGG7
    @ShadowGG7 2 роки тому

    Hola Elsa, muy bueno tu vídeo. // Quisiera aprovechar hacerte una consulta. Yo quiero usar el metodo (Find) para encontrar un valor en una columna, la cual dicha columna tendra en su mayoria valores cero (0).
    Supongamos:
    En la columna: H10:H20 hay valores que en su mayoria son Ceros (0)
    pero en la celda H15 hay un numero 77 y en la celda H19 hay un numero 14.
    Entonces quiero que por medio de FIND me encuentre el PRIMER valor DIFERENTE a cero de esa columna.
    Que en este ejemplo que te dí debería de devolver 77...
    Espero me haya dado a entender, y me puedas ayudar!

    • @ElsaMatilde
      @ElsaMatilde  2 роки тому +1

      Con Find podrías encontrar los valores distintos a 0, con el argumento What:= "*" , si tienes activada la opción de 'ocultar ceros' como explico en el video N° 57 a partir del minuto 6:11. Sino tendrías que utilizar algún tipo de bucle como este:
      Sub buscaPrimerValor() 'ajustar col y rango total
      For i = 10 To 20
      If Range("H" & i) 0 Then resulta = Range("H" & i): Exit For
      Next i
      'opcional: indicar en qué fila se encontró la celda y su valor.
      MsgBox "El primer valor es " & resulta & " y se encuentra en la fila " & i
      End Sub

    • @ShadowGG7
      @ShadowGG7 2 роки тому

      @@ElsaMatilde Gracias, para lo que ocupaba me sirvió el ciclo FOR que me mostraste. Ya que NO podía ocultar los valores cero, siempre debían de ser reflejados en la tabla por eso lo del video N° 57 no me funciona. Saludos!

  • @vicodca2
    @vicodca2 3 роки тому

    como obtengo solo la fila o solo la columna de un texto buscado?

    • @ElsaMatilde
      @ElsaMatilde  3 роки тому

      En el minuto 13:24 del video podrás observar la macro completa con la información de los posibles resultados: busco.Row y busco.Column (fila y columna del texto encontrado). Address sería para la referencia completa. Sdos!

    • @vicodca2
      @vicodca2 3 роки тому

      @@ElsaMatilde exacto, ya lo aclaré y entendí, muchas gracias por compartir tus conocimientos, no tenés idea de lo mucho que me ayudás (cada video tuyo lo veo como 10 veces) gracias y saludos desde bolivia

  • @armandobrito5022
    @armandobrito5022 4 роки тому

    Elsa Excelente contenid como siempre, te que consultar por algo que no he podido realizar con una macro para eliminar caracteres especiales tipo blanco que existen en una columna del Sku, son espedificamente 5 valores que los destaque en color amarilo, aplique una macro pero no hace lo que requiero. Te dejo el enlace drive.google.com/file/d/1knTvnxE8Aj1CeDe-Uo75AXuzJV7olfO1/view?usp=sharing y ojala me puedas orientar.Gracias.

    • @ElsaMatilde
      @ElsaMatilde  4 роки тому

      Hola. No es fácil atender consultas por este medio porque no se pueden mostrar imágenes o códigos. Dejala en el tablón Excel de todoexpertos y desde allí la seguiremos. En principio tu hoja no tiene caracteres especiales como el espacio (CHR(160)), quizás porque ya hiciste correr la macro. Aclarame porqué consideras que esas 5 celdas no están como las esperas... se ven igual al resto. Sdos!

    • @armandobrito5022
      @armandobrito5022 4 роки тому

      @@ElsaMatilde debido que al momento de hacer un cruce con otra hoja esos 5 sku no me los reconoce. De todas maneras lo voy a plantear en el tablon de todoexpertos. Saludos

    • @ElsaMatilde
      @ElsaMatilde  4 роки тому

      @@armandobrito5022 Es otro el motivo entonces. Porque le corrí un código para ver si tenían espacios extras y no los tiene. También podrás comprobarlo colocando en cualquier celda la función: =LARGO(celda) y verás que te da la cantidad justa de los caracteres mostrados. Quizás el problema lo tiene la otra hoja.

    • @armandobrito5022
      @armandobrito5022 4 роки тому +1

      @@ElsaMatilde gracias elsa tenias razón era otro el asunto bastante simple cambiar el formato a General y ahí me reconoció el cruce. Se agradece tu colaboración. Saludos

  • @juancarlosvelez8458
    @juancarlosvelez8458 5 років тому

    Hola Elsa muy buenos los vídeos, costo mucho en ubicarte.
    Por favor necesitaría saber como adjuntar mi archivo para lograr modificar mi Macro VB
    La Macro Busca datos y lo Pega en otra Hoja
    Necesitaría modificar la macro "Resumen" ya que la misma pasa la información desde la hoja "Facturas" a la "Resumen".
    Lo que pretendo de ser factible que al pasar la información a la hoja "Resumen" al no tener el importe del servicio que coloque la fecha del mismo.
    Yo lo realice manualmente, pero al sumar los importe, la fecha ( que es una cifra ) también la totaliza.
    Quisiera lograr con la macro que:
    Primero: Pasar la fecha
    Segundo: que a totalizar ignore la fecha y sume lo que es importe solamente.
    Sub resumen()
    Dim uFo&, uFd&
    Dim servO As New Collection
    Dim celO As Range, servD As Range, servN As Range, mes As Range
    Dim item
    Dim primer$, servicio$
    uFo = Range("C" & Rows.Count).End(xlUp).Row 'última fila con datos
    'Llenamos la colección con los servicios sin repetidos
    For Each celO In Range("C5:C" & uFo)
    On Error Resume Next
    servO.Add celO, CStr(celO)
    Next celO
    'Trabajamos sobre la hoja3
    With Sheets("Resumen")

    uc = .Cells(1, Columns.Count).End(xlToLeft).Column 'Última columna con datos
    uFd = .Range("A" & Rows.Count).End(xlUp).Row + 1 'Última fila con datos
    .Range(.Cells(3, "A"), .Cells(uFd, uc)).ClearContents 'Limpiamos los datos anteriores

    'Pasamos la colección de los servicios
    i = 3
    For Each item In servO
    .Cells(i, "A") = item
    i = i + 1
    Next item


    'Recorremos los servicios
    j = 3
    Do While .Cells(j, "A") ""
    For Each celO In Range("C5:C" & uFo) 'Buscamos el servicio en la hoja facturas
    If Trim(celO) = Trim(.Cells(j, "A")) And celO.Offset(, -2) "" Then 'Si encontramos el servicio y está al lado del mes...
    Set mes = .Range(.Cells(1, 1), .Cells(1, uc)).Find(celO.Offset(, -2), lookat:=xlWhole) 'Buscamos el mes en la fila 1 de la hoja3
    .Cells(j, mes.Column) = celO.Offset(0, 3) 'Pasamos el dato de importe de la hoja facturas
    ElseIf Trim(celO) = Trim(.Cells(j, "A")) And celO.Offset(, -2) = "" Then 'Si encontramos el servicio y esta entre los mmeses...
    Set mes = Sheets("Facturas").Range(Cells(celO.Row, 1), Cells(2, 1)).Find("*", after:=Range(celO.Offset(, -2).Address), searchdirection:=xlPrevious) 'Buscamos el mes, desde la columna A del servicio y hacia arriba
    Set mes = .Range(.Cells(1, 1), .Cells(1, uc)).Find(mes, lookat:=xlWhole)
    .Cells(j, mes.Column) = celO.Offset(0, 3)

    End If
    Next celO
    j = j + 1 'Seguimos recorriendo los servicios de la hoja3
    Loop

    uFd = .Range("A" & Rows.Count).End(xlUp).Row + 1 'Ultima fila con datos
    For k = 2 To uc + 0
    .Cells(uFd, k) = WorksheetFunction.Sum(.Range(.Cells(3, k), .Cells(uFd - 1, k)))
    Next k
    End With
    Sheets("Resumen").Select
    ultimafila
    End Sub

    • @ElsaMatilde
      @ElsaMatilde  5 років тому

      Te acabo de enviar un mail. Si no lo encontrás (habrás cambiado de correo ? ) escribime al gmail que aparece en la portada de mi sitio web. Sdos!