Condividi:        

[Excel] Macro per inserimento riga

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Macro per inserimento riga

Postdi dreamtime » 14/07/12 19:43

Ciao a tutti, avrei bisogno dell'aiuto di qualcuno che sia esperto di macro excel, io purtroppo sto imparando ora....

Vi spiego che cosa vorrei fare: ho un foglio excel, ed ogni tanto devo inserire tra le righe una nuova riga che contenga
nella colonna A e B i dati della colonna A e B presenti nella riga superiore, nella colonna C un valore di testo fisso "TESTO", ed in tutto il resto delle celle sulla riga solo spazi vuoti (ora li faccio con "canc").
Sono diverse migliaia di righe di dati e sono un po' disperata... :eeh:

Per sapere quando devo inserire queste righe "speciali" non posso fare altro che un controllo visuale dei dati e posizionarmi dove la riga deve essere inserita, perche' in alcuni casi devo inserirne 2, in altri una...

Mi dareste un suggerimento per favore?
Grazie mille davvero
dreamtime
Utente Junior
 
Post: 25
Iscritto il: 14/07/12 19:31

Sponsor
 

Re: [Excel] Macro per inserimento riga

Postdi Flash30005 » 14/07/12 20:08

Ciao Dreamtime e benvenuta nel Forum
Inserire righe e popolarle come da te indicato non è un problema, l'unica cosa da capire e come attivare la macro che, per quanto "fantasioso" nell'ideare soluzioni non riesco a pensare che si possa attivare solo "guardando" la riga nella quale dovrebbe essere inserita la nuova. :D

Bisogna fare un'analisi su come tu decidi di inserire la riga: cioè un particolare dato scritto nella cella di colonna A, o B o altro?


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Macro per inserimento riga

Postdi Flash30005 » 14/07/12 20:27

Nel frattempo avrei pensato a qualcosa del genere
(troppo manuale per i miei gusti, non ho altre soluzione senza l'analisi citata nel precedente post)
Un doppio click del mouse su una cella della colonna A e al di sotto avrai la riga aggiunta, per fare questo dovresti inserire in un modulo questo codice
Codice: Seleziona tutto
Public Riga As Integer
Sub AggRighe()
    Rows(Riga & ":" & Riga).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A" & Riga - 1 & ":B" & Riga - 1).Copy Destination:=Range("A" & Riga & ":B" & Riga)
    Range("C" & Riga).Value = "Testo"
End Sub


e nel Vba del foglio queste righe
Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Riga = Target.Row + 1
Cancel = True
AggRighe
End Sub


Allego anche questo file

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Macro per inserimento riga

Postdi dreamtime » 14/07/12 23:07

Grazie Flash30005!!.... ma ..ma ..ma.... mi sembra una magia!! :)
Mi hai risparmiato ore e ore di lavoro noioso .... ti devo un favore grandissimo!

Ho fatto cosi':
- scaricato il tuo .xls
- sostituito i dati presenti sul tuo xls con i miei
- mi sono posizionata sulla riga e clicclic! appaiono le righe nuove... ne metterei anche di piu' di quelle che servono tanto mi piace vederle spuntare!
Solo forse sbaglio qualcosa io perche' ogni tot righe nuove il cursore finisce in A1 o in A(ultimariga), in maniera mi sembra random, ma per me va benissimo lo stesso, domani riesco a finire il lavoro di tre giorni!! WOW! :) :) :) :)


"Bisogna fare un'analisi su come tu decidi di inserire la riga: cioè un particolare dato scritto nella cella di colonna A, o B o altro?"


Hai ragione scusa non ero stata precisa: :oops: io ho una serie di righe, a gruppi da 1 a 4 righe, identificate da un prefisso (col A e B appunto): se le righe sono gia' 4 non devo inserire nulla, se sono di meno devo inserire quelle (1-2-3) che mancano ad arrivare a 4, tutte uguali. (Con "Inserisci/copia/incolla ci avrei messo una vita....)

Ancora grazie mille, anzi di piu'!! :) :) :) :)
dreamtime
Utente Junior
 
Post: 25
Iscritto il: 14/07/12 19:31

Re: [Excel] Macro per inserimento riga

Postdi PcBase » 14/07/12 23:23

Ciao

Solo forse sbaglio qualcosa io perche' ogni tot righe nuove il cursore finisce in A1 o in A(ultimariga), in maniera mi sembra random


Non stai sbagliando hai attivato l'opzione trascina cella, prova ad escluderlo.
Windows xp + Office 2003 Ita
Windows8 Office 2013
PcBase
Utente Senior
 
Post: 143
Iscritto il: 24/02/11 23:26

Re: [Excel] Macro per inserimento riga

Postdi Flash30005 » 15/07/12 00:33

Leggi quanto scritto da PcBase

Se è come dici allora è molto più semplice ma dovresti pubblicare almeno un piccolo esempio perché non capisco se per 4 righe hai codici uguali in A e uguali anche in B oppure solo su su A o solo su B
invia, quindi, almeno 10 righe miste (4 normali e altre "anormali")

La macro che si può realizzare fa tutto in un baleno ;)

Per esempio una macro così (controlla se in Ax1 <> Ax2 o Bx1 <> Bx2, se diversi aggiunge n righe)
potrebbe essere più veloce e precisa dell'inserimento manuale perché non occorre cliccare "a occhio" ;)

Codice: Seleziona tutto
Sub AggRigheAuto()
RIni = 1  '<<< se nella riga1 hai una testata da non processare modifica questo valore con 2
Inizio:
UR = Range("A" & Rows.Count).End(xlUp).Row
For RR1 = RIni To UR Step 4
NNR = 0
    ValA = Range("A" & RR1).Value
    ValB = Range("B" & RR1).Value
    If Range("A" & RR1 + 1).Value <> ValA Or Range("B" & RR1 + 1).Value <> ValB Then NNR = 3: GoTo saltaCond
    If Range("A" & RR1 + 2).Value <> ValA Or Range("B" & RR1 + 2).Value <> ValB Then NNR = 2: GoTo saltaCond
    If Range("A" & RR1 + 3).Value <> ValA Or Range("B" & RR1 + 3).Value <> ValB Then NNR = 1: GoTo saltaCond
saltaCond:
        For Nr = 1 To NNR
            Rows(RR1 + 4 - NNR & ":" & RR1 + 4 - NNR).Insert Shift:=xlDown
            Range("A" & RR1 & ":B" & RR1).Copy Destination:=Range("A" & RR1 + 4 - NNR & ":B" & RR1 + 4 - NNR)
             Range("C" & RR1 + 4 - NNR).Value = "TESTO"
            RIni = RR1
             GoTo Inizio
        Next Nr
Next RR1
End Sub


Fai sapere
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Macro per inserimento riga RISOLTO

Postdi dreamtime » 15/07/12 17:24

Grazie PcBase! :)
ho scoperto quale era l'arcano, colpa dei miei clic poco precisi!! ... il "salto" in cima o in fondo al foglio mi capita quando io clicco due volte ed il cursore e' posizionato quasi "a cavallo" di due righe... se a cavallo "sopra", cioe' in corrispondenza del lato superiore della cella, il salto del cursore dopo il doppio clic e' sulla prima riga compilata del foglio, se clicco " a cavallo" di due righe, ma "sotto", cioe' in prossimita' del lato inferiore della cella il salto del cursore e' sull'ultima riga compilata del foglio. E' questa l'opzione trascina cella?


Grazie tantissime Flash 30005, :) :) :) :) :) :)
non so come hai fatto, ma la macro che mi hai preparato e' piu' simile a una bacchetta magica che a una macro, secondo me..... ha fatto tutto da sola e alla perfezione, mentre io guardavo allibita :o :o :o :o .
Tutto fatto, finito, yup! Praticamente hai fatto tu tutto il lavoro!!!!.... mica mi capita tutti i giorni!! Adesso mi resta di mettere tutte queste migliaia di record in InDesign .... :neutral: :-?
Nel tempo di oggi che ho risparmiato grazie alla macro-magica mi sono messa a studiare un po' come si fanno le macro (mica posso sempre approfittare) Magari ti chiedo se sai cosa e' meglio fare per imparare almeno i primi rudimenti .... :)

Ancora GRAZIE!!!!!!!!!!!
dreamtime
Utente Junior
 
Post: 25
Iscritto il: 14/07/12 19:31

Re: [Excel] Macro per inserimento riga

Postdi Flash30005 » 16/07/12 00:11

Sai mi sono un attimino nei tuoi panni e pensavo di dover "scrollare" migliaia di righe alla ricerca delle righe mancanti per completare il gruppo di quattro come da te specificato.
La difficoltà aumenta considerando che le righe sono contigue (non c'erano righe vuote dove necessitava il riporto dei dati) pertanto oltre a stancarsi la vista si poteva incorrere nell'errore umano di cliccare più volte o non vedere che mancava una o più righe.
Inoltre odio i lavori ripetitivi (non credo che l'uomo sia stato creato per questo genere di lavori)
Una macro ben fatta è "infallibile" evita l'errore umano e fa risparmiare ore di lavoro (a proposito, con i tempi che corrono, evita di parlarne... ;) )

Riguardo lo studio delle funzioni e/o linguaggio Vba non posso consigliarti libri (ce ne sono diversi in commercio), preferendo la pratica alla teoria, puoi registrare delle semplici macro e in debug iniziare a capire cosa fa passo passo, ti puoi aiutare anche con l'ottimo help in linea e/o cercare quesiti risolti nei forum.
In questo Forum ci sono molti argomenti trattati e risolti quindi hai tutto per iniziare anzi per andare oltre...
Un'ultima cosa necessaria: la Volontà!

In caso di difficoltà non devi far altro che chiedere ;)

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Macro per inserimento riga

Postdi sceriffopeschiera » 02/08/13 13:59

Ciao a tutti,

riprendo questo post di un anno fa perchè ho un problema simile a quello già postato in questa discussione, ma che non riesco a risolvere attraverso i suggerimenti già presenti.
Il mio problema è apparentemente abbastanza semplice, ma la mia limitata capacità delle Macro mi impedisce di giungere autonomamente ad una soluzione.
Cerco di rendere il tutto il più comprensibile possibile. Nel mio foglio Excel ho una colonna (suppniamo la colonna A) dove compaiono numeri interi da 1 a 500.
Il mio obiettivo è quello di inserire, in corrispondenza di ogni cella in colonna A, un numero di righe pari al numero che appare nella suddetta cella.

ESEMPIO:
in A1 ho 5, in A2 ho 0 e in A3 ho 12
La macro dovrà inserirmi 5 righe sotto la riga corrispondente alla cella A1, salterà A2 (in quanto è richiesto di inserire zero righe addizionali) e 12 nuove sotto la riga corrispondente ad A3.

La lista di numeri è lunga, alcune centinaia, da qui nasce l'esigenza di una macro.

Grazie mille in anticipo a chi vorrà aiutarmi.
sceriffopeschiera
Newbie
 
Post: 9
Iscritto il: 02/08/13 13:20

Re: [Excel] Macro per inserimento riga

Postdi scossa » 02/08/13 16:03

sceriffopeschiera ha scritto:riprendo questo post di un anno fa perchè ho un problema simile


Meglio se apri un nuovo argomento.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [Excel] Macro per inserimento riga

Postdi Anthony47 » 03/08/13 00:16

Ciao sceriffopeschiera, benvenuto nel forum.
Credo che una macro come questa dovrebbe rispondere alla tua domanda:
Codice: Seleziona tutto
Sub InsRows()
Dim I As Long
For I = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(I, 1) > 0 And IsNumeric(Cells(I, 1).Value) Then
        Cells(I, 1).Offset(1, 0).Resize(Cells(I, 1).Value, 1).EntireRow.Insert Shift:=xlDown
    End If
Next I
End Sub
Non hai specificato quale versione Excel usi, spero non avrai problemi col numero totale di righe che vorrai inserire, visto che XL2003 e inferiori gestiscono max 65mila righe.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Macro per inserimento riga

Postdi scossa » 03/08/13 14:12

Questa macro cicla le sole celle della colonna A contenenti un numero e verifica, prima di inserire le righe, che l'ultima cella contenente dati (in tutto il foglio), non venga spostata oltre il numero di righe permesso dal foglio (a seconda della versione di excel):

Codice: Seleziona tutto
Public Sub insRighe()
  Dim rng As Range, rngArea As Range, cella As Range
  Dim i As Long, j As Long, k As Long
  Dim nRows As Long, nLR As Long, nRngLR As Long
 
  nRows = Rows.Count
  nLR = UR() 'Cells(Rows.Count, 1).End(xlUp).Row
  Set rng = Range("A1:A" & nLR).SpecialCells(xlCellTypeConstants, 1)
  Application.ScreenUpdating = False
  For i = rng.Areas.Count To 1 Step -1
    Set rngArea = rng.Areas(i)
    nRngLR = rngArea.Rows.Count + rngArea.Row - 1
    For j = nRngLR To rngArea.Row Step -1
      Set cella = rng.Cells(j, 1)
      With cella
        nLR = UR()
        If .Value > 0 And (.Value + nLR) <= nRows Then .Offset(1).Resize(.Value, 1).EntireRow.Insert
      End With
    Next
  Next
  Set rng = Nothing
  Application.ScreenUpdating = True
End Sub


Private Function UR(Optional ByVal rng As Range) As Long

  If rng Is Nothing Then
    Set rng = Cells
  End If
  On Error Resume Next
  UR = rng.Find(what:="*", _
                     after:=rng.Cells(1), _
                     LookAt:=xlPart, _
                     LookIn:=xlFormulas, _
                     searchorder:=xlByRows, _
                     SearchDirection:=xlPrevious, _
                     MatchCase:=False).Row
  Set rng = Nothing
End Function


Provare con in A1 .. A10 questi valori
1
0
5
6
2
3
a

1
b

e mettendo a piacere in una cella delle ultime 1 ... 10 righe del foglio, un valore qualsiasi .
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [Excel] Macro per inserimento riga

Postdi sceriffopeschiera » 05/08/13 14:28

Anthony47, Scossa, grazie mille!

Ho testato entrambe le macro, e funzionano perfettamente!

Nel mio caso la prima opzione è più che sufficiente perchè, per ragioni che non sto ad esporvi, il numero massimo di righe che potranno comparire al termine del processo sarà di circa 5.000 quindi non si pone il problema del numero massimo di righe da gestire.

La seconda Macro è ben più sofisticata (e anche meno comprensibile per Macro beginners come il sottoscritto), ma la terrò assolutamente in considerazione magari per futuri e più complessi ambiti.

Grazie mille ad entrambi, inutile dire che mi avete risparmiato tanto speco di tempo ed energie mentali (oltre all'eventualità di incappare in errori).
sceriffopeschiera
Newbie
 
Post: 9
Iscritto il: 02/08/13 13:20

Re: [Excel] Macro per inserimento riga

Postdi Simtech » 05/08/17 09:30

Flash30005 ha scritto:Nel frattempo avrei pensato a qualcosa del genere
(troppo manuale per i miei gusti, non ho altre soluzione senza l'analisi citata nel precedente post)
Un doppio click del mouse su una cella della colonna A e al di sotto avrai la riga aggiunta, per fare questo dovresti inserire in un modulo questo codice
Codice: Seleziona tutto
Public Riga As Integer
Sub AggRighe()
    Rows(Riga & ":" & Riga).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A" & Riga - 1 & ":B" & Riga - 1).Copy Destination:=Range("A" & Riga & ":B" & Riga)
    Range("C" & Riga).Value = "Testo"
End Sub


e nel Vba del foglio queste righe
Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Riga = Target.Row + 1
Cancel = True
AggRighe
End Sub


Allego anche questo file

Ciao


Salve a tutti.
Complimenti per il prezioso aiuto che offrite, il quale mi ha spinto ad iscrivermi in questo forum :)
sò di riesumare un post vecchissimo, ma ho trovato questo script (da richiamare con il doppio click) utilissimo e perfettamente funzionale al mio scopo di copiare una riga precedente.
Complimenti a te che lo hai scritto!

Chiedo, se possibile, una piccola modifica e come farla:
il doppio click copia esattamente la riga precedente (sia la formattazione e sia il testo contenuto nelle celle:
c'è un modo per fargli copiare SOLO la formattazione delle celle, lasciando vuoto il contenuto della nuova riga?
Simtech
Newbie
 
Post: 1
Iscritto il: 05/08/17 09:22

Re: [Excel] Macro per inserimento riga

Postdi Anthony47 » 07/08/17 00:55

Non sono l'autore della macro ma mi pare dovrebbe bastare eliminare queste due righe dalla Sub AggRighe:
Range("A" & Riga - 1 & ":B" & Riga - 1).Copy Destination:=Range("A" & Riga & ":B" & Riga)
Range("C" & Riga).Value = "Testo"


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Macro per inserimento riga":


Chi c’è in linea

Visitano il forum: Nessuno e 86 ospiti