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

Macro ultima riga

Ultimo Aggiornamento: 06/11/2016 22:18
Post: 80
Registrato il: 10/06/2008
Città: BRESCIA
Età: 47
Utente Junior
Excel 2019
OFFLINE
04/11/2016 01:02

Macro ultima riga
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

Re:
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:
Do While

LOOP

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

Re:
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
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 07:28. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com