Inserimento righe o colonne in automatico.

L'inserimento di una nuova riga o colonna in un foglio di excel è cosa estremamente semplice: è sufficiente selezionare l'intestazione di riga (o di colonna) (che è la zona del foglio dove sono riportati i Numeri per le righe, o le Lettere per le colonne) e, cliccando poi con destro del mouse sulla selezione, scegliere dal menù che appare, la voce "Inserisci". Immediatamente SOPRA alla riga selezionata si inserirà la nuova riga, mentre per le colonne, la nuova colonna si inserirà immediatamente PRIMA della colonna selezionata. Tutte le lettere o i numeri di riga verranno immediatamente aggiornati, ed eventuali formule o funzioni saranno aggiornate in automatico. Esiste a volte la necessità, specie su cartelle complesse, di inserire una nuova riga non solo sul foglio su cui si sta lavorando, ma anche su altri fogli, collegati, e ovviamente nello stesso punto in cui abbiamo inserito la riga del primo foglio. Potrebbe essere il caso di aggiunte su più fogli che portino lo stesso elenco di dati, ed aggiungendo una riga sul primo foglio vogliamo che nella stessa posizione vengano aggiunte righe anche su tutti i fogli collegati. Quella che propongo è una macro, da inserire in un modulo, ed associare ad un pulsante da tenere sul primo foglio. La macro aggiungerà una riga sopra una qualsiasi riga selezionata, passerà al foglio successivo, inserirà una riga nelle stesso punto e ritornerà al foglio di partenza, sulla riga appena inserita.

Sub InserimentoRiga()
Dim Y As Variant
Y = ActiveCell.Row 
'con la variabile Y reperiamo il numero di riga della cella ora attiva
Worksheets("foglio1").Select
Rows(Y).Select
Selection.Insert Shift:=xlDown

Worksheets("foglio2").Select
Rows(Y).Select
Selection.Insert Shift:=xlDown
Worksheets("foglio1").Select
Rows(Y).Select

Set X = Nothing
Set Y = Nothing
End Sub

La macro potrà essere modificata, per adattarla alle proprie esigenze, non solo cambiando il numero del foglio, ma inserendo ex novo una nuova istruzione per ogni foglio su cui volessimo inserire righe. Per esempio, volendo inserire una riga anche sul foglio3,  inserire la seguente istruzione (va inserita in macro prima del "ritorno"):

Worksheets("foglio3").Select
Rows(Y).Select
Selection.Insert Shift:=xlDown

Se invece avremo deciso di inserire una stessa riga in ogni foglio della cartella di lavoro, dovremo impostare un ciclo che "spazzoli" tutti i fogli inserendo la riga, quindi la routine Sub InserimentoRiga(), sempre basandoci sul reperimento del numero riga attraverso la cella attiva in quel momento, diventa:

Sub InserimentoRiga2()

Dim Y As Variant

Y = ActiveCell.Row
For Each ws In Worksheets
  'per ogni foglio (ws) dell'insieme Fogli
ws.Rows(Y).Insert Shift:=xlDown 
'inseriamo "a distanza" (senza bisogno si selezionare i fogli) la riga
Next

Set X = Nothing
Set Y = Nothing
End Sub

Ovviamente se vorremo legare l'inserimento riga non ad una variabile (Y) che ne indichi il numero, ma deciderlo fornendo noi il numero, sarà sufficente un istruzione semplificata:

Sub InserimentoRiga3()
For Each ws In Worksheets
  'per ogni foglio (ws) dell'insieme Fogli
ws.Rows(15).Insert Shift:=xlDown 
'inseriamo "a distanza" (senza bisogno si selezionare i fogli) la riga
Next
End Sub

dove 15 è il numero che identifica la riga.

Per quanto riguarda l'inserimento di colonne valgono gli stessi concetti, tenendo presente che le colonne si possono identificare sia con lettere, e in questo caso dovremo indicare l'intera colonna usando i riferimenti, oppure con i numeri, esempi:

  • con lettera di colonna:

  • Sub InserimentoColonna1()
    For Each ws In Worksheets
      'per ogni foglio (ws) dell'insieme Fogli
    ws.Columns("E:E").Insert Shift:=xlDown 
    'inseriamo "a distanza" (senza bisogno si selezionare i fogli) la colonna
    Next
    End Sub

  • Con il numero di colonna:

  • Sub InserimentoColonna2()
    For Each ws In Worksheets
      'per ogni foglio (ws) dell'insieme Fogli
    ws.Columns(5).Insert Shift:=xlDown 
    'inseriamo "a distanza" (senza bisogno si selezionare i fogli) la colonna
    Next
    End Sub

Le due istruzioni forniscono il medesimo risultato.

Va da sè che sarà possibile inserire in contemporanea righe e colonne inserendo le due istruzioni, una per la riga ed una per la colonna:

  • Sub InserimentoRigaColonna()

  • For Each ws In Worksheets   'per ogni foglio (ws) dell'insieme Fogli
    ws.Rows(15).Insert Shift:=xlDown 
    'inseriamo "a distanza" (senza bisogno si selezionare i fogli) la riga
    ws.Columns(5).Insert Shift:=xlDown 
    'inseriamo "a distanza" (senza bisogno si selezionare i fogli) la colonna
    Next
    End Sub

Buon lavoro.