Como filtrar datos desde un combobox y mostrar solo los registros Positivos.

Experto en excel buenos días, tengo una inquietud espero me ayuden tengo un userform en la cual tiene un combobox y un lisbox, lo que deseo que haga es cuando selecciono un diagnostico en este caso lo hice por dengue, requiero que me devuelva en el lisbox los registros de dengue pero solo positivos.

2 respuestas

Respuesta
1

Llama a esta macro en el evento Change del ComboBox

Sub filterByPositivos()
Dim pacientes As Worksheet: Set pacientes = Sheets("Pacientes")
Dim uF As Integer
Dim diagnostico As String, condicion As String
uF = pacientes.Range("A" & Rows.Count).End(xlUp).Row
If Trim(UserForm1.ComboBox1.Value) = "" Then
     UserForm1.ListBox1.RowSource = Clear
   Exit Sub
End If
AutoFilterMode = False
UserForm1.ListBox1 = Clear
UserForm1.ListBox1.RowSource = Clear
For i = 5 To uF
    diagnostico = pacientes.Cells(i, 3).Value
    condicion = pacientes.Cells(i, 4).Value
    If UCase(diagnostico) Like UCase(UserForm1.ComboBox1.Value) & "*" And UCase(condicion) Like "POSITIVO" Then
        UserForm1.ListBox1.AddItem pacientes.Cells(i, 1).Text
        UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 1) = pacientes.Cells(i, 2).Text
        UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 2) = pacientes.Cells(i, 3).Text
        UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 3) = pacientes.Cells(i, 4).Text
    End If
Next i
End Sub

Andy M

Me equivoque aquí:

Dim pacientes As Worksheet: Set pacientes = Sheets("Pacientes")

Puse el nombre de la hoja con S al final, solo quitale la S a esa palabra entre comillas, las otras déjalas como están.

Respuesta
1

Este es el resultado de la macro, la macro buscara lo que pongas en el combobox incluyendo una sola letra y te mostrara solo los resultados positivos en el listbox, los cuales cargara con todo y títulos

y esta es la macro

Private Sub ComboBox1_Change()
Set TABLA = Range("TABLA")
DIAGNOSTICO = ComboBox1.Value
Range("G4").CurrentRegion.Clear
With TABLA
    FILAS = .Rows.Count
    COL = .Columns.Count
End With
With ActiveSheet
        If .AutoFilterMode = True Then .AutoFilterMode = False
End With
With ActiveSheet.Range("a4")
.AutoFilter Field:=3, Criteria1:="=*" & DIAGNOSTICO & "*", Operator:=xlAnd
    .Range(TABLA.Address).AutoFilter Field:=4, Criteria1:="POSITIVO"
    Range("A4").CurrentRegion.Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Range("G4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End With
ActiveSheet.AutoFilterMode = False
Set DATOS = Range("G4").CurrentRegion
With DATOS
    FILAS = .Rows.Count
    COL = .Columns.Count
    Set DATOS = .Rows(2).Resize(FILAS, COL)
    With ListBox1
    .RowSource = DATOS.Address
    .ColumnCount = DATOS.Columns.Count
    .ColumnHeads = True
    End With
End With
SAL:
End Sub
Private Sub ListBox1_Click()
End Sub
Private Sub UserForm_Initialize()
Dim UNICOS As New Collection
Set DATOS = Range("A4").CurrentRegion
With DATOS
    FILAS = .Rows.Count
    Set DATOS = .Rows(2).Resize(FILAS - 1)
    With ListBox1
        .RowSource = DATOS.Address
        .ColumnCount = DATOS.Columns.Count
        .ColumnHeads = True
    End With
    For I = 1 To FILAS - 1
        DIAGNOSTICO = .Cells(I, 3)
        On Error Resume Next
            UNICOS.Add DIAGNOSTICO, CStr(DIAGNOSTICO)
            If Err.Number = 0 Then ComboBox1.AddItem DIAGNOSTICO
        On Error GoTo 0
    Next I
    .Name = "TABLA"
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Range("G4").CurrentRegion.Clear
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas