Sumar y Pegar y aumentar columnas

Ante todo agredecerles por su ayuda.
Mi problema es el Siguiente: Tengo un formulario, con un objeto de tipo command button, lo que hace la macro que he creado, es abrir un libro "CONSOLIDADO DESPACHOS 2009.xls" y activado la hoja1 del libro, recorro el numero de filas con un For para ir sumando los valores correspondientes por ejemplo:
Hoja1
Periodo Planta 1 2 3 ... 31 (días)
Enero Chimbote 12 14 15... 12
Febrero Trujillo 15 22 08... 23
Al final sumo los valores de cada fila por ejemplo de la fila 2 ("Enero"), sumo los valores de los días, hasta el ultimo día del mes. Con el siguiente código:
Private Sub CommandButton1_Click()
Application.Workbooks.Open "C:\Proyecto Software DINO\Analisis de costos\SAP\CONSOLIDADO DESPACHOS 2009.xls"
Workbooks("CONSOLIDADO DESPACHOS 2009.xls").Worksheets("Hoja1").Activate
Dim filas, range, cambio, j, i, k, z As Double
Dim peri As String
Dim etiqueta$
etiqueta$ = ActiveSheet.Name
    For j = 1 To 100  'Rows.Count - 1
        i = j + 1
Windows("CONSOLIDADO DESPACHOS 2009.xls").Activate
Sheets("Hoja1").Activate
    peri = Cells(i, 1)
    Planta = Cells(i, 4)
    fila = ActiveCell.Rows(i)
Select Case Planta
Case "CHIMBOTE"
If peri = "Ene" And etiqueta$ = "Hoja1" Then
Cells(i, 36).FormulaR1C1 = "=SUM(R[-" & fila & "]C[-31]:RC[-1])"
ElseIf peri = "Feb" And etiqueta$ = "Hoja1" Then
Cells(i, 36).FormulaR1C1 = "=SUM(R[-" & fila & "]C[-31]:RC[-1])"
End If
range = Cells(i, 36)
Selection.Copy
Windows("Chimbote Costos 2009.xls").Activate
Sheets("Planta Chimbote").Activate
Worksheets("Planta Chimbote").Cells(7, 4).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Select
Next
End Sub
AL calcular la suma total, deben copiarse en otra hoja correspondiente a otro libro "Chimbote Costos 2009.xls", me copia los valores en una determinada celda por ejemplo:
Hoja: Planta CHimbote en el libro "Chimbote Costos 2009.xls"
Planta SUmatoria por MEs
                                 Enero Febero
Planta CHimbote      12           X
Lo que deseo es que me ayuden a modificar mi macro para que cada vez que calculo en la hoja1 del libro CONSOLIDADO DESPACHOS 2009.xls la suma de los consumos por mes, que se vayn copiando automáticamente en el libroChimbote Costos 2009.xls, en la hoja Planta CHimbote, lo hecho para el primer elemento de la fila correspondiente para enero, pero para febrero no me sale, ya que debo incrementar el numero de columnas y posicionarlo en la siguiente columna para que copie los valores, espero que me puedan ayudar ante mano gracias.
1

1 respuesta

Respuesta
1
Vamos a analizar algunos pasos para que determines dónde ajustar la rutina:
Tenés un bucle :
For j = 1 to 100
I = j+1 'es decir que empezás por la fila 2, cuando llegue al next lo hará para la fila 3 y así hasta 100
El pto dudoso: estás colocando en la misma Celda la misma fórmula de SUMA . No está mal, porque si i = 2 la fórmula queda en Cells(2,36), si i=3 en Cells(3,36).
No se comprende porqué analizás qué mes tiene peri, ya que colocás la fórmula en la misma celda.
Otro pto dudoso: el resultado de la celda (i, 36) lo colocás en la misma celda fija Cells(7,4), es decir que enero y todas las demás van en esa celda
Aquí también necesitas una variable de col que empiece en 4 y vaya incrementando.
Se me ocurre que agregues las líneas en negrita:
---------------------------------
Private Sub CommandButton1_Click()
Application.Workbooks.Open "C:\Proyecto Software DINO\Analisis de costos\SAP\CONSOLIDADO DESPACHOS 2009.xls"
Workbooks("CONSOLIDADO DESPACHOS 2009.xls").Worksheets("Hoja1").Activate
Dim filas, range, cambio, j, i, k, z As Double
Dim peri As String
Dim etiqueta$
Dim col as Long
col = 4
etiqueta$ = ActiveSheet.Name
    For j = 1 To 100  'Rows.Count - 1
        i = j + 1
'sigue...............
'------------------
Sheets("Planta Chimbote").Activate
Worksheets("Planta Chimbote").Cells(7, col).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Select
col = col+1
Next
Por ahora tenés 1 Select con un solo Case, pero imagino que se trata de una rutina incompleta todavía.
Sdos. Comentame si te quedó claro
Elsa
http://aplicaexcel.galeon.com/manuales.htm
Buenas Tardes Elsa: Ante todo recibe mis cordiales saludos, y mis sinceras consideraciones de respeto a tu persona, te doy gracias por la amabilidad y gentileza de haber respondido a mi pregunta . Con respeto a la interrogante que plante en el foro: resolví el problema de la siguiente manera:
Mi proyecto: Consta de lo siguiente:
Tengo un formulario:Donde tengo un Botón: Procesar Datos, que mediante el evento Clic del botón, llamo a través del nombre de un procedimiento a un modulo.
Private Sub CmdProcesarDatos_Click()
CtoChimbote  ' Nombre de mi Procedimiento
end sub
Tengo un Modulo: Donde tengo el siguiente procedimiento:
Sub ctoChimbote()
Application.Workbooks.Open "C:\Proyecto Software DINO\Analisis de costos\SAP\CONSOLIDADO DESPACHOS 2009.xls"   'Sentencia abrir el libro CONSOLIDADO DESPACHOS 2009.xls
Workbooks("CONSOLIDADO DESPACHOS 2009.xls").Worksheets("BASEPLANTA").Activate ' sentencia para activar la hoja BasePlanta del libro consolidado despachos
Dim filas, range, cambio, j, i As Double
Dim peri As String
Dim etiqueta$
etiqueta$ = ActiveSheet.Name  ' La variable etiqueta$: Guarda el nombre de la etiqueta actual del libro abierto, este caso guarda el nombre BASEPLANTA
' Creo un bucle, para recorrer el numero de filas desde la fila 2 hasta la fila 300, la cantidad maxima de registros en cada fila es de 200, pero en caso que se incremente el numero de filas le puse 300
For j = 1 To 300  
        i = j + 1     ' varibles i= empieza en 2 hasta i=300
Windows("CONSOLIDADO DESPACHOS 2009.xls").Activate
Sheets("BASEPLANTA").Activate
'Activo nuevamente el la hoja BASEPLANTA del libro consolidado despachos, porque? tengo otro Libro abierto llamado Chimbote Costos 2009.xls, y esta activada la hoja Planta Chimbote, donde en una celda determinada se copiara el valor de la suma de las celdas que estoy selecionando en la formula. Por ejemplo:
LIbro: Chimbote Costos 2009.xls
Hoja Activa: Planta Chimbote
nroFila colunmaA colunmaB colunmaC colunmaD colunmaE colunmaF
1
2
3
4
5                                                               Ene     Febr          Marz
6
7 ServiciosPremezclados 64 84 z
8
ServiciosPremezclados: esta en la columna C
donde x= Suma de cierto rango de celdas de la hoja BASEPLANTA del libro CONSOLIDADO DESPACHOS 2009.xls. por ejemplo:
Libro: CONSOLIDADO DESPACHOS 2009.xls
Hoja: BASEPLANTA
NroFila Mes Codigo  Maqu CodPlanta  Planta Dia01 Dia02 Dia03......Dia31 CostoProducion
     1         Ene                                CHIMBOTE  29      10      15 ..........10               64 
2 Ene TRUJILLO 42 23 09... 20 94
     3 Feb CHIMBOTE 10 52 12... 10 84
4 Mar TRUJILLO 10 15 24... 34 83
Planta: CHIMBOTE, TRUJILLO, ETC son 8 plantas
CostoProduccion: es la suma del dia01. dia2, dia3 asi sucevivamente hasta el dia 31, el resulado producto de la suma de las celdas las copio en la hoja Planta Chimbote, en la celda D7 si es enero, en el caso de Febr en la celda D8, asi tengo un formato para cada planta, en este caso es de la PLANTA CHIMBOTE, el motivo por el cual activo la hoja BASEPLANTA, es porque mi estructura esta dentro de un bucle si no lo abro, me mostrara un mensaje de error que el libro no se encuentra abierto porque cada vez que hace recorrido busca dato si no se encuentra la hoja activa , sale el error
    peri = Cells(i, 1) ' Variable Peri: guarda el mes en este caso Enero ya que i vale 2
    planta = Cells(i, 5)  'Variables planta: guarda el nombre de la planta que es chimbote ya que i vale 2
    fila = ActiveCell.Rows(i)  ' Variables fila: activa una fila, en este caso la fila 2 porque i es 2
'Estructura de secuencia: cuando i=2 planta es CHIMBOTE
Select Case planta
Case "CHIMBOTE"   'VERDADERO ya que i=2
If peri = "ENE" And etiqueta$ = "BASEPLANTA" Then 'Evalua la condicion Peri guarda mes, peri es enero Verdadero y etiqueta es base planta verdadero es la hoja activa
Cells(i, 37).FormulaR1C1 = "=SUM(R[-" & fila & "]C[-31]:RC[-1])"  'la suma del de la fila seleccionada se guarda en la celda de la fila 2 columna 36, en este caso guarda el numero 64, para el ejercicio propuesto, SUM(R[-" & fila & "]C[-31]:RC[-1])" , esta sentencia suma valores -31 celdas a la izquierda empezando desde la celda -1 desde la celda 37 donde esta la suma de mis valores, Fila selecciona la fila donde estoy copiando los valores de las celdas. Por ejemplo:
     dia1    dia2   dia3.......................dia 31 CostoProduccion
      29 10 15 ... 10 64
-31 -1 64 (celda fila 2, columna37)
Cells(i, 37). Select 'Antes de copiar una celda debo seleccionarla, en este caso he seleccionado la celda de la fila 2 , columna 37  el valor de 64
Selection.Copy  ' copio la celda
Windows("Chimbote Costos 2009.xls").Activate ' activo mi el otro libro abierto
Sheets("Planta Chimbote").Activate  ' activo la hoja donde se va a copiar el valor 64 cuando i=2
Worksheets("Planta Chimbote").Cells(7, 4).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False  ' va a copiar el valor en la celda de la fila 7 columna 4 correspondiente al mes de enero de dicha planta
Application.CutCopyMode = False
' Solo es la estructura para el primer mes de la primera planta para el caso del siguiente mes que es febrero me copie los valores en la celda de la fila 7 en la columna 4 se hace de la siguiente manera.  ya que al finalizar el primer recorrido ahora i tendra el valor de 3 asi sucevimente hasta 300.
ElseIf peri = "FEB" And etiqueta$ = "BASEPLANTA" Then
Cells(i, 37).FormulaR1C1 = "=SUM(R[-" & fila & "]C[-31]:RC[-1])"
Cells(i, 37).Select
Selection.Copy
Windows("Chimbote Costos 2009.xls").Activate
Sheets("Planta Chimbote").Activate
Worksheets("Planta Chimbote").Cells(7, 5).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
elseif ............. (condiciones)
Bloque de instrucciones
end id
end select
next
end Sub
Elsa, ante todo agresco por tus servicios, por la rapidez de tu ayuda, ahora voy a acomodar mi macro, de acuerdo a los cambio que has realizado, ya que es justo lo que necesitaba ya que tenia problemas para incrementar el nro de columnas, pero lo solucion de esta manera, aunque las lines de instruccion son demasiadas largas. Tengo otro problemita, con mi proyecto espero que me puedas ayudar, apenas pruebe los arreglos espero que me puedas ayudar, te agredesco de corazon por tu ayuda, que dios te bendiga. 
¿Como podria acomodar mi for para que solo me recorra, hasta el numero de filas que tengo en mi hoja, por ejemplo que ya no me haga el recorrido hasta 300, si no hasta el numero de filas donde tengo datos? GRACIAS, espero haber contruibido con la explicacion para aquellas personas que igual que yo conocen un poco de macros.
Necesitas guardar en 1 variable la última fila con datos, con esta instrucción:
ultima = Activesheet.range("B65536").End(xlup).Row
For i = 1 to ultima
Aquí estoy considerando que la col B es la que tendrá siempre datos en las filas.
Estimada Elsa, te doy las gracias por tu ayuda, hice las correcciones, respectivas con los cambios que me enviaste, todo me funciona de maravilla, como te comente estoy desarrollando un proyecto para la gestión de costos de las operaciones de un planta de cemento, espero que me puedas ayudar con tus suguerencias, tengo varias dudas con respecto a otras lineas de código que implemente, estoy corriengo los errores, pero aun me falta terminar, espero que me puedas ayudar, ¿cómo podría hacer para poder hacerte otra consulta?
Al final mi código quedo de la siguiente manera: Solamente para la planta de chimbote, ya que son 8 plantas de cemento.
Sub ctoChimbote()
Application.Workbooks.Open "C:\Proyecto Software DINO\Analisis de costos\SAP\CONSOLIDADO DESPACHOS 2009.xls"
Workbooks("CONSOLIDADO DESPACHOS 2009.xls").Worksheets("Hoja1").Activate
Dim filas, range, cambio, j, i As Double
Dim peri As String
Dim col As Long
col = 4
Dim etiqueta$
ultima = ActiveSheet.range("A65536").End(xlUp).Row
etiqueta$ = ActiveSheet.Name
    For j = 1 To ultima
        i = j + 1
Windows("CONSOLIDADO DESPACHOS 2009.xls").Activate
Sheets("Hoja1").Activate
    peri = Cells(i, 1)
    planta = Cells(i, 5)
    fila = ActiveCell.Rows(i)
Select Case planta
Case "CHIMBOTE"
If peri = "ENE" And etiqueta$ = "Hoja1" Then
Cells(i, 37).FormulaR1C1 = "=SUM(R[-" & fila & "]C[-31]:RC[-1])"
Cells(i, 37).Select
Selection.Copy
Windows("Chimbote Costos 2009.xls").Activate
Sheets("Planta Chimbote").Activate
Worksheets("Planta Chimbote").Cells(7, col).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ElseIf peri = "FEB" And etiqueta$ = "Hoja1" Then
Cells(i, 37).FormulaR1C1 = "=SUM(R[-" & fila & "]C[-31]:RC[-1])"
Cells(i, 37).Select
Selection.Copy
Windows("Chimbote Costos 2009.xls").Activate
Sheets("Planta Chimbote").Activate
Worksheets("Planta Chimbote").Cells(7, col).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
End Select
col = col + 1
Next
end sub
Gracias elsa, saludos a la distancia.
Bien, entonces este tema está solucionado, ahora debes FINALIZAR la consulta marcando una puntuación.
Recién entonces podrás dejar nuevas consultas en el tablón, donde te responderemos yo o cualquier otro experto que considere que tiene la respuesta a tu inquietud.
Si necesitas algo urgente escribime al correo que encontrarás en mi sitio, para que te explique las opciones que tenés para una asistencia 'privada'.
Gracias Elsa por tu contribución al aprendizaje, me ayudo mucho los arreglos que me sugeriste, así pude comprender aspectos que aun estoy desarrollando en aplicaciones de excel usando macros. Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas