› Excel e gli applicativi Microsoft Office › cancellare righe che contengono valori specifici
-
AutoreArticoli
-
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.Ciao @navilion
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?
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?
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"
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
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?
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
come criterio di ricerca avrei una riga con i valori separati da una virgola
Puoi pubblicare questa riga?
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
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
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
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 -1il 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 SubCiao @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.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
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.
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 Suble 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
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.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 🙂
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?
-
AutoreArticoli
