Excel e gli applicativi Microsoft Office cancellare righe che contengono valori specifici

Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 30 totali)
  • Autore
    Articoli
  • #52310 Score: 0 | Risposta

    navilion
    Partecipante

      Buongiorno,

      su una colonna di excel  vorrei selezionare le celle che contengono valori (numeri e lettere) e cancellare le corrispettive righe.

      ho una colonna con il seguente contenuto: 

      canvas-1399, canvas-1398, canvas1397, canvas 1396, canvas-1395 e cosi' via

      vorrei selezionare "canvas-1397", "canvas-1394", canvas-1391" e via dicendo e cancellare le relative righe 

      ho la versione di excel2019.

      in allegato c'e un esempio 

      qualcuno e' in grado di indicarmi una soluzione? 

      grazie

      Allegati:
      You must be logged in to view attached files.
      #52313 Score: 0 | Risposta

      alexps81
      Moderatore
        58 pts

        Ciao @navilion

        navilion ha scritto:

        in allegato c'e un esempio 

        sarebbe meglio un file Excel anziché un'immagine.

        Comunque la tua richiesta è un po' "strana". Non puoi semplicemente tenere premuto il tasto CTRL e con il mouse fai click su ogni numero di riga ed infine tasto desto e Elimina?

        navilion ha scritto:

        vorrei selezionare "canvas-1397", "canvas-1394", canvas-1391" e via dicendo e cancellare le relative righe 

        Ma poi vuoi Eliminare o Cancellare? Sono 2 cose divere. Eliminare rimuove completamente il rigo, Cancellare svuota il contenuto.

        Quale poi sarebbe il criterio di selezione?

        #52314 Score: 1 | Risposta

        LukeReds
        Partecipante
          19 pts

          ciao.

          potresti inserire un filtro, filtrare i dati che vuoi cancellare (rimangono evidenziate quiindi soo le righe da cancellare) ed eliminare le righe visibili. Quando toglierai il fitro avrai solo le righe non eliminate

          Se invece vuoi solo cancellare quelle righe anzichè eliminarle, dopo averle filtrate, le selezioni e "canc"

          #52315 Score: 0 | Risposta

          Federico

            Ciao @alexps81

            mi serve eliminare e quindi rimuovere completamente il rigo (non devono rimanere righe vuote).

            farlo manualmente mi occorrerebbero intere giornate avendone svariati files.

            il criterio di selezione chiedo a voi. io ho una serie di valori (che sarebbero quelli che le cui righe vanno eliminate) separati da una virgola.

            esiste una macro per questo tipo di lavoro?

            grazie ancora

            #52316 Score: 0 | Risposta

            alexps81
            Moderatore
              58 pts

              Se è una cosa ricorrente, quello che mi viene in mente in questo momento, si potrebbe creare una UserForm che abbia all'interno una ListBox con i valori univoci. A quel punto selezioni i valori che ti interessano e al click su un Button confermi l'eliminazione di tutte quelle righe che contengono quei valori selezionati. Non so...può andar bene?

              #52317 Score: 0 | Risposta

              Federico

                ciao LukeReds

                ho fatto una ricerca sui filtri e ho visto che in quel caso devo selezionare con una spunta ogni singola cella, avendone diverse migliaia da selezionare mi chiedevo se esiste un metodo piu' breve. come criterio di ricerca avrei una riga con i valori  separati da una virgola. se esiste un metod0 rapido e automatico, potresti farmi un esempio?

                grazie 

                #52318 Score: 0 | Risposta

                alexps81
                Moderatore
                  58 pts

                  Federico ha scritto:

                  come criterio di ricerca avrei una riga con i valori  separati da una virgola

                  Puoi pubblicare questa riga?

                  #52319 Score: 0 | Risposta

                  Federico

                    1001,1005,1012,1015,1018,1023,1024,1029,1037,1041,1052,1060,1066,1069,1070,1072,1075,1077,1081,1082,1088,1091,1096,1099,1100,1102,1105,1106,1107,1108,1109,1114,1116,1117,1119,1123,1124,1125,1126,1128,1129,1132,1134,1137,1139,1141,1142,1149,1151,1152,1153,1154,1155,1156,1159,1164,1165,1167,1168,1170,1174,1175,1177,1181,1184,1185,1186,1190,1192,1193,1194,1195,1199,1205,1207,1208,1210,1212,1213,1214,1216,1224,1225,1229,1247,1248,1249,1250,1251,1253,1254,1255,1257,1258,1260,1264,1274,1277,1284,1287,1288,1289,1294,1295,1296,1297,1299,1300,1302,1307,1308,1310,1311,1312,1313,1315,1316,1317,1318,1320,1323,1324,1326,1329,1330,1332,1334,1336,1347,1349,1355,1357,1358,1359,1360,1361,1362,1364,1365,1366,1367,1368,1370,1371,1372,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1392,1393,1394,1395,1396,1397,1398,1400

                    ho trasposto i valori da una colonna per selezionare i relativi files e rimuoverli da una cartella. ora devo rimuoverli anche dai fogli excel

                    non trovo il modo per allegare il foglio di excel

                     

                    #52320 Score: 0 | Risposta

                    navilion
                    Partecipante

                      @alexps81,

                      ho caricato il file excel

                      Allegati:
                      You must be logged in to view attached files.
                      #52322 Score: 1 | Risposta

                      alexps81
                      Moderatore
                        58 pts

                        Federico ha scritto:

                        non trovo il modo per allegare il foglio di excel

                        Devi essere iscritto al Forum e fare l'accesso.

                        Ma in questo tuo elenco hai solo i numeri o anche la scritta canavas? Ho predisposto una macro con doppio ciclo ma mi devi dire se l'elenco che hai ha solo numeri o anche la scritta canavas prima del numero

                        #52323 Score: 0 | Risposta

                        navilion
                        Partecipante

                          @alexps81

                          c'e' anche la parola  "canvas"

                          es:

                          canvas-1400

                          canvas-1340

                          canvas-1277

                           

                          #52324 Score: 1 | Risposta

                          alexps81
                          Moderatore
                            58 pts

                            Si ma nell'elenco che tu hai postato poco sopra, ci sono solo numeri. In realtà, in questo elenco separato da virgole, hai anche la parola canvas prima del numero?

                            #52325 Score: 0 | Risposta

                            navilion
                            Partecipante

                              esatto, c'e' anche la parola canvas... in questo momento non riesco a darti la sequenza completa con la parola canvas. e poi in altri fogli la parola canvas viene sostituita da altre varianti come "poster-1355" e cosi' via. a me serve la macro con l'esempio poi provvedero' io a cambiare volta per volta

                               

                              #52327 Score: 1 | Risposta

                              alexps81
                              Moderatore
                                58 pts

                                Ok, allora prova questa macro. Quando appare la InputBox dovrai incollare l'insieme delle sigle (canvas-numero) separate dalla virgola.

                                Se il tuo elenco parte da A2 a scendere allora la macro va già bene così. Se parte da un rigo diverso dovrai modificare questa parte:

                                For i = ur To 2 Step -1 il numero 2 dovrai modificarlo nel numero da cui parte l'elenco.

                                Option Explicit
                                
                                Sub eliminaRighe()
                                    Dim elencoRighe As Variant
                                    Dim valore As Variant
                                    Dim ur As Long, i As Long, j As Long
                                    
                                    elencoRighe = Application.InputBox("Indica l'elenco delle righe separate con una virgola", "Elimina rghe", Type:=2)
                                    
                                    ur = Cells(Rows.Count, "A").End(xlUp).Row
                                    
                                    If elencoRighe <> False Then
                                        valore = Split(elencoRighe, ",")
                                        For j = LBound(valore) To UBound(valore)
                                            For i = ur To 2 Step -1
                                                If Cells(i, "A").Value = valore(j) Then
                                                    Rows(i).Delete
                                                End If
                                            Next i
                                        Next j
                                        MsgBox "Fatto."
                                    End If
                                End Sub
                                #52328 Score: 0 | Risposta

                                navilion
                                Partecipante

                                  grazie mille! provo e ti faccio sapere

                                  #52331 Score: 1 | Risposta

                                  alexps81
                                  Moderatore
                                    58 pts

                                    Ciao @navilion mi sono accorto di un problema. Purtroppo Application.InputBox non accetta "incollaggio" e non funziona nemmeno una semplice InputBox perché non va oltre i 255 caratteri. E' necessario ricorrere ad una UserForm con un TextBox. Ti allego un file di esempio con UserFrom. Prova a vedere se riesci trasferire questa UserForm nel tuo file e lanciala. Poi incolla le sigle nella TextBox e poi premi di "Cancella"

                                    Allegati:
                                    You must be logged in to view attached files.
                                    #52333 Score: 1 | Risposta

                                    vecchio frac
                                    Senior Moderator
                                      272 pts

                                      Federico ha scritto:

                                      esiste una macro per questo tipo di lavoro?

                                      Scusa se arrivato a questa riga mi viene da sorridere...   

                                      No, non "esiste" una macro in natura, bisogna crearla... come Alex ha dimostrato   

                                      Il secondo For (quello innestato) rallenta, forse ce la caveremmo meglio con un range.Find, magari ci starebbe bene anche uno ScreenUpdating a False ma insomma tutto sommato la performance dovrebbe reggere   

                                      #52334 Score: 1 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        alexps81 ha scritto:

                                        Application.InputBox non accetta "incollaggio"

                                        Potresti ovviare facendo incollare all'utente la rigona di numeri in una cella lontana dalla base dati, magari su un foglio secondario.

                                        #52335 Score: 1 | Risposta

                                        vecchio frac
                                        Senior Moderator
                                          272 pts

                                          Tenendo presente che il limite di caratteri che una cella accetta e' 32767 (non mi sembra che ci sia il limite per la textbox, nemmeno una TB activex su foglio, credo)

                                          #52336 Score: 1 | Risposta

                                          alexps81
                                          Moderatore
                                            58 pts

                                            Ciao @Vecchio Frac, si si tutto giusto. Siccome iniziava a giocare Sinner non ho pensato ad altro   

                                            Appena posso metto in pratica i tuoi suggerimenti   

                                            #52337 Score: 1 | Risposta

                                            alexps81
                                            Moderatore
                                              58 pts

                                              Dunque, seguendo i consigli di VF, anziché utilizzare una TextBox in UserForm, appoggiamo l'elenco delle sigle temporaneamente in una cella (nel nostro caso ho ipotizzato la "C1" ma si può tranquillamente cambiare nel codice).

                                              Poi ho eliminato il secondo ciclo FOR...quello annidato e sostituito con un Find e FindNext. Infine ho aggiunto Application.ScreenUpdating per gestire l'aggiornamento a schermo.

                                              Quindi...se va bene la cella C1 per appoggiare temporaneamente l'elenco delle sigle, allora la macro già è predisposta. Altrimenti modifica la cella d'appoggio nel codice e poi lancialo.

                                              Option Explicit
                                              
                                              Sub eliminaRighe()
                                                  Dim elencoRighe As Variant
                                                  Dim valore As Variant
                                                  Dim ur As Long, j As Long
                                                  Dim f As Range, righeDaEliminare As Range
                                                  Dim firstAddress As String
                                                  
                                                  elencoRighe = Range("C1").Value '<--cambiare eventualmente riferimento cella d'appoggio
                                                      
                                                  If elencoRighe <> "" Then
                                                      Application.ScreenUpdating = False
                                                      ur = Cells(Rows.Count, "A").End(xlUp).Row
                                                      
                                                      valore = Split(elencoRighe, ",")
                                                      For j = LBound(valore) To UBound(valore)
                                                          Set f = Range("A2:A" & ur).Find(What:=valore(j), LookIn:=xlValues, LookAt:=xlWhole)
                                                          If Not f Is Nothing Then
                                                              firstAddress = f.Address
                                                              Do
                                                                  If Not righeDaEliminare Is Nothing Then
                                                                      Set righeDaEliminare = Union(righeDaEliminare, f.EntireRow)
                                                                  Else
                                                                      Set righeDaEliminare = f.EntireRow
                                                                  End If
                                                                  Set f = Range("A2:A" & ur).FindNext(f)
                                                              Loop While Not f Is Nothing And firstAddress <> f.Address
                                                          End If
                                                      Next j
                                                      
                                                      If Not righeDaEliminare Is Nothing Then righeDaEliminare.Delete
                                                      Application.ScreenUpdating = True
                                                      MsgBox "Fatto."
                                                  End If
                                                  
                                                  Set f = Nothing
                                                  Set righeDaEliminare = Nothing
                                              End Sub
                                              #52338 Score: 0 | Risposta

                                              navilion
                                              Partecipante

                                                @alexps81

                                                le macro che hai creato hanno funzionato alla perfezione. la seconda decisamente meglio visto che avevo un elenco molto lungo di valori. come ha suggerito @vecchio frac.

                                                ho una conoscenza di base di excel ma sono andato a intuito quindi ho inserito in una cella "X1" l'elenco dei valori contenuti in una colonna separati da virgola "canvas-1, etc..." che tu hai chiamato elenco delle sigle, ho eseguito la macro e ha funzionato tutto correttamente.

                                                ringrazio te e vecchio frac per l'aiuto

                                                 

                                                #52339 Score: 1 | Risposta

                                                LukeReds
                                                Partecipante
                                                  19 pts

                                                  ciao,

                                                  dal file allegato sè già selezionato cli8, se elimini le righe contenente questo clientie (anche n righe in più) quando togli il filtro hai i dati "puliti"

                                                   

                                                  Allegati:
                                                  You must be logged in to view attached files.
                                                  #52345 Score: 0 | Risposta

                                                  navilion
                                                  Partecipante

                                                    ciao @lukereds,

                                                    non conoscevo questa opzione. grazie per il suggerimento. in questo caso penso sia un po' laborioso visto che dovrei selezionare piu' di un centinaio di caselle. ma mi sara' comunque utile. grazie ancora 🙂

                                                    #52354 Score: 0 | Risposta

                                                    navilion
                                                    Partecipante

                                                      ciao @LukeReds,

                                                      ho ripensato al metodo che mi hai mostrato per l'eliminazione delle righe, potrebbe tornarmi utile.

                                                      nel tuo esempio hai indicato le caselle con valore "cli8". come faccio a far corrispondere il valore "X" a tutte le righe che devo cancellare? esiste una formula?

                                                      canvas-1 | X

                                                      canvas-34|X

                                                      canvas-67|

                                                      canvas-58|

                                                      canvas-48|X

                                                      canvas-5|

                                                      avendo i valori canvas1,canvas,34,canvas-48(come spiegato sopra, la lista e' di centinaia di valori"canvas-numero") sulle celle della colonna a fianco dovrebbe uscire "X" (cli8 nel tuo esempio) . esiste una formula?

                                                       

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 30 totali)
                                                    Rispondi a: cancellare righe che contengono valori specifici
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: