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.

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.

1 respuesta más de otro experto

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