Macro de sumif, donde el rango a sumar es variable

¿Me pueden ayudar?

a) Tengo una hoja1 que quiero copiar, y renombrar la copia con Impresión+el valor de las celdas f3 y f5. *La celda F3 contiene la palabra fondo y la F5, es una fecha*

En esa nueva hoja necesito que realice sumif, en la celda d9:d31, donde el criterio para sumar esta en la hoja1 desde B9 hasta B(n) y lo mismo el rango a sumar, ese es desde D9 hasta D(n), porque se le van agregando filas a la hoja 1. El criterio al que debe ser igual esta en b9:b31 de la nueva hoja.

Lo he hecho grabando macros, sólo que el rango para sumif me queda fijo, y yo necesito que se actualiza conforme en hoja1 voy ingresando más filas.

Después de haber creado la hoja "Impresión+el valor de las celdas f3 y f5 ", necesito que la hoja1, se convierta en otra hoja, para volver a utilizar hoja1 con nuevos datos y crear una nueva hoja Impresión+el valor de las celdas f3 y f5.

Esta es la macro que me da al grabar, solo que el rango se vuelve fijo, si ingreso más filas en la hoja1, y ejecuto nuevamente la macro, no considera las filas que caen fuera del rango. Lo solucione aumentando el rango a todas las filas posibles, aunque no quede muy convencida. ¿Me pueden ayudar a hacerlo mejor?

Sub Imprimir()

Hoja1.Select
Hoja1.COPY Before:=Sheets(1)
Range("C9").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.ClearContents
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Range("$B$8:$B$211").RemoveDuplicates Columns:=1, Header:=xlYes
Range("B9:B31").Select
ActiveWorkbook.Worksheets("fondeo (2)").Sort.SortFields.clear
ActiveWorkbook.Worksheets("fondeo (2)").Sort.SortFields.Add Key:=Range( _
"B9:B31"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("fondeo (2)").Sort
.SetRange Range("B9:B31")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("b9").Select
Selection.COPY
Range("b9:b34").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("d9").Select
ActiveCell.FormulaR1C1 = _
"=+SUMIF(Fondeo!R9C2:R211C2,'fondeo (2)'!RC[-2],Fondeo!R9C4:R211C4)"
ActiveCell.Select
Selection.COPY
Range("d9:d31").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("c9:D34").Select
Selection.COPY
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Hoja1.Select
Hoja1.COPY Before:=Sheets(3)
Sheets("fondeo (3)").Select
Sheets("fondeo (3)").Name = "Fondeo +F5"
Hoja1.Select
Range("F5:F6").Select
Selection.ClearContents
Range("B9").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.ClearContents
Range("F5").Select
End Sub

Fondeo es el nombre de la Hoja1, yo quiero utilizar Hoja1 para no tener problema si alguien le cambia el nombre a hoja1, solo que si sustituyo Fondeo! Por Hoja1!, no me ejecuta la macro.

Fondeo(2) es la copia creada, la que quiero que se llame impresión+celdaf3, f5, tampoco sé como debería ponerle ahí para que pueda ejecutar varias veces esa macro.

Saludos y espero no causar mucha molestia.

1 Respuesta

Respuesta
1

Te respondo a la consulta sobre los límietes para la función SUMIF y cualquier otro fin de rango que necesites, la línea que remover duplicados.

Las fórmulas en VBA que requieren de alguna variable se escriben con la siguiente sintaxis:

"=FUNCION(datos fijos" & variable & "resto de datos fijos"

En tu caso sería:

"=+SUMIF(Fondeo!R9C2:R" & filx & "C2,'fondeo (2)'!RC[-2],Fondeo!R9C4:R" & filx & "C4)"

Previamente tendrás que asignar el valor a la variable con esta línea:

filx = Sheets("Fondeo").Range("B" & Rows.Count).End(xlUp).Row

Para el tema de la impresión por favor deja una nueva consulta titulada según el requerimiento, luego de valorar ésta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas