Modificar macro para hacer una suma condicional en varias hojas

Tengo una macro totalmente funcional que quisiera hacerle unas pequeñas modificaciones. La uso en un libro que sirve como registro de gastos e ingresos, se compone de 13 hojas, 12 de ellas son los meses del mes y en la número 13 hay un resumen de todo, ahí es donde se manifiesta la macro. Lo que hace es una suma dependiendo de dos celdas, una es para poner la categoría (D15) y otra para poner el mes (F15) y me muestra la suma en la celda H15. Aparte de la suma, también uso la misma macro como contador, cuando lleno las dos celdas (D15 y F15), en la celda G34 me cuenta los gastos que hice con los datos que llené, espero me puedan ayudar, son pocas modificaciones, si responden publico la macro para que no sea tan extensa la consulta, muchas gracias de antemano. Elsa Matilde Isaac Reyes James Bond Abraham Valencia Julián González Cabarcos

1 respuesta

Respuesta
1

De hecho en un post con una pregunta similar tuya ya te pedí que publicaras una imagen de tus datos platicado no me queda claro lo que quieres

No hay problema, esta es la macro, te enviaré todo lo que necesites:

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("E501").End(xlUp).Row
                If strOp = "SUM" Then
                    fcnCalcular = fcnCalcular + WorksheetFunction.Sum(Sheets(strMeses(i)).Range("E5:E" & nFilas))
                Else
                    fcnCalcular = fcnCalcular + WorksheetFunction.Count(Sheets(strMeses(i)).Range("E5:E" & nFilas))
                End If
            Next
        Else
            For i = 1 To 12                                 'Una categoría específica'
                nFilas = Sheets(strMeses(i)).Range("E501").End(xlUp).Row
                If strOp = "SUM" Then
                    fcnCalcular = fcnCalcular + WorksheetFunction.SumIf( _
                                                Sheets(strMeses(i)).Range(strColCat & "5:" & strColCat & nFilas), _
                                                LCase(rngCeldaCat), _
                                                Sheets(strMeses(i)).Range("E5:E" & nFilas))
                Else
                    fcnCalcular = fcnCalcular + WorksheetFunction.CountIf( _
                                                Sheets(strMeses(i)).Range(strColCat & "5:" & strColCat & nFilas), _
                                                LCase(rngCeldaCat))
                End If
            Next
        End If
    Else                                                    'Un mes específico'
        With Sheets(LCase(rngCeldaMes))
            nFilas = .Range("E501").End(xlUp).Row
            If LCase(rngCeldaCat) = "en general" Then       'Todas las categorías'
                If strOp = "SUM" Then
                    fcnCalcular = WorksheetFunction.Sum(.Range("E5:E" & nFilas))
                Else
                    fcnCalcular = WorksheetFunction.Count(.Range("E5:E" & nFilas))
                End If
            Else                                            'Una categoría específica'
                If strOp = "SUM" Then
                    fcnCalcular = WorksheetFunction.SumIf( _
                                        .Range(strColCat & "5:" & strColCat & nFilas), _
                                        LCase(rngCeldaCat), _
                                        .Range("E5:E" & nFilas))
                Else
                    fcnCalcular = WorksheetFunction.CountIf( _
                                        .Range(strColCat & "5:" & strColCat & nFilas), _
                                        LCase(rngCeldaCat))
                End If
            End If
        End With
    End If
End Function

James Bond 

Esa es la estructura de las 12 hojas, llega hasta la fila 500:

Aquí es donde se manifiesta la macro:

¿Amigo? 

Ya vi tu macro y me cuesta entenderla sin datos, lo único que me queda claro es que te la hizo Gerson Pineda yo creo que te deberías dirigir a el para que te haga la mejora que quieres, la otra opción es que subas una copia de tu archivo a la nube y pegues el link aquí, ando un poco ocupado también con cosas personales y macros propias que me están consumiendo un buen de tiempo en cuanto tenga algo de tiempo lo analizare (en caso de que lo subas)

Saludos, no, me la hizo Isaac Reyes, o por lo menos el fue quien me respondio en mi consulta , pero él no me contesta y necesito terminar el proyecto, te agradecería un mundo tu ayuda, solo me hace falta agregarle dos condiciones.

Estas fueron las consultas:

Saludos, me gustaría saber si sabes hacer una macro para que recorra 12 hojas, cada una es un registro de los gastos de cada mes

¿Se puede hacer una fórmula o macro para que recorra varias hojas contando lo que le especifique en otra celda?

Es un proyecto un tanto privado, me gustaría enviártelo, ¿cómo te lo hago llegar de forma privada?

Inventa los datos no se necesitan datos reales, y esta raro Gerson Pineda firma sus macros al principio de las mismas con GP por eso y por estilo de programación pensé que era de el, en categoría pon categoría 1, categoria2, en subcategoría pon subcategoría 1,2 y así en las demás columnas texto en totales pon la función aleatorio. Entre() y ya tienes un archivo ficticio para hacer pruebas

Saludos James.

Aquí te dejo el vínculo, la persona que me dijiste que tal vez hizo la macro, tampoco me respondo, espero contar contigo cuando tengas tiempo, aquí está el link:

https://drive.google.com/file/d/1j7mA61iCLKj2TOsbWjZPJKg-X4Zr4AbV/view?usp=sharing 

Cuando subas un archivo no le pongas ninguna contraseña así ni como ayudarte

¿Y explícame con más detalle que es lo que quieres ajustar en la macro?

https://drive.google.com/file/d/1hv-gbhIzIvxzVr5gtxV7IZd2jtOL2y8y/view?usp=sharing 

Ahí está.

Creo que no me explique bien tus macros tienen password, esto pasa cuando quiero abrir el panel de programación

Ok, se me olvidó quitárselas, no puedo actualizar el vínculo ahora, la contraseña es: 4658123907.

¿Y la clave de protección de la hoja es?

La misma.

¿Y sigo preguntando cuales son las modificaciones?

Bien... Si te fijaste hay unas celdas con color gris en la hoja "Resumen", eso es lo que me falta. Son dos macros, una de ellas es para sumar solo los gastos y contarlos (Módulo 1), la otra es para buscar la cantidad menor y mayor dependiendo de lo que ponga en D15 y F15 (Módulo 3). Lo que necesito es que agregues unas condiciones, te dejo el link de un archivo de word con las modificaciones correspondientes.

https://drive.google.com/file/d/145_2qOAxV4kghpB0a9y5d3ZRuLkwfzCi/view?usp=sharing 

Sería bueno que en un futuro yo mismo, en caso de que quiera agregarle más palabras para omitirlas, sea fácil o me expliques cómo puedo seguir agregando.

Muchas gracias amigo, me salvaste. Si logras ayudarme y hacerlo, te agradecería que me enviaras la macro por correo, [email protected]

¿Amigo?

La clave (4658123907) para quitar la protección no de la hoja no funciona, esa es una la otra lo que pides no es nada fácil y lleva mucho tiempo más cuando dejas las celdas en blanco esperando que otros inventen los datos, apenas vi los parámetros y los veo muy confusos, tratare de entenderlos y ver que se puede hacer no me comprometo a nada por el tiempo que traigo limitado

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