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
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
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:
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
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.
La misma.
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
- Compartir respuesta