View Full Version : [vba excel] - estrarre prime righe successive a celle vuote
john_revelator
24-11-2009, 21:26
Ciao a tutti. Mi scuso per il titolo un pò criptico ma non ho trovato di meglio. Spero con un esempio pratico di rendere l'idea.
1 aaa
2 bbb
3
4 ccc
5
6
7 ddd
8 eee
9 ffff
10
11 ggg
In pratica ho una colonna con una serie di stringhe (i numeri da 1 a 11 corrispondono semplicemente ai numeri di riga) e dovrei estrarre aaa,ccc,ddd e ggg, cioè le prime righe successive agli spazi. Non mi aspetto la pappa pronta ma mi accontento di un semplice suggerimento circa la logica da seguire. Grazie per l'attenzione. :)
john_revelator
24-11-2009, 22:20
Ho fatto qualche piccolo progresso.
Option Explicit
Sub primi()
Dim ultimariga As Long, i As Long
ultimariga = Range("a65536").End(xlUp).Row
For i = 1 To ultimariga
Do While IsEmpty(Range("a" & i)) And Range("a" & i).Offset(1, 0) <> ""
MsgBox Range("a" & i).Offset(1, 0)
Exit Do
Loop
Next i
End Sub
Devo solo trovare il modo di includere nell'elenco anche il primo valore nel caso in cui la prima riga della colonna non sia vuota. :fagiano:
edit. Pare che adesso funzioni tutto a dovere
Option Explicit
Sub primi()
Dim ultimariga As Long, i As Long
ultimariga = Range("a65536").End(xlUp).Row
If Range("a1") <> "" Then
MsgBox Range("a1")
End If
For i = 1 To ultimariga
Do While IsEmpty(Range("a" & i)) And Range("a" & i).Offset(1, 0) <> ""
MsgBox Range("a" & i).Offset(1, 0)
Exit Do
Loop
Next i
End Sub
ma mi piacerebbe sapere se è possibile evitare quel rozzo if e usare una soluzione più "elegante".
Più che altro credo si possa tranquillamente evitare un Do Loop nidificato nel For, e l'uso degli Offset. :)
Se è stabilito che [A1] sia sempre <> "", allora si può anche evitare l'If a cui ti riferisci :
Dim i As Long
Dim ultimariga As Long
ultimariga = Range("A65536").End(xlUp).Row
For i = 1 To ultimariga
On Error Resume Next
If Range("A" & (i - 1)).Text = "" And Range("A" & i).Text <> "" Then MsgBox Range("A" & i).Text
Next i
Se invece [A1] può anche essere = "", allora :
Dim i As Long
Dim ultimariga As Long
ultimariga = Range("A65536").End(xlUp).Row
If Range("A1").Text <> "" Then MsgBox Range("A1").Text
For i = 2 To ultimariga
If Range("A" & (i - 1)).Text = "" And Range("A" & i).Text <> "" Then MsgBox Range("A" & i).Text
Next i
In ogni caso è un po' più compatto. ;)
john_revelator
25-11-2009, 19:06
Ciao Marco. Grazie mille. E' perfetto e molto più semplice rispetto ai casini che la mia mente malata aveva partorito.
Sei sempre il mio eroe. Buona serata e grazie ancora. ;)
Ciao Marco. Grazie mille. E' perfetto e molto più semplice rispetto ai casini che la mia mente malata aveva partorito.
Sei sempre il mio eroe. Buona serata e grazie ancora. ;)
:)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.