Excel e gli applicativi Microsoft Office Eliminare colonne con un determinato valore

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

    thunder
    Partecipante

      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 

      #7121 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Ma come vuoi realizzare quanto hai chiesto?

        - manualmente?

        - via codice?

        Un pezzo di file di esempio sarebbe utile per realizzare uno scenario attendibile.

        #7122 Score: 0 | Risposta

        Luca73
        Partecipante
          58 pts

          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

          #7123 Score: 1 | Risposta

          Luca73
          Partecipante
            58 pts

            Ciao VF,

            anticipato sul filo ...... 👿 

            #7125 Score: 0 | Risposta

            thunder
            Partecipante

              @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.
              #7127 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                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.
                #7129 Score: 0 | Risposta

                Luca73
                Partecipante
                  58 pts

                  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)

                   

                  #7130 Score: 1 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    Ho visto il file allegato da Thunder e mi sembra che la mia proposta soddisfi i requisiti richiesti 🙂

                    #7132 Score: 0 | Risposta

                    thunder
                    Partecipante

                      Funziona! Speravo fosse più facile il codice  🙁 

                      Ho eliminato il Msbx e cambiato il range.

                       

                      Grazie per il tempo dedicatomi

                       

                      #7134 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        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)

                        #7135 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          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 Sub
                          #7136 Score: 0 | Risposta

                          thunder
                          Partecipante

                            grazie per le delucidazioni!

                            #7138 Score: 0 | Risposta

                            Luca73
                            Partecipante
                              58 pts

                              Ciao VF che fai...mi pigli per i Fon:arrow: ➡ ➡ 

                              :mrgreen: 

                              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

                              #7140 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                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.

                                 

                                #7141 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  272 pts

                                  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 ^_^)

                                Login Registrati
                                Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)
                                Rispondi a: Eliminare colonne con un determinato valore
                                Gli allegati sono permessi solo ad utenti REGISTRATI
                                Le tue informazioni: