› Excel e gli applicativi Microsoft Office › Eliminare colonne con un determinato valore
-
AutoreArticoli
-
Ciao,
in un foglio excel vorrei poter eliminare tutte le colonne che contengono il valore "anomalia". Vorrei inoltre poter specificare l'intervallo di ricerca (in questo caso colonne A:G)
Grazie in anticipo
Ma come vuoi realizzare quanto hai chiesto?
- manualmente?
- via codice?
Un pezzo di file di esempio sarebbe utile per realizzare uno scenario attendibile.
Ciao Domanda.
Dove cerchi il valore "anomalia"? in tutta la colonna oppure in celle particolari
Quando dici eliminare la colonna intendi TUTTA la colonna
Inoltre come preferisci selezionare le colonne?
Ad esempio:
- un inputbox che selezioni un range
- un/due inputbox in cui digiti la lettera della colonna (oppure la lettera della prima colonna e il numero di colonne.
- due celle in cui avere i valori
- ....
ciao
Luca
@vecchiofrac vorrei farlo tramite macro.
@luca73 Non ho bisogno di input box perché l'intervallo è sempre lo stesso all'interno di ogni foglio (è raro che cambi ma eventualmente modifico il codice a seconda dell'esigenza)
Il valore "anomalia" deve essere ricercato in tutta la colonna. In caso di corrispondenza quest'ultima deve essere eliminata completamente.
Allego un file di esempio. Nei due fogli ci sono i dati di partenza(PRIMA) e il risultato aspettato (DOPO)
Allegati:
You must be logged in to view attached files.Prima di leggere le risposte mi sono messo a realizzare un piccolo file di esempio.
Vediamo se incontra il Vostro favore 🙂
Allegati:
You must be logged in to view attached files.La mia domanda era per rispondere alla tua richiesta di poter specificare le colonne di ricerca
Vorrei inoltre poter specificare l'intervallo di ricerca (in questo caso colonne A:G)
Funziona! Speravo fosse più facile il codice 🙁
Ho eliminato il Msbx e cambiato il range.
Grazie per il tempo dedicatomi
thunder wrote:Speravo fosse più facile il codice
Non farti spaventare, il codice proposto è in realtà piuttosto semplice, ho dovuto fare un doppio passaggio mediante una collection (per gestire eventuali colonne indicate due volte) e un successivo array di colonne da eliminare (da riordinare mediante la piccola routine di shellsort).
Magari Luca ha qualche idea meno complicata 🙂 (però così hai anche portato via una bella routine per riordinare un vettore)
Ok, semplifichiamo prima che lo faccia Luca 😀
Option Explicit Sub find_and_delete2() Dim r As Range Dim c As Range Dim col As Range Dim i As Long If MsgBox("Questa routine considera del foglio attivo il range a partire da A1" & vbNewLine & _ "ed ELIMINA le colonne dove compare la parola 'anomalia'." & vbNewLine & _ "ATTENZIONE! La procedura è distruttiva e NON ANNULLABILE!" & vbNewLine & _ "Se sei sicuro di proseguire premi Sì.", vbInformation + vbYesNo + vbDefaultButton2, "Attenzione") = vbNo Then Exit Sub Set r = Range("a1").CurrentRegion For i = r.Columns.Count To 2 Step -1 Set c = Columns(i).Find("anomalia", LookIn:=xlValues) If Not (c Is Nothing) Then Columns(i).EntireColumn.Delete End If Next MsgBox "Fatto." End SubCiao VF che fai...mi pigli per i Fon:arrow: ➡ ➡
In effetti non l'ho analizzato a fondo e a prima vista mi sembrava lungo.
però una cosa l'ho imparata: Che VF non mette righe che non servono....
La logica della Macro originale era chiara.
Non ho invece capito appieno la logica del riordino... devo studiare....
Ciao Ciao
Luca
Luca73 wrote:mi pigli per i
Oh LOL 🙂
Dunque: il primo listato cerca le ricorrenze di "anomalia" nel range specificato con il classico ciclo Do...Loop, ad ogni occorrenza trovata riempie una collection con il numero della colonna in cui si trova la parola cercata. Alla fine ho una collection con i numeri di colonna da cancellare. Poichè possono esservi più ricorrenze della parola in una colonna, posso avere chiavi uguali (con il trucco di ignorare l'errore di chiave duplicata nella collection avrò sempre solo un numero di colonna anche se le ricorrenze sono più).
Ora basterebbe scorrere la collection, recuperandone i valori, per eliminare le colonne indicate: ma siccome i valori inseriti non sono in ordine, così facendo potrei in teoria eliminare la colonna 1 prima della colonna 5. E succederebbe un bel quarantotto 🙂
Pertanto sono costretto a riversare i valori della collection in un array, che processo subito per riordinarlo (il codice di Shellsort non è mio ma di Francesco Balena, al solito).
Quindi alla fine posso eliminare le colonne interessate partendo dall'ultimo elemento dell'array risalendo fino al primo (ricordo che quando si cancellano righe o colonne si deve partire dall'ultima riga o colonna a ritroso, altrimenti Excel non si trova più i riferimenti sotto i piedi).
Il secondo codice è molto più banale e meno pensato: semplicemente cicla a ritroso dall'ultima colonna del range fin alla prima, se trova almeno una ricorrenza della parola cercata, elimina la colonna. Non ci sono problemi perchè siamo partiti apposta dal fondo, per il motivo di cui poco fa.
Luca73 wrote:la logica del riordino
E' un bell'esempio di Shellsort ed è uno dei più veloci che ho provato.
Onestamente non saprei descriverti il dettaglio (non adesso almeno ^_^)
-
AutoreArticoli
