Macro para sumar lo que especifique en otra celda

Tengo una macro que hace una suma dependiendo de lo que ponga en dos celdas, mi libro es un registro de gastos mensuales, tiene 13 hojas, 12 de ellas son los doce meses del año. Cada hoja de esas está compuesta por la categoría de gastos; Ahorros, Salud, Hogar, etc. También tiene subcategorías, el concepto del gasto, la fecha y el monto total del gasto. La hoja 13 lo que tiene son 3 celdas, una de ellas es para seleccionar las categorías, otra es para seleccionar el mes, es decir, en la hoja en donde sacaré la suma y en la tercera celda, solo cuando las dos anteriores tengan información mostrará la suma, entonces, en el libro tengo 10 categorías de gastos, agregue una mas llamada "En general" (Es decir, todas las categorías) y en la casilla mes una opción llamada "Todos" (Todos los meses), lo que quiero modificar es que cuando use una u otra opcion de las anteriores o las dos al mismo tiempo, me omita todas las filas de las hojas que tengan como categoría "Otros" y como subcategoría "Compras".

1 Respuesta

Respuesta
1

Isaac Reyes Esta es la macro que hiciste amigo.

Function fcnCalcular(rngCeldaCat As Range, strColCat As String, rngCeldaMes As Range, _
                     Optional strOp As String = "CUENTA") As Double
    'Por GP'
    Dim strMeses() As Variant
    Dim strCeldaCat As String, strCeldaMes As String, strCeldaResult As String
    Dim i As Integer, nFilas As Integer
    strMeses = Array("Todos", "ene", "feb", "mar", _
                    "abr", "may", "jun", "jul", _
                    "ago", "sep", "oct", "nov", "dic")
    If LCase(rngCeldaMes) = "todos" Then                    'Todos los meses'
        If LCase(rngCeldaCat) = "en general" Then           'Todas las categorías'
            For i = 1 To 12
                nFilas = Sheets(strMeses(i)).Range("E200").End(xlUp).Row
                If strOp = "SUM" Then
                    fcnCalcular = fcnCalcular + WorksheetFunction.Sum(Sheets(strMeses(i)).Range("E6:E" & nFilas))
                Else
                    fcnCalcular = fcnCalcular + WorksheetFunction.Count(Sheets(strMeses(i)).Range("E6:E" & nFilas))
                End If
            Next
        Else
            For i = 1 To 12                                 'Una categoría específica'
                nFilas = Sheets(strMeses(i)).Range("E200").End(xlUp).Row
                If strOp = "SUM" Then
                    fcnCalcular = fcnCalcular + WorksheetFunction.SumIf( _
                                                Sheets(strMeses(i)).Range(strColCat & "6:" & strColCat & nFilas), _
                                                LCase(rngCeldaCat), _
                                                Sheets(strMeses(i)).Range("E6:E" & nFilas))
                Else
                    fcnCalcular = fcnCalcular + WorksheetFunction.CountIf( _
                                                Sheets(strMeses(i)).Range(strColCat & "6:" & strColCat & nFilas), _
                                                LCase(rngCeldaCat))
                End If
            Next
        End If
    Else                                                    'Un mes específico'
        With Sheets(LCase(rngCeldaMes))
            nFilas = .Range("E200").End(xlUp).Row
            If LCase(rngCeldaCat) = "en general" Then       'Todas las categorías'
                If strOp = "SUM" Then
                    fcnCalcular = WorksheetFunction.Sum(.Range("E6:E" & nFilas))
                Else
                    fcnCalcular = WorksheetFunction.Count(.Range("E6:E" & nFilas))
                End If
            Else                                            'Una categoría específica'
                If strOp = "SUM" Then
                    fcnCalcular = WorksheetFunction.SumIf( _
                                        .Range(strColCat & "6:" & strColCat & nFilas), _
                                        LCase(rngCeldaCat), _
                                        .Range("E6:E" & nFilas))
                Else
                    fcnCalcular = WorksheetFunction.CountIf( _
                                        .Range(strColCat & "6:" & strColCat & nFilas), _
                                        LCase(rngCeldaCat))
                End If
            End If
        End With
    End If
End Function

Saludos, Isaac Reyes esta fue la macro que hiciste amigo, me gustaría saber si me puedes ayudar por favor, solo necesito agregarle algo, pero no se como.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas