Newsgroup: it.comp.lang.visual-basic
Titolo: Macro per eliminare le colonne vuote

Ho questa macro che serve per eliminare le righe che nella prima cella
hanno il valore 102:  
Dim nr As Long
Dim l As Long
With ActiveSheet
nr = .Range("A65536").End(xlUp).Row
For l = nr To 1 Step -1
If .Cells(l, 1).Value = "102" Then
Rows(l).Delete shift:=xlUp
End If
Next l
Cells(1, 1).Select
End With
Come posso adattare questa macro affinchè elimini anziche le righe le
colonne che nella cella  iniziale hanno un determinato valore da me
impostato?
Grazie
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Rows(l).Delete shift:=xlUp
diventa
.Columns(l).Delete shift:=xlLeft
la .Rows diventa .Columns (stiamo scandendo le colonne azichè le righe)
e .xlUp (sposta le celle in alto) diventa xlLeft (sposta le celle a 
sinistra)
Il Codice:
Dim nr As Long
Dim l As Long
With ActiveSheet
nr = .Range("A65536").End(xlUp).Row
For l = nr To 1 Step -1
If .Cells(1, l).Value = "102" Then
Columns(l).Delete shift:=xlLeft
End If
Next l
Cells(1, 1).Select
End With
Ciao
Stefano 

 Columns(l).Delete shift:=xlLeft
e non so perchč. Mi aiuti?
grazie!



A me non da nessun errore.
Che errore ti da?
Ciao
Stefano

 Che errore ti da?
Forse questa cosa non gli piace, visto che poi usa nr come numero di 
colonna:
nr = .Range("A65536").End(xlUp).Row
Meglio qualcosa tipo:
nr = .Range("ZZ1").End(xlLeft).Column
Ciao
Alberto
-- 
Autore di
"Petting for Dummies"


Dunque, cambiamo metodo,
dato che
.Range("A65536").End(xlUp).Row
serve solo per contare il numero di righe e il numero di colonne, è 
sufficiente sostituirla con:
nr = .Columns.Count
oppure
nr = .Rows.Count
Quindi le due funzioni per la scansione della prima riga e della prima 
colonna
sono rispettivamente:
***************************************************
Sub ScorriRighe()
Dim nr As Long
Dim lIndice As Long
With ActiveSheet
    nr = .Rows.Count
    For lIndice = nr To 1 Step -1
        If .Cells(lIndice, 1).Value = "106" Then
            Rows(lIndice).Delete shift:=xlUp
        End If
    Next lIndice
    Cells(1, 1).Select
End With
End Sub
Sub ScorriColonne()
Dim nr As Long
Dim lIndice As Long
With ActiveSheet
    nr = .Columns.Count
    For lIndice = nr To 1 Step -1
        If .Cells(1, lIndice).Value = "106" Then
            Columns(lIndice).Delete shift:=xlLeft
        End If
    Next lIndice
    Cells(1, 1).Select
End With
End Sub
***************************************************
Volendo essere "precisini" si potrebbe sostituire il valore di confronto con 
un parametro che passi di volta in volta alla funzione.
Ciao
Stefano


Ciao Alberto,
in effetti hai ragione (infatti ho postato a Benassi una soluzione 
alternativa)
solo che il conteggio come lo imposti tu non funziona (ho utilizzato 
.Range("A1").End(xlRight).Column), ma sicurmente ho toppato in qualcosa.
Dato perň che la famigerata variabile nr serve solo per contare il numero di 
rghe e/o il numero di colonne ho utilizzato una piů pratica:
nr = .Columns.Count
nr = .Rows.Count
Anche se il conteggio mi sembra ridondante dato che le colonne e le righe di 
un foglio dovrebbero essere sempre in numero costante:
65536 righe e 256 colonne,
ma magari cosě non č.
Ciao
Stefano