# Agregar datos en mi siguiente columna disponible



## ThePow (May 3, 2011)

Hola amigos.

He buscado en el foro pero no encuentro algo que pueda ayudarme con mi cometido.

Me explico:

Tengo una macro que despues de filtrar un campo, me selecciona mis datos y los pega en otra hoja (hasta aquí todo bien).
Ahora necesito que despues de pegar los valores , agrege en la siguiente celda a la derecha (o mejor dicho, en la siguiente columna) una formula de suma.







Aqui mi código 


```
Sub Copiar_criterio()
'
' Copiar_criterio Macro
' copia celdas que cumplen el criterio

  Dim arrCriterio As Variant, i As Integer, hojaBase As String
    Dim x As String
    arrCriterio = Array("Si")
    hojaBase = ActiveSheet.Name
   
    For i = 0 To UBound(arrCriterio)
        Range("B1").Select
        Selection.AutoFilter Field:=9, Criteria1:=arrCriterio(i)
        Range(Selection, Selection.End(xlDown).End(xlToRight).End(xlToRight)).Select
        'Range(Selection, Selection.End(xlDown).End(xlToRight).End(xlToRight).End(xlToRight).End(xlToRight)).Select
        Selection.Resize(, Selection.Columns.Count + 1).Select
        'cada .End(xlToRight) equivale a las columnas que están combinadas para poder seleccionar a la derecha

        Selection.Copy
            
        Sheets("Descripcion gastos2").Select
   
        Range("A1").Select
        ActiveSheet.Paste
        'Cells.Select
        Range("F:F").Select
        Selection.Delete Shift:=xlToLeft
        Range("A1").Select
        Next
        MsgBox "Datos copiados !", vbInformation, "Datos copiados"

End Sub
```
....................

Saludos y muchas gracias de antemano.


----------



## cgcamal (May 4, 2011)

Hola ThePow y bienvenido,

Podés probar con cualquiera de las siguientes opciones:

1-) Con For Loop (La más lenta):

```
Sub Sumar1()

Uf = Range("F1").End(xlDown).Row [COLOR=Green]'Ultima linea usada[/COLOR]
    Range("G2") = Range("F2")
    Range("G3") = Range("F2") + Range("F3")
For i = 4 To Uf
    Range("G" & i) = Range("F" & i) + Range("G" & i - 1)
Next
End Sub
```
2-) Usando Auto llenado.

```
Sub Sumar2()
Uf = Range("F1").End(xlDown).Row [COLOR=Green]'Ultima linea usada[/COLOR]
Range("G2") = Range("F2")
    Range("G3").FormulaR1C1 = "=R[-1]C+RC[-1]"
    Range("G3").AutoFill Destination:=Range("G3:G" & Uf)
End Sub
```
3-) Copiando la fórmula hasta la última fila de la columna G.

```
Sub Sumar3()
Uf = Range("F1").End(xlDown).Row [COLOR=Green]'Ultima linea usada[/COLOR]
    Range("G2") = Range("F2")
    Range("G3").FormulaR1C1 = "=R[-1]C+RC[-1]"
    Range("G3").Copy
    Range("G3:G" & Uf).PasteSpecial xlPasteAll
    Application.CutCopyMode = False
End Sub
```

Espero ayude.

Saludos cordiales


----------



## MgaNic (May 4, 2011)

Amigo ThePow esta macro está desarrollada solamente para la parte que necesitas; dices que todo lo inicial funciona correctamente, entonces puedes hacerlo como un procedimiento individual y llamarlo al final de tu programa principal utilzando *Call*.
El punto de esto está en el desplazamiento de las celda, pues tu lo que deseas es ir acumulando en la columna "G"; para ello debes usar las instrucciones: Range, Cells y Offset. *Range("G2")* ubica la dirección absoluta; *Cells y Offset* se desplazan relativamente alrededor de Range("G2") y por ello hacen el acumulado. Aunque seleccioné ["F3:F50"] por si hay más datos, las celdas sobrantes se controlan con un sencillo if endif utilizando una Constante. Si te interesa conocer un poco más del movimiento con Cells y Offset visita el siguiente enlace, donde escribo al respecto. 
http://wp.me/p1vGy8-4, también me gustaría conocer tu opinión.

He aquí la macro acumulativa, espero sea lo solicitado.

Sub poste01()
Range("g:g").ClearContents
Dim Acum As Integer, Val
Range("f3:f50").Select      'Selecciono más celdas de las utilizadas
Range("g2") = [f2]
fli = 0
gli = 1
For Each Val In Selection
fli = fli + 1               'Línea de la Columna F
gli = gli + 1             'Línea de la Columna G
If VarType(Val) = vbEmpty Then          'Cuando llegue a una celda vacía 
Exit For 'que salga del ciclo for. 
End If

Range("g2").Offset(fli, 0).Value = Val + Cells(gli, 7).Value        'Se acumulan Valores
Next
[f2].Select              'quitamos la selección de todo el rango.
End Sub

Saludes y Bendiciones.


----------



## ThePow (May 4, 2011)

Amigos muchas gracias,

Estoy leyendo las respuestas y despues comento el resultado,

De antemano gracias nuevamente!!!!


----------



## ThePow (May 5, 2011)

Hola de nuevo, siento la tardanza.

Amigo cgcamal muchas gracias, los 3 códigos funcionan a la perfección.!!!! me quedé con el 3°.

MgaNic, gracias por el código acumulativo, cada día se aprende algo nuevo. y gracias por la teoria en tu blog.

Saludos!


----------

