| | Post: 80 | Registrato il: 10/06/2008
| Città: BRESCIA | Età: 47 | Utente Junior | Excel 2019 | | OFFLINE | |
|
04/11/2016 01:02 | |
Ciao a tutti!
Mi serve una macro che mi trovi la prima riga vuota di una tabella che si trova in D10:e30 per esempio. Mi serve una macro che coppi un dato dalla cella C5:D5 alla prima riga vuota di questa tabella. Ho cercato un po' con Google, ma mi sembra che le macro che ho trovato non funzionino.
Grazie _________________
Excel 2019 |
|
| | Post: 11 | Registrato il: 13/08/2015
| Città: COMO | Età: 60 | Utente Junior | excel 2016 | | OFFLINE |
|
04/11/2016 23:35 | |
Ciao, prova con questa macro:
Sub UltimarigaVuotaTabella() uRiga = Cells(Rows.Count, 4).End(xlUp).End(xlUp).Row + 1 Range(Cells(5, 3), Cells(5, 4)).Copy Cells(uRiga, 4).PasteSpecial Paste:=xlValues End Sub
|
| | Post: 82 | Registrato il: 10/06/2008
| Città: BRESCIA | Età: 47 | Utente Junior | Excel 2019 | | OFFLINE | |
|
05/11/2016 02:59 | |
ges64, 04/11/2016 23.35:
Ciao, prova con questa macro:
Sub UltimarigaVuotaTabella() uRiga = Cells(Rows.Count, 4).End(xlUp).End(xlUp).Row + 1 Range(Cells(5, 3), Cells(5, 4)).Copy Cells(uRiga, 4).PasteSpecial Paste:=xlValues End Sub
E' ottima, solo che i dati me li copia nella riga 2 (Range D2:E2). Non capisco perchè. Anche se modifico "" uRiga = Cells(Rows.Count, 4).End(xlUp).End(xlUp).Row + 1" (cambiando il 4 in un altro numero), continua a mettermi i dati nel D2:E2._________________
Excel 2019 |
| | Post: 2.472 | Registrato il: 03/04/2013
| Utente Veteran | Excel 2000 - 2013 | | OFFLINE | |
|
05/11/2016 11:36 | |
Buona giornata, Vpre;
leggo solo ora.
Potresti provare con:
Option Explicit
Sub UltimarigaVuotaTabella()
Dim uRiga As Long
uRiga = Range("D" & Rows.Count).End(xlUp).Row + 1
Range(Cells(5, 3), Cells(5, 4)).Copy
Cells(uRiga, 4).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub
Questo Codice VBA copia i Valori assoluti, quindi non le Formule, presenti nel Range C5:D5 se nelle Celle sottostanti la Riga 30, non ci sono Valori validi; nel qual caso non potresti più utilizzare l'struzione:
uRiga = Range("D" & Rows.Count).End(xlUp).Row + 1
ma dovresti ricorrere ad un Ciclo:
Con questo Ciclo verrà intercettata la prima Cella vuota nel Range D10:E30 anche se esistono Celle contenenti Valori validi dopo la Riga 30.
Con l'augurio possa essere d'aiuto.
A disposizione.
Buon fine settimana.
Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 925 | Registrato il: 06/04/2013
| Utente Senior | 2010 | | OFFLINE |
|
05/11/2016 11:37 | |
Ciao
rispettando il tuo esempio:
Sub FirstBlankRow()
Dim R As Range, C As Range, Fr As Long
Dim RowIsBlank As Boolean
Set rngToSearch = Range("D10:E30")
For Each R In rngToSearch.Rows
RowIsBlank = True
For Each C In R.Cells
If IsEmpty(C.Value) = False Then RowIsBlank = False
Next C
If RowIsBlank Then
Fr = R.Row
Range("C5:D5").Copy Destination:=Cells(Fr, 3)
Exit For
End If
Next R
End Sub
Saluti
oopps scusa...ciao Giuseppe!
[Modificato da dodo47 05/11/2016 11:59] Domenico
Win 10 - Excel 2016 |
| | Post: 2.473 | Registrato il: 03/04/2013
| Utente Veteran | Excel 2000 - 2013 | | OFFLINE | |
|
05/11/2016 12:16 | |
Buona giornata, Domenico. Soluzione molto interessante; già archiviata nelle "Procedure da non cancellare mai". Molto indegnamente, mi sono solo permesso di aggiungere, prima di "End Sub": Set rngToSearch = Nothing Un caro saluto e buon fine settimana. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 927 | Registrato il: 06/04/2013
| Utente Senior | 2010 | | OFFLINE |
|
05/11/2016 18:46 | |
GiuseppeMN, 05/11/2016 12.16:
Buona giornata, Domenico. Soluzione molto interessante....
Anche a te mio caro...il fatto è (per come l'ho capita) che occorreva trovare la prima "riga" vuota, non la prima cella di una colonna.... =Nothing è rimasto nel...dito....grazie! cari saluti Domenico
Win 10 - Excel 2016 |
| | Post: 2.474 | Registrato il: 03/04/2013
| Utente Veteran | Excel 2000 - 2013 | | OFFLINE | |
|
05/11/2016 19:16 | |
Buona sera, Domenico. A questo punto, non ci resta che restare in religiosa attesa delle considerazioni/precisazioni di @ Vpre. Un caro saluto. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 83 | Registrato il: 10/06/2008
| Città: BRESCIA | Età: 47 | Utente Junior | Excel 2019 | | OFFLINE | |
|
05/11/2016 19:42 | |
La macro fa perfettamente il suo lavoro. Ho usato la macro di dodo aggiungendo il suggerimento di giuseppe.
Pensavo di riuscire da solo a modificarla un po' la macro, ma non sono capace.
Volevo riuscire a cambiare il riferimento alla tabella. Perchè la tabella non sarà sempre nel D10:E30, ma cambia. Praticamente ho fatto una tabella con 20 righe per ogni giorno della settimana. Nel senso che lunedì i dati verranno inseriti nella D11:E30, il martedì nel D31:E50, il mercoledì nel D51:E70... ecc
Volevo mettere nella cella F1 le coordinate della prima riga della tabella e nella F2 le coordinate dell'ultima riga.
Ho fatto una cosa del genere:
tt = Range("f2").Value
ww = Range("f3").Value
Set rngToSearch = Range(Cells(tt, 4), Cells(ww, 5))
invece di: Set rngToSearch = Range("D15:E30").
Ma non mi funziona. Comincia a mettere i dati dove vuole.
Grazie _________________
Excel 2019 |
| | Post: 2.476 | Registrato il: 03/04/2013
| Utente Veteran | Excel 2000 - 2013 | | OFFLINE | |
|
05/11/2016 21:27 | |
Buona sera, Vpre; credo che un File, senza dati sensibili, ma con tutte le caratteristiche definite, aiuterebbe a chiarire la tua situazione reale. Buona serata. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 928 | Registrato il: 06/04/2013
| Utente Senior | 2010 | | OFFLINE |
|
06/11/2016 08:54 | |
Ciao
premesso che quanto chiesto da Giuseppe è indispensabile, la tua modifica è corretta, pertanto se dici che ti riporta i dati "dove vuole" hai evidentemente delle righe vuote (in D-E) prima di quella che tu ritieni sia giusta. Ti ricordo che la macro cerca a partire dall'alto del range assegnato e non dal basso.
Es:
D11 valore - E11 vuoto
D12 vuoto - E12 valore
D13 vuoto - E13 vuoto
D14 valore - E14 vuoto
D15 valore - E15 vuoto
la prima riga vuota è: 13.(vedi img allegata)
Se invece la riga vuota per te è la 15, bisogna cambiare il loop che non può essere più un For Each ma deve essere un:
For i= UltimaRigaRange to PrimaRigaRange Step -1.
Ciò detto lo sviluppo "in verticale" del tuo lavoro non entusiasma molto, in quanto ti costringe a spostarti sensibilmente nel foglio per cercare i dati.
saluti Domenico
Win 10 - Excel 2016 |
| | Post: 84 | Registrato il: 10/06/2008
| Città: BRESCIA | Età: 47 | Utente Junior | Excel 2019 | | OFFLINE | |
|
06/11/2016 18:35 | |
E' una cosa molto semplice. Voi sicuramente siete in grado di risolverlo in 2 secondi. Allego il file. Grazie _________________
Excel 2019 |
| | Post: 85 | Registrato il: 10/06/2008
| Città: BRESCIA | Età: 47 | Utente Junior | Excel 2019 | | OFFLINE | |
|
06/11/2016 20:44 | |
Facendo questa modicica alla macro:
Set rngToSearch = Range(Cells(21, 4), Cells(30, 5))
invece di:
Set rngToSearch = Range("D21:E30"),
fa tutto giusto. Comincia ad inserire i dati nelle celle D21:E30
Però non funziona bene se cerco di prendere il numero 21 e 30 dalle celle F1 e F2 con questo codice
tt = Range("f2").Value
ww = Range("f3").Value
Set rngToSearch = Range(Cells(tt, 4), Cells(ww, 5)) _________________
Excel 2019 |
| | Post: 86 | Registrato il: 10/06/2008
| Città: BRESCIA | Età: 47 | Utente Junior | Excel 2019 | | OFFLINE | |
|
06/11/2016 22:18 | |
Ho risolto. Scrivendo:
tt = Cells(1, 6)
ww = Cells(2, 6)
Set rngToSearch = Range(Cells(tt, 4), Cells(ww, 5))
Adesso è perfetto
Grazie mille! _________________
Excel 2019 |
|
|