Utilizzo del Codice per ripristinare un elenco di formule.

Applicazione del Metodo Autofill

Uno dei motivi di maggiore rabbia, è quando inavvertitamente cancelliamo delle celle con dei valori, celle che però contenevano anche delle formule. E tanto maggiore è l'incavolatura quando perdiamo tutto un bel range di celle, predisposte con fatica. E' possibile, tramite codice, predisporre una macro che ci rimetta le cose a posto. Sarà sufficiente associare un pulsante a questa macro, e le nostre formule ritorneranno in tutte le celle da cui sono state cancellate ( o meglio, in tutto il Range (alias: Intervallo) di celle che indicheremo nel codice).
Per capire, facciamo un esempio, la classica colonna dove riportiamo il saldo progressivo di un conto dare/avere. avremo quindi nella colonna C il dare, nella D l'avere, ed in E il saldo, avremo una cella in E di riporto a saldo, e nelle successive righe della colonna E le rispettive formule, ognuna con i propri riferimenti. in StileA1; vediamo sotto un esempio:

  B C D E (vista delle formule) E (valori)
1 Operazione Dare Avere Saldo Saldo
2 riporto a saldo

1000

 
3

250

 

=SE((C3+D3)<>0;E2-C3+D3;"")

750

4  

100

  =SE((C4+D4)<>0;E3-C4+D4;"")

650

5    

180

=SE((C5+D5)<>0;E4-C5+D5;"")

830

6      

=SE((C6+D6)<>0;E5-C6+D6;"")

 
7       =SE((C7+D7)<>0;E6-C7+D7;"")  
8       =SE((C8+D8)<>0;E7-C8+D8;"")  
9          

Bene, prepareremo la nostra macro utilizzando il metodo AutoFill (corrisponde al "trascinamento", però fatto in automatico) per riempire, in un colpo solo, tutte le celle previste nell'intervallo di destinazione ( Range("E3:E8") ), e non solo "riempire" ma anche "aggiornare i riferimenti". Ovviamente decideremo noi quanto lungo sarà il nostro elenco, e modificheremo i riferimenti di detto intervallo.
Facciamo quindi due esempi sfruttando i due Stili (StileA1 e Stile RiferimentoR1C1) così vediamo cosa cambia a livello istruzioni e comunque  in entrambi gli esempi dovremo ricordarci che usando il codice vba, i delimitatori punto e virgola  ( ; ) che separano gli argomenti nelle formule sol foglio di lavoro, devono essere sostituiti da semplici virgole ( , ) e che i due doppi apici ( "" ) che sul foglio identificano "vuoto", in vba devono diventare quattro doppi apici ( """" )

Questo è l'esempio con la proprietà FormulaR1C1 (Stile RiferimentoR1C1):

  • Sub ripristinaprimo()

    Range("E3").Select
    ActiveCell.FormulaR1C1 = "=IF((RC[-2]+RC[-1])<>0,R[-1]C-RC[-2]+RC[-1],"""")"
    Selection.AutoFill Destination:=Range("E3:E8"), Type:=xlFillDefault

    End Sub

La formula dice: selezionami la cella E3, e in questa cella mi inserisci la formula: SE la cella che si trova due colonne a sinistra di questa RC[-2] e la cella che si trova una colonna a sinistra di questa RC[-1] , sono diverse da zero, allora mi prendi la cella che stà una cella sopra a questa R[-1] (vedete che manca il riferimento a C, e questo vuol dire: stessa colonna) mi ci sottrai (abbrevio)RC[-2] o/e mi sommi RC[-1] , altrimenti mi lasci la cella vuota """" .

A questo punto, entra in gioco l'istruzione della riga successiva, dove troviamo AutoFill. il significato è questo: con ciò che hai messo nella cella selezionata, mi ci RIEMPI anche tutte le celle che vanno da E3 a E8. Poichè questa operazione equivale al "trascinamento" sul foglio di lavoro, il bravo Excel, provvede anche all'aggiornamento dei riferimenti nelle formule, in automatico.

Questo è l'esempio con la proprietà Formula (StileA1):

  • Sub ripristinasecondo()

    'inseriamo direttamente la formula in E3 (senza selezionare la cella) usando la sola proprietà Formula (dell'oggetto Range) e quindi si utilizza AutoFill sul Range("E3") - da notare che la sintassi, a parte l'istruzione =SE che in vba diventa =IF, rispecchia i riferimenti alle celle come si usa sul foglio di lavoro (a parte le virgole come separatori di argomento)

    Range("E3").Formula = "=IF((C3+D3)<>0,E2-C3+D3,"""")"
    Range("E3").AutoFill Destination:=Range("E3:E8"), Type:=xlFillDefault

    End Sub

Basterà a questo punto premere il pulsante associato alla macro, e nelle nostre celle riappariranno le formule. Ci saremo in questo modo protetti da eventuali errori, in barba alla distrazione!

Ricordo che un buon metodo per imparare e modificare il codice, è quello di usare il "Registratore di macro" (presente in questa sezione). Potrete vedere, compiendo voi le azioni necessarie, come viene compilato il codice, e quindi, piano piano, assimilare le nozioni.

Buon lavoro.