Loop per somme



  • Loop per somme
    di MarcoP (utente non iscritto) data: 26/08/2014 16:12:12

    Ciao a tutti, vi ringrazio anticipatamente se potrete aiutarmi.
    Un programma mi estrae un file txt contenente una base dati
    un template di excel con all'interno delle macro carica il file e produce un file .xls

    terminata la fase di caricamento vorrei aggiungere una colonna (dopo l'ultima creata)
    nella quale faccio la somma dei campi presenti nelle colonne precedenti
    nei primi 2 campi ho già indicato quante sono le righe (10) e le colonne che ho prodotto (3)
    e quindi vorrei avere la somma nella colonna 4
    per esempio

    10 3
    1 2 4 = 7
    1 4 3 = 8
    1 6 3 ecc ecc
    1 7 3
    1 8 3
    1 9 3
    1 7 3
    1 9 3
    1 7 3
    1 9 3

    di seguito il codice e il punto in cui sono bloccato
    ovvero definire a priori l' Active Cell. dal quale poi
    lanciare la formula

    Do
    ActiveCell.FormulaR1C1 = "=SUM(RC[-1],RC[-2],RC[-3])"
    ActiveCell.Offset(1, 0).Select
    Loop Until IsEmpty(ActiveCell.Offset(0, -1))



    ho usato Range("D2").Select

    e così funziona ma dovrei renderlo dinamico, ovvero
    io dovei partire dalla cella (2, NumCol + 1)

    di seguito il codice utilizzato





     
    Sub somma()
    
    ' prendo i valori dalle celle
    NumRighe = (Cells(1, 1).Value)
    NumCol = (Cells(1, 2).Value)
    
    ' verifico i valori dalle celle
    ' Cells(1, 7) = NumRighe
    ' Cells(1, 8) = NumCol
    
    'uso il Range per portarmi sulla prima cella dalla quale sviluppare il loop
    Range("D2").Select
    
    ' la colonna in cui mettere la formula è la   NumCol + 1
    ' Questa formula funziona perfettamente ma parte dalla active cell
    ' mentre io dovrei partire dalla cella (2, NumCol + 1)
    ' quindi il Range("D2").Select dovrebbe essere sostituito ma non so con cosa
    
    
    Do
    ActiveCell.FormulaR1C1 = "=SUM(RC[-1],RC[-2],RC[-3])"
    ActiveCell.Offset(1, 0).Select
    Loop Until IsEmpty(ActiveCell.Offset(0, -1))
    
    
    ActiveWorkbook.Save
    End Sub



  • di Grograman (utente non iscritto) data: 26/08/2014 16:23:36

    Lascia stare i cicli, le formule le puoi applicare su un intero range

    Supponendo che tu sia sicuro che nella colonna A hai l'ultima cella piena, trovi l'ultima riga, e poi sulla colonna "D:Dultimariga" metti la formula:
     
    Dim lLastRow As Long
    lLastRow = Range("A" & Rows.Count).End(xlUp).Row
    Range("D2:D" & lLastRow ).FormulaR1C1 = "=SUM(RC[-1],RC[-2],RC[-3])"
    



  • di Luca73 data: 26/08/2014 16:35:05

    Siccome conosco il numero di righe e il numero di colonne io avrei usato
     
    Range(Cells(2,NumCol+1), Cells(NumRighe+1,NumCol+1)).FormulaR1C1 = "=SUM(RC[-1] : RC[-3])"