| | Post: 143 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
07/05/2019 19:46 | |
Buona sera nel foglio 1 devo cancellare delle righe mi
servirebbe una Sub per esempio con Msg = InputBox("Digitare almeno un numero da 1 a 90) in questo caso ho scelto
il 44, una volta digitato si dovrebbe far partire la ricerca e se nelle colonne C,D,E,f,G non è presente il valore scelto in questo caso il 44,la macro dovrebbe cancellare tutte le altre righe del foglio. Nel mio foglio1 dovrebbero rimanere soltanto le righe (1,2,7).Grazie Matteo |
|
| | Post: 798 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
07/05/2019 23:33 | |
Puoi provare con una macro così come base di partenza: Option Explicit
Sub EliminaRighe()
Dim num As Integer
Dim rng As Range
Dim riga As Long
On Error GoTo fine 'esci se non rispondo
num = InputBox("Digitare un numero da 1 a 90")
If Not num >= 1 Or Not num <= 90 Then Exit Sub 'esci se immesso numero non previsto
Application.ScreenUpdating = False
With Worksheets("Foglio1")
Set rng = .Range("A1:G" & .Cells(Rows.Count, 1).End(xlUp).Row) 'rilevo l'area da gestire
For riga = rng.Rows.Count To 1 Step -1 'ciclo tutte le righe
'verifico se c'è il numero nella riga
If Not Application.WorksheetFunction.CountIf(.Range("C" & riga & ":G" & riga), num) > 0 Then
rng.Rows(riga).EntireRow.Delete 'altrimenti elimino l'intera riga
End If
Next riga
End With
Application.ScreenUpdating = True
fine:
End Sub [Modificato da rollis13 07/05/2019 23:33]
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 3.368 | Registrato il: 03/04/2013
| Utente Master | Excel 2000 - 2013 | | OFFLINE | |
|
08/05/2019 07:08 | |
Buona giornata, Matteo; consentimi un saluto a @rollis13. Dopo aver preso buona nota della soluzione proposta da Rollis, mi chiedevo se, invece di cancellare le Righe che non contengono il Valore imposto, non sia più conveniente nasconderle. Il riscontro visivo sarebbe identico ma potresti avere l'opportunità di analizzare più variabili. Buon Lavoro. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 143 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
08/05/2019 21:02 | |
Buona sera Rollis13, buona sera Giuseppe, ti ringrazio rollis13 ottima macro perfetta lo già verificata complimenti perfetta,rispondo anche a Giuseppe che lo saluto è un po' che non ci sentiamo ,volevo si nasconderle ma solo è possibile con macro perché io non uso i menù a tendina ripeto con macro la vorrei volentieri, un altra cosa ho
letto solo pochi giorni fà (In questi giorni sto seriamente pensando di raggruppare tutto in due libri ben distinti; non per scopi economici, eventuali quanto improbabili benefici andrebbero sicuramente a qualche ONLUS)io voglio i tuoi due libri , Saluti Matteo. |
| | Post: 799 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
08/05/2019 23:12 | |
Grazie del riscontro positivo 🙂.
Se devi solo nascondere le righe puoi usare quest'altro codice: 'rng.Rows(riga).EntireRow.Delete 'altrimenti elimino l'intera riga
rng.Rows(riga).EntireRow.Hidden = True 'altrimenti nascondo l'intera riga [Modificato da rollis13 08/05/2019 23:13]
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 3.369 | Registrato il: 03/04/2013
| Utente Master | Excel 2000 - 2013 | | OFFLINE | |
|
09/05/2019 11:21 | |
Buona giornata, Matteo;
dopo aver preso buona nota della proposta di @rollis13, che saluto, potresti considerare questa soluzione, due Codici VBA:
- Visualizza; visualizza tutti i Record
- Nascondi; visualizza solo i Record che soddisfano la regola imposta
Option Explicit
Sub Visualizza()
Cells.EntireRow.Hidden = False
Cells(1, 1).Select
End Sub
Sub Nascondi()
Application.ScreenUpdating = False
Dim NRc As Long, x As Long
Dim Vlr As Byte
Dim Rng As Range
NRc = Range("A" & Rows.Count).End(xlUp).Row
Set Rng = Range(Cells(1, 3), Cells(NRc, 7))
Range(Cells(1, 1), Cells(NRc, 1)).EntireRow.Hidden = True
Vlr = InputBox("Digitare il numero da valutare compresa tra 1 e 90")
For x = 1 To NRc
If Not Application.WorksheetFunction.CountIf(Range("C" & x & ":G" & x), Vlr) = 0 Then Cells(x, 1).EntireRow.Hidden = False
Next x
Application.ScreenUpdating = True
End Sub
A margine di quanto sopra, ringrazio Rollis per la condizione:
If Not Application.WorksheetFunction.CountIf(.Range("C" & riga & ":G" & riga), num) > 0 Then
Rng.Rows(riga).EntireRow.Delete 'altrimenti elimino l'intera riga
End If
che non conoscevo e ho cercato di adattare al Codice VBA "Nascondi"
@gattodimarmo1980, scrive:
... un altra cosa, ho letto solo pochi giorni fà (In questi giorni sto seriamente pensando di raggruppare tutto in due libri ben distinti; non per scopi economici, eventuali quanto improbabili benefici andrebbero sicuramente a qualche ONLUS)io voglio i tuoi due libri...
Per i libri credo dovrai attendere; per ogni Codice VBA devo documentare una spiegazione chiara ma sintetica, e non è facile.
Ovviamente, se lo ritieni utile e opportuno posso fornirti privatamente il File "Macromag" nel quale sono salvate tutti i Codici VBA che nel tempo ho costruito.
A disposizione.
Buon Lavoro.
Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 144 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
12/05/2019 11:14 | |
Buona Domenica ,ringrazio sia Rollis13 e GiuseppeMN per i codici siete veramente due professionisti complimenti.Per Giuseppe MN ,attendo con ansia i tuoi libri fammi sapere quando verranno pubblicati.Saluti Matteo |
| | Post: 147 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
13/05/2019 22:05 | |
Cancella in base valore colonna J Buona sera a tutti allego foglio si potrebbe i potrebbe aggiungere un modulo che cancella tutte le righe inserendo per esempio un Msg = InputBox(", Digita il valore da tenere compreso da 1 a 15"digita almeno 4 valori, , "")cancellando così le altre righe?Faccio esempio digitando valore 9 10 le righe da tenere sarebbero la (9,la 10), la (22, la 23), la (34, la 35).Grazie anticipatamente Matteo.La colonna J è basilare . |
| | Post: 3.374 | Registrato il: 03/04/2013
| Utente Master | Excel 2000 - 2013 | | OFFLINE | |
|
15/05/2019 05:21 | |
Buona giornata, Matteo.
@gattodimarmo1980, scrive:
... nel foglio di lavoro in allegato, si potrebbe aggiungere un modulo che cancella tutte le righe inserendo per esempio un Msg = InputBox(", Digita il valore da tenere compreso da 1 a 15"digita almeno 4 valori, , "")cancellando così le altre righe?Faccio esempio digitando valore 9 10 le righe da tenere sarebbero la (9,la 10), la (22, la 23), la (34, la 35). Grazie anticipatamente Matteo. La colonna J è basilare .
Credo che la soluzione più veloce sia "Nascondere le Righe" e non "Cancellare/Eliminare le Righe".
Avrei pensato a due Codici VBA:
Option Explicit
Sub Visualizza()
Cells.EntireRow.Hidden = False
Cells(1, 1).Select
End Sub
Sub Nascondi()
Application.ScreenUpdating = False
Dim NRc As Long, x As Long
Dim Vlr As Byte, y As Byte, Vlx As Byte
Dim Rng As Range
NRc = Range("A" & Rows.Count).End(xlUp).Row
Set Rng = Range(Cells(1, 3), Cells(NRc, 7))
Range(Cells(1, 1), Cells(NRc, 1)).EntireRow.Hidden = True
Vlx = InputBox("Digitare le serie dei numeri da valutare.")
For y = 1 To Vlx
Vlr = InputBox("Digitare il numero da valutare compresa tra 1 e 90")
For x = 1 To NRc
If Cells(x, 10) = Vlr Then Cells(x, 1).EntireRow.Hidden = False
Next x
Next y
Application.ScreenUpdating = True
End Sub
Il Codive VBA "Visualizza" serve per visualizzare tutti i Record precedentemente nascossti; credo cche su questo Codice non ci sia bisogno di spiegazioni.
Il Codice VBA "Nascondi" è più complesso:
InputBox Vlx chiede quanti Valori dovranno essere valutati:
- se i Valori da visualizzare sono 2 (9 e 10), il valore da inserire sarà 2
- se i Valori da visualizzare sono 4 (1, 5, 9 e 10), il valore da inserire sarà 4
A questo punto, verranno proposti in sequenza tanti InputBox Vlr quanti sono quelli definiti precedentemente in InputBox Vlx.
In ogni InputBox andrà inserito il Valore da valutare; nel caso dei Valori 9 e 10, verrà proposto:
- InputBox Vlx; il valore da inserire sarà 2
- Succesivamente, nel primo InputBox Vlr il valore da inserire sarà 9
- Nel secondo InputBox Vlr il valore da inserire sarà 10
Alla fine del Ciclo resteranno visualizzati solo i Record definiti negli InputBox Vlr.
Supponendo di voler visualizzare i Record che in Colonna "J" hanno Valore 1, 5, 9 e 10, il risultato sarà quello proposto nell'immagine in allegato.
Con l'auspicio di aver interpretato correttamente la tua richiesta, rimango a disposizione per eventuali ulteriori chiarimenti.
Buon Lavoro.
Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 148 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
18/05/2019 12:50 | |
Ringrazio ancora una volta il mitico GiuseppeMN. Codice perfetto Grazie buon week end a tutti Matteo. |
|
|