![](/content/images/user_nophoto_small.png)
¿Cómo usar dos macros casi iguales en un mismo libro?
Tengo una macro para hacer una suma dependiendo de lo que ponga en otras dos celdas, una de ellas especifica la hoja en que sumará y otra específica la palabra que se encontrará en la fila y así poder sumar dependiendo de la ubicación que ponga, necesito hacer el mismo proceso 2 veces, es decir, uso una tabla para registrar los gastos de cada mes, ahora quiero usar dos tablas, independientes, pero con la misma fórmula, solo necesito cambiar las celdas, el problema es que me da error, porque para que la macro funcione, en la celda en donde me dará el resultado llevará esto: =SI.ERROR(fcnCalcular(D13;"A";F13;"SUM");"") , entonces pongo =SI.ERROR(fcnCalcular(D14;"A";F14;"SUM");"") en la celda en donde quiero la otra suma y me da error. Yo hice otro módulo y pegué la misma macro solo con las celdas modificadas y me da error, ¿qué podría hacer?
1 Respuesta
![Elsa Matilde](http://blob.todoexpertos.com/avatars/sm/elsamatilde.jpg?v=17)
Debieras dejar las macros publicadas aquí para una mejor comprensión de tu problema.
Y una imagen con la celda donde se pueda ver la fórmula (barra de fórmulas).
![](/content/images/user_nophoto_small.png)
En la celda D15 y en la F15 hay dos listas desplegables para seleccionar la ubicación de donde se hará la suma, en la celda H15 es donde necesito duplicar la macro, si te fijas solo cambian las celdas, es la misma macro, pero no sé cómo ponerlo.
![](/content/images/user_nophoto_small.png)
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
Esa es la macro, como uso la misma dos veces, solo cambiando las celdas. Ahí está todo el proceso que se agotó para hacer esta macro por si te sirve de ayuda, gracias. ¿Se puede hacer una fórmula o macro para que recorra varias hojas contando lo que le especifique en otra celda?
![Elsa Matilde](http://blob.todoexpertos.com/avatars/sm/elsamatilde.jpg?v=17)
No sé porqué mencionas que necesitas 2 macros si la función debe servir para cualquier celda.
Si observas en la imagen, lo que hice fue arrastrar la fórmula desde H14 a H15 tal como se hace con cualquier fórmula de Excel. Y el resultado es correcto según tu ejemplo de hoja que aparece en consulta anterior.
Sdos!
![Elsa Matilde](http://blob.todoexpertos.com/avatars/sm/elsamatilde.jpg?v=17)
Y si necesitas la misma fórmula pero en otra tabla, usarás la misma ajustando las referencias, es decir dónde estarán tus datos.
Hice otro módulo y pegué la misma macro ...NO puedes tener 2 macros con el mismo nombre.
Sdos!
![](/content/images/user_nophoto_small.png)
Saludos, gracias por tu ayuda amigo... En cuanto a tu respuesta, por eso te dije que creia necesario dos macros, pero me daba error, lo hize mal. Uso esa macro para 12 hojas con una tabla, pero ahora agregue otra tabla en cada una de las hojas, copie la macro en otro modulo y modifique las celdas y me da error, me gustaría saber si me puedes ayudar, ya que he intentado varias cosas y me da error, aqui te dejo una foto de la estructura de las 12 hojas:
![](/content/images/user_nophoto_small.png)
La idea es que en donde dice categoría ponga la categoría del gasto, en donde dice mes la hoja y en la tercera celda me haga la suma... Tengo dos celdas para cada tabla. Pero la segunda tabla la categoría está en la columna G, de la fila 6 a la 200 y el Importe está en la columna J de la fila 6 a la 200, entonces, son rangos diferentes a los que tiene la macro original. Yo no entiendo mucho estos temas, espero que me puedas ayudar y hacer entender esto, ya que soy un ignorante en estos temas... Gracias de antemano amigo.
![Elsa Matilde](http://blob.todoexpertos.com/avatars/sm/elsamatilde.jpg?v=17)
En primer lugar sería amiga, me llamo Elsa ;)
En otro módulo coloca esta otra función. Es la misma pero tiene otro nombre y nuevos rangos de suma. En lugar de col E se hará referencia a J.
Y en todos los resultados (en la macro) se debe hacer mención al nuevo nombre de la función.
Function fcnCalculando(rngCeldaCat As Range, strColCat As String, rngCeldaMes As Range, _ Optional strOp As String = "CUENTA") As Double 'Por GP - Adaptada x Elsamatilde 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("J200").End(xlUp).Row If strOp = "SUM" Then fcnCalculando = fcnCalculando + WorksheetFunction.Sum(Sheets(strMeses(i)).Range("J6:J" & nFilas)) Else fcnCalculando = fcnCalculando + WorksheetFunction.Count(Sheets(strMeses(i)).Range("J6:J" & 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 = "SUMA" Then fcnCalculando = fcnCalculando + WorksheetFunction.SumIf( _ Sheets(strMeses(i)).Range(strColCat & "6:" & strColCat & nFilas), _ LCase(rngCeldaCat), _ Sheets(strMeses(i)).Range("J6:J" & nFilas)) Else fcnCalculando = fcnCalculando + 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("J200").End(xlUp).Row If LCase(rngCeldaCat) = "en general" Then 'Todas las categorías' If strOp = "SUMA" Then fcnCalculando = WorksheetFunction.Sum(.Range("J6:J" & nFilas)) Else fcnCalculando = WorksheetFunction.Count(.Range("J6:J" & nFilas)) End If Else 'Una categoría específica' If strOp = "SUM" Then fcnCalculando = WorksheetFunction.SumIf( _ .Range(strColCat & "6:" & strColCat & nFilas), _ LCase(rngCeldaCat), _ .Range("J6:J" & nFilas)) Else fcnCalculando = WorksheetFunction.CountIf( _ .Range(strColCat & "6:" & strColCat & nFilas), _ LCase(rngCeldaCat)) End If End If End With End If End Function
En la imagen se observa la escritura de la misma:
Sdos y no olvides valorar la respuesta (opciones: Excelente o buena)
Elsa
http://aplicaexcel.galeon.com/manuales.htm
- Compartir respuesta
![](/content/images/user_nophoto_small.png)