› Excel e gli applicativi Microsoft Office › Macro per nascondere righe dato un range di selezione?
-
AutoreArticoli
-
Ciao vorrei creare una macro che nasconda l'intera riga quando sono verificate determinate condizioni. Provo a spiegarmi:
Seleziono una serie di celle (no righe intere e no colonne intere), alcune righe (tra quelle selezionate) hanno celle vuote (e sto parlando solamente delle celle selezionate). Queste righe vorrei venissero nascoste (nascoste righe intere).
Grazie per chi riesce a darmi qualche dritta.
Ciao
La dritta te la darei volentieri si avessi capito cosa vuoi fare.
Perchè non alleghi il tuo file (senza dati sensibili) e magari spieghi sul foglio cosa ti aspetti come risultato.
Ciao,
Mario
E pensare che mi ci sono messo anche d'impegno per scrivere tutto dettagliatamente eh?!
non ho speranze con le spiegazioni
Allora.....quello che vorrei sarebbe (ho messo in giallo per semplificare la spiegazione):
Io seleziono tutte le celle che qui sono in giallo, poi clicco sul pulsante apposito e la macro nasconde tutte le righe (quindi righe intere, non solo le celle gialle) in cui tutte le celle della stessa riga sono vuote.....
Insomma, cliccando sul bottone dovrebbe darmi questo come risultato:
Vedi? Ho mantenuto le righe dove c'era almeno un valore!
Però non vorrei che la macro mi effettuasse il ciclo di controllo da XX a YY con XX e YY celle fisse, perè come vedi le colonne sono date e quindi oggi ho solo 4 colonne, ma domani (a seconda di come va il mercato) potrei averne 7 o 8, e anche le righe potrebbe essere che domani aumentino....per questo vorrei selezionare l'area delle celle interessate (che in questo caso ti ho messo in giallo) e poi cliccare sul bottone.........
Dimmi che hai capito
Dimmi che hai capito
Io ti dico che ho capito
Grazie per chi riesce a darmi qualche dritta
Dipende sempre come sei messo a VBA.
Comunque: nella soluzione più banale, quattro righe di codice, si agisce sulla selezione (Selection), scorrendo con un ciclo riga per riga. Con un paio di Application.Transpose e un Join unisci le celle della riga appena scansionata (la riga di una selezione ha tante celle quante sono le colonne della selezione quindi non c'è problema di contarle). Se il frutto del Join è una cella vuota, elimini l'intera riga.
Tra parentesi, sono proprio quattro righe di codice, diventano cinque conteggiando la dichiarazione di variabili.
Ciao
Ottima la soluzione di vecchio frac (un caro saluto) ma io suggerirei due piccole macro (per nascondere o visualizzare)
Eccole. La prima nasconde le righe vuote e la seconda le mostra
Sub nascondi() ur = Cells(Rows.Count, 1).End(xlUp).Row uc = Cells(1, Columns.Count).End(xlToLeft).Column For i = ur To 2 Step -1 For j = 2 To uc dato = dato & Cells(i, j) Next j If dato = "" Then Rows(i).Hidden = True dato = "" Next i End Sub Sub mostra() ur = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To ur Rows(i).Hidden = False Next i End SubAssociale a due pulsanti (Controllo Modulo non ActeveX) e fai sapere. Ciao,
Mario
Yeah grazie mille!!
Ecco appunto io sto imparando orora il vba....diciamo che non so fare nulla, per questo chiedevo il vostro aiuto e supporto.
Ho fatto programmazione ma ancora quando si usava il C++ (caaaro e vecchio C++
)...In testa avrei un ciclo for che va a scorrere tutte le righe selezionate, in cui se la somma per riga delle celle selezionate è pari a zero allora nasconde l'intera riga, altrimenti passa a controllare la riga successiva..
Allora posto la mia soluzione... se invece che nascondere la riga, si vuole eliminarla, la modifica è semplice
Option Explicit Sub elimina_righe_vuote() Dim ro As Range, s As String For Each ro In Selection.Rows s = Trim(Join(Application.Transpose(Application.Transpose(ro)), "")) ro.EntireRow.Hidden = s = "" Next End SubCiao, allora ho provato entrambi i codici, però:
Marius: --> non mi funziona...la prima volta, dopo aver cliccato su "nascondi" ha nascosto tutte le righe della selezione, e cliccando su "espicita", non ha fatto nulla. L'ho riprovato più volte (dopo aver cancellato ed eliminato le Macro) ma le volte successive invece non ha fatto nulla di nulla.
Vecchio frac: --> Il tuo codice funziona, non elimina le righe ma nasconde le righe, e comunque è proprio quello che volevo. Mi servirebbe, a sto punto anche la funzione scopri!
Ma vorrei imparare il significato del codice scritto....cosa fa riga per riga?
Grazie mille
-
AutoreArticoli
