Macro para filtros en excel

Dante mira lo que necesito es hacer unos filtros iniciales sobre una BD por ejemplo:

Columna1(contratistas) : excluir clausulas, convenios uy vacías

Columna2(estados): excluir estados cancelados

Columna3(responsable compra) : compraodres que ya no exiten en la empresa

Pueden ser en un botón o no se.

Y después de ya la base de datos depurada que halla un combo box o donde puedan escribir el mes por del año por pero de una columna solamente y estos mismo para otras columnas (osea filtrar un mes de la columna orden de inicio ) pero que lo puedan ingresar por se necesitan ver por separado y plasmar la inofrmacion .

1 respuesta

Respuesta
1

Envíame tu archivo, en la hoja1 me pones tu base de datos (algunos ejemplos).

En la hoja2 me pones el resultado del filtro

En la hoja3 me pones qué criterios quieres filtrar. Me explicas en la hoja con comentarios y colores lo de filtrar con mes, ya que no me quedó muy claro.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Eli Perez” y el título de esta pregunta.

Quedo atenta ya te la envíe al correo al idea es que basada en la columna "orden de inicio real " se pueda ingresar en un cuadrito el mes y año que se quiere analizar y filtrar

Te anexo la macro para userform

Dim h1, h2, h3, h4
'
Private Sub CommandButton1_Click()
'Por.Dante Amor
    If ComboBox1.Value <> "" Then
        If ComboBox2.Value = "" Or ComboBox2.ListIndex = -1 Then
            MsgBox "Selecciona un año", vbExclamation
            ComboBox2.SetFocus
            Exit Sub
        End If
    Else
        If ComboBox2.Value <> "" Then
            MsgBox "Selecciona un mes", vbExclamation
            ComboBox1.SetFocus
            Exit Sub
        End If
    End If
    '
    j = 2
    For i = 2 To h1.Range("D" & Rows.Count).End(xlUp).Row
        'busca exclusiones
        compra = h1.Cells(i, "D")
        proced = h1.Cells(i, "H")
        estado = h1.Cells(i, "O")
        fecha = h1.Cells(i, "AF")
        '
        If ComboBox1.Value <> "" Then
            mes = ComboBox1.ListIndex + 1
            año = Val(ComboBox2)
        Else
            mes = Month(fecha)
            año = Year(fecha)
        End If
        '
        If Month(fecha) = mes And Year(fecha) = año Then
            Set b = h2.Columns("A").Find(compra, lookat:=xlWhole)
            If b Is Nothing Then
                Set b = h2.Columns("C").Find(proced, lookat:=xlWhole)
                If b Is Nothing Then
                    Set b = h2.Columns("E").Find(estado, lookat:=xlWhole)
                    If b Is Nothing Then
                        'copiar
                        h1.Rows(i).Copy h3.Rows(j)
                        j = j + 1
                    End If
                End If
            End If
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Filtro terminado", vbInformation
    Unload Me
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    '
    Set h1 = Sheets("Datos originales")
    Set h2 = Sheets("exclusiones")
    Set h3 = Sheets("Orden de inicio")
    Set h4 = Sheets("temp")
    '
    H3.Rows("2:" & Rows. Count). Clear
    H4. Cells. Clear
    Application.ScreenUpdating = False
    'copia fechas
    H1. Columns("AF"). Copy h4. Range("A1")
    u4 = h4.Range("A" & Rows.Count).End(xlUp).Row
    h4.Range("B1") = h4.Range("A1")
    With h4.Range("B2:B" & u4)
        .FormulaR1C1 = "=IF(RC[-1]="""","""",YEAR(RC[-1]))"
        .Value = .Value
    End With
    h4.Range("B1:B" & u4).RemoveDuplicates Columns:=1, Header:=xlYes
    '
    'carga años
    For i = 2 To h4.Range("B" & Rows.Count).End(xlUp).Row
        If h4.Cells(i, "B") <> "" Then
            ComboBox2.AddItem h4.Cells(i, "B")
        End If
    Next
    '
    'carga meses
    For i = 1 To 12
        ComboBox1.AddItem WorksheetFunction.Proper(Format(DateSerial(Year(Date), i, 1), "mmmm"))
    Next
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas