Según el valor de una celda, buscar todos los registros coincidentes y mostrarlos en forma alfabética en otra hoja

Estimado tengo un excel que tiene 2 hojas una con los datos y otra donde quiero que me muestre sólo los datos según el valor dado en una celda con lista de validación. Por ejemplo que me muestre a todos registros que tienen por apellido "LORCA", con todos los datos y ordenados en forma alfabética.

2 respuestas

Respuesta
1

Puedes hacer una macro que aplique los principios del filtro avanzado.

Te lo explico en el siguiente ejemplo:

He asignado al rango de datos A5:F102 en Hoja1 el nombre MISDATOS.

He asignado al rango A1:F2 el nombre MISCRITERIOS copiando los nombres de los campos en la fila 1.

He asignado a la celda A1 de la Hoja2 el nombre MIUBICACION.

La siguiente macro, escrita en un módulo de VBA, genera una acción de filtro avanzado

Sub Filtrar()
Worksheets("Hoja2").Cells.Clear
[MISDATOS].CurrentRegion.Name = "MISDATOS"
[MISDATOS].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[MISCRITERIOS], CopyToRange:=[MIUBICACION], Unique:=False
End Sub

Se crea un botón, se le asigna la macro, de nombre Filtrar. Al pulsar se filtra la lista y se copia en la hoja 2 en función del texto introducido (en este ejemplo "jlara" en ResponsableTL) en la fila 2 de MISCRITERIOS.

La Hoja2 resultaría así:

Para ordenar por orden alfabético obviamente depende del campo por el que quieras ordenar pero basta seleccionar una celda (una sola) de esa columna y pulsar la tecla de ordenar AZ. También puedes grabar esta acción como macro y añadirla.

Respuesta
1

Pon la siguiente macro en los eventos de tu hoja

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Address(False, False) = "C1" Then
        If Target.Count > 1 Then Exit Sub
        Set h1 = Sheets("Datos")
        Set h2 = Sheets("Planilla_libro")
        '
        u1 = h1.Range("D" & Rows.Count).End(xlUp).Row
        u2 = h2.Range("C" & Rows.Count).End(xlUp).Row
        If u2 = 3 Then u2 = 4
        h2.Range("A4:X" & u2).ClearContents
        '
        If h1.AutoFilterMode Then h1.AutoFilterMode = False
        h1.Range("A10:AF" & u1).AutoFilter Field:=32, Criteria1:="=" & Target.Value
        u3 = h1.Range("D" & Rows.Count).End(xlUp).Row
        If u3 = 10 Then
            MsgBox "No existen nombres con : " & Target.Value, vbExclamation, "BUSCAR NOMBRES"
        Else
            h1.Range("B11:K" & u3 & ",P11:U" & u3 & ",W11:AD" & u3).Copy h2.[A4]
        End If
        h1.[A10].AutoFilter
        h2.[C1].Select
    End If
End Sub

Saludos.Dante Amor

No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas