Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

macro xls inserisci riga

Ultimo Aggiornamento: 23/03/2016 09:09
Post: 1
Registrato il: 21/03/2016
Città: MILANO
Età: 39
Utente Junior
2013
OFFLINE
21/03/2016 16:05

macro xls: inserisci riga
Buongiorno a tutti!
Sono nuova e sono capitata su questo forum cercando informazioni sulle macro di excel dato che ho bisogno di automatizzare alcune operazioni ma non conosco quasi per niente questo mondo....

Inizio a spiegarvi la prima operazione che ho bisogno di effettuare:

Nella colonna F dei file dovrebbero ripetersi i valori da 1 a 9, tuttavia a volte non ci sono tutti i numeri in serie (ovvero 1-2-3-4-5-6-7-8-9) ma saltano (es. 1-3-5-6-9)

Ho invece bisogno di avere delle serie complete da 9, e quindi realizzare una macro che, dove manca il numero della sequenza aggiunga una riga e compili la cella col numero mancante.
Inoltre dopo il numero 9 deve essere inserita un'ulteriore riga che mi separi le sequenze.

Ho fatto qualche tentativo ma con scarsi risultati....sapete aiutarmi in qualche modo?? (spero di essere stata chiara nella spiegazione...allego un estratto della tabella)



Grazie mille!!
[Modificato da MARI1985 21/03/2016 16:20]
Post: 1.838
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
21/03/2016 17:59

ciao


in base ai tuoi dati passati


Sub sequenza_e_riga()
Dim i As Long
Dim CF As Long
Nriga = 1
CF = 1
For i = 1 To 1000
If Cells(i, "F") <> 0 Then
If Cells(i, "F") <> CF Then
Cells(i, "F").Select
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

If CF > 9 Then
CF = 1
Else
Cells(i, "F") = CF
CF = CF + 1
End If
End If
If Cells(i, "F") = CF Then CF = CF + 1
Else
CF = 1
End If
Next i
End Sub



Ciao da locate
excel 2007 / 13
Post: 1
Registrato il: 21/03/2016
Città: MILANO
Età: 39
Utente Junior
2013
OFFLINE
22/03/2016 09:47

Perfetto! grazie mille, funziona [SM=g27811] . Devo solo adattare il numero di celle considerate perchè in alcuni file ci sono più di 80.000 record...

Adesso ho un altro problema...e chiederei di nuovo il vostro aiuto ;-)

Sempre nella stessa tabella mi serve che
1) i numeri della colonna J vengano riportati in orizzontale nella riga 10 della sequenza a partire dalla colonna L

2) sempre nella riga 10 della sequenza, venga fatta la somma dei 9 valori della sequenza delle colonne G-H-I

Allego la tabella con un esempio sulla prima sequenza di 10 righe!

...confido ancora in voi
[SM=x423017]
Post: 1.840
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
22/03/2016 10:43

ciao

sono sempre io
per i record da trattare non esiste il problema,
basta che aumenti il numero del ciclo for dove io ho messo 1000 tu
metti 10000 100000 200000 al bisogno, anzi intanto che scrivo fai questa modifica alla linea del for
da cosi For i = 1 To 1000
a cosi For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row + 50000

per le altre cose il lavoro va fatto prima o dopo aver fatto l'inserimento dei record con la sub() proposta in precedenza???
in quanto il file postato e quello di ieri senza modifiche apportate
io penso che questi lavori vengano fatti sulla riga immessa vuota che automaticamente sarebbe la 10,20,30 ecc.
dai conferma se si o no

in attesa di chiarimenti

Ciao da locate
excel 2007 / 13
Post: 2
Registrato il: 21/03/2016
Città: MILANO
Età: 39
Utente Junior
2013
OFFLINE
22/03/2016 10:47

si, esatto. vengono effettuati dopo e quindi come dici tu nella riga 10, 20, 30, ecc
Post: 3.049
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
22/03/2016 11:51

propongo una modifica riguardo al numero delle righe trattate
Sub sequenza_e_riga()
n = 1: r = 1
Do
  If Cells(r, "F") <> n Then
      Rows(r).Insert
      If n > 9 Then
        If Cells(r + 1, "F") = "" And Cells(r - 1, "F") = 9 Then Exit Do
        n = 1
      Else
        Cells(r, "F") = n
        n = n + 1
      End If
  End If
  If Cells(r, "F") = n Then n = n + 1
  r = r + 1
Loop
End Sub
[Modificato da patel45 22/03/2016 11:52]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 1.842
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
22/03/2016 12:23

ciao

le due sub() la prima e la seconda che Traspone e calcola


Option Explicit
Sub sequenza_e_riga()
Dim i As Long
Dim CF As Long
CF = 1
For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row + 50000
If Cells(i, "F") <> 0 Then
If Cells(i, "F") <> CF Then
Cells(i, "F").Select
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
If CF > 9 Then
CF = 1
Else
Cells(i, "F") = CF
CF = CF + 1
End If
End If
If Cells(i, "F") = CF Then CF = CF + 1
Else
CF = 1
End If
Next i
End Sub

Sub Rip_J_Calcola()
Dim i As Long, o As Long
For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row + 9
If i / 10 = Fix(i / 10) Then
For o = 9 To 1 Step -1
Cells(i, 12 + 9 - o) = Cells(i - o, "J")
Next o
Cells(i, "G") = Application.Sum(Range(Cells(i - 9, "G"), Cells(i - 1, "G")))
Cells(i, "H") = Application.Sum(Range(Cells(i - 9, "H"), Cells(i - 1, "H")))
Cells(i, "I") = Application.Sum(Range(Cells(i - 9, "I"), Cells(i - 1, "I")))
End If
Next i
End Sub




Ciao da locate
excel 2007 / 13
Post: 3
Registrato il: 21/03/2016
Città: MILANO
Età: 39
Utente Junior
2013
OFFLINE
22/03/2016 14:05

perfetto, funziona!
Grazie ancora

..mi sono dimenticata di una cosa...e spero di non rompervi troppo le scatole.. [SM=g27828]

Nella riga 10 è possibile copiare i dati scritti nelle celle A-B-C-D-E della serie da 9?
ad esempio un comando che dica: nella riga 10 della serie (e quindi 10-20-30....) compila le celle A-B-C-D-E con i dati dell'ultima riga precedente a questa compilata
Post: 1.844
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
22/03/2016 15:35

ciao

potresi mettere nel file di esempio gia' elaborato cosa vorresti trovare alla riga 10,20,30 ecc. oltre a quello che gia' si inserisce

si intende questi dati li devi inserire a mano per capire cosa dobbiamo fare con la Sub()
dopo posta questi con le modifiche fatte
PS sono appena 9 righe

Ciao da locate
excel 2007 / 13
Post: 4
Registrato il: 21/03/2016
Città: MILANO
Età: 39
Utente Junior
2013
OFFLINE
22/03/2016 15:43

invio il file di esempio iniziale elaborato.

In arancio ho evidenziato le celle che mi interessa vengano compilate, che ho compilato per la riga 10 e 20 manualmente.
Post: 1.845
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
22/03/2016 15:58

ciao

aggiunta alla seconda sub()


Sub Rip_J_Calcola()
Dim i As Long, o As Long
For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row + 9
If i / 10 = Fix(i / 10) Then
For o = 9 To 1 Step -1
Cells(i, 12 + 9 - o) = Cells(i - o, "J")
Next o
Cells(i, "G") = Application.Sum(Range(Cells(i - 9, "G"), Cells(i - 1, "G")))
Cells(i, "H") = Application.Sum(Range(Cells(i - 9, "H"), Cells(i - 1, "H")))
Cells(i, "I") = Application.Sum(Range(Cells(i - 9, "I"), Cells(i - 1, "I")))
Cells(i, "A") = Cells(i - 1, "A")
Cells(i, "B") = Cells(i - 1, "B")
Cells(i, "C") = Cells(i - 1, "C")
Cells(i, "D") = Cells(i - 1, "D")
Cells(i, "E") = Cells(i - 1, "E")
End If
Next i
End Sub




Ciao da locate
excel 2007 / 13
Post: 5
Registrato il: 21/03/2016
Città: MILANO
Età: 39
Utente Junior
2013
OFFLINE
22/03/2016 16:17

c'è un problema: non tutte le serie hanno la riga prima della 10 (quindi la 9-19-29 ecc) compilata...quindi in quei casi non si compilano le celle richieste..
Post: 1.846
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
22/03/2016 17:58

riciao

quindi se ho capito bisogna riportare i valori della prima riga compilata a scalare verso l'alto ???? giusto
se e' questo io ti avevo chiesto di scrivere tutte le righe
10 20 30 40 50 60 70 80 90 per capire cosa bisognava riportare,
ma prima di ( bagnare la tastiera col sudore ) ne hai compilate solo 2 , la 10 e la 20 le quali avevano la riga 9 e 19 con dei valori
comunque prova a vedere la modifica se e' questo che intendi


Sub Rip_J_Calcola()
Dim i As Long, o As Long, r As Long
For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row + 9
If i / 10 = Fix(i / 10) Then
For o = 9 To 1 Step -1
Cells(i, 12 + 9 - o) = Cells(i - o, "J")
Next o
Cells(i, "G") = Application.Sum(Range(Cells(i - 9, "G"), Cells(i - 1, "G")))
Cells(i, "H") = Application.Sum(Range(Cells(i - 9, "H"), Cells(i - 1, "H")))
Cells(i, "I") = Application.Sum(Range(Cells(i - 9, "I"), Cells(i - 1, "I")))
For r = i - 1 To i - 9 Step -1
If Cells(r, "A").Text <> "" Then
Cells(i, "A") = Cells(r, "A")
Cells(i, "B") = Cells(r, "B")
Cells(i, "C") = Cells(r, "C")
Cells(i, "D") = Cells(r, "D")
Cells(i, "E") = Cells(r, "E")
Exit For
End If
Next r
End If
Next i
End Sub



Ciao da locate
excel 2007 / 13
Post: 6
Registrato il: 21/03/2016
Città: MILANO
Età: 39
Utente Junior
2013
OFFLINE
23/03/2016 09:09

Si grazie, così funziona!


locatevaresino, 22/03/2016 17.58:


...io ti avevo chiesto di scrivere tutte le righe
10 20 30 40 50 60 70 80 90 per capire cosa bisognava riportare,
ma prima di ( bagnare la tastiera col sudore ) ne hai compilate solo 2



scusa ma non avevo capito che mi chiedessi di compilarle tutte...ne ho compilate solo due perchè pensavo bastassero...non per pigrizia, sorry ;-)


Ciao
Mary
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 18:53. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com