PDA

View Full Version : [vba excel] contare righe selezionate non consecutive


john_revelator
11-06-2009, 10:20
Salve a tutti. Non riesco a trovare il modo di contare le righe selezionate da un foglio di excel nel caso queste non siano consecutive.


Sub copia()
Set inputcells = Application.InputBox(Prompt:="Seleziona le righe", Title:="Copia e incolla", Type:=8)
MsgBox inputcells.Rows.Count
End Sub


Se ad esempio seleziono 3 righe consecutive e altre 2 dopo una riga vuota, il msgbox mi restituisce 3, cioè il numero del primo intervallo. Come faccio a contarle tutte? Ciao e grazie. :)

MarcoGG
11-06-2009, 11:23
Scomponi la serie di Adress restituiti in un array, e somma i vari Rows.Count :

Dim inputCells As Range
Dim arrayR() As String
Dim contaRows As Long

Set inputCells = Application.InputBox(Prompt:="Seleziona le righe", Title:="Copia e incolla", Type:=8)
arrayR = Split(inputCells.Address, ",")
Dim i As Long
For i = 0 To UBound(arrayR)
contaRows = contaRows + Range(arrayR(i)).Rows.Count
Next i

MsgBox contaRows

;)

john_revelator
11-06-2009, 11:32
Ah, ho capito. Non sapevo che venisse gestito come un array. Quindi il mio output era relativo solo al primo elemento di esso. :fagiano:
Grazie mille Marco. Ti farò un monumento. ;)

MarcoGG
11-06-2009, 12:07
Ah, ho capito. Non sapevo che venisse gestito come un array. Quindi il mio output era relativo solo al primo elemento di esso. :fagiano:
Grazie mille Marco. Ti farò un monumento. ;)

No, non intendevo questo. La procedura di per sè non ritorna un array. E' il mio codice che prende l'Address globale restituito ( che può essere un address multi-range ) e lo scompone con la Split in un array.

Il .Rows.Count su un multi-address a quanto pare ritorna solo il conteggio righe del primo address che trova... Il che è un po' strano e deludente, ma non insormontabile, come difetto.

john_revelator
11-06-2009, 16:44
Sei stato chiarissimo come al solito. Grazie mille per la precisazione. Ciao. :)

MarcoGG
11-06-2009, 21:12
Sei stato chiarissimo come al solito. Grazie mille per la precisazione. Ciao. :)

Ok. Ciao john, alla prossima. ;)