Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    excel formula che restituisca dati univoci

    salve a tutti.. mi scuso in anticipo se sbaglio ad espormi o ad usare questo forum in quanto nuovo e poco pratico...il mio quesito è questo...avrei bisogno di una formula in excel che mi restituisca dati univoci...considerando una colonna A:A in foglio1 dove vengono riportati dati alfanumerici che si ripetono mi servirebbe che gli stessi dati in modo univoco siano riportati nella colonna B:B in foglio2 e che gli stessi vengano aggiornati in automatico ogni qualvolta inserisco dei nuovi nella colonna A:A in foglio 1...

    ES.

    foglio1
    A
    1 231AB-534TT
    2 BC-567-23
    3 2345870
    4 231AB-534TT
    5 BC-567-23
    6 231AB-534TT
    7 ARTER456

    foglio2
    B
    1 231AB-534TT
    2 BC-567-23
    3 2345870
    4 ARTER456

    spero di essere comprensibile....grazie
    chi si ferma è perduto

  2. #2
    ecco lo sapevo...
    ripeto l'esempio...


    foglio1
    A
    1 231AB-534TT
    2 BC-567-23
    3 2345870
    4 231AB-534TT
    5 BC-567-23
    6 231AB-534TT
    7 ARTER456

    foglio2
    B
    1 231AB-534TT
    2 BC-567-23
    3 2345870
    4 ARTER456
    chi si ferma è perduto

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Apri l'editor vba di excel. Fai doppio click sul foglio 1 e associagli questo codice

    codice:
    Private Sub Worksheet_Change(ByVal Target As Range)
    'copio il contenuto della colonna A del foglio 1 nella colonna C del foglio 2
    Sheets(1).Range("A:A").Copy Sheets(2).Range("C1")
    'ordino le voci copiate in senso decrescente al fine di poter applicare il filtro avanzato
    Sheets(2).Range("C:C").Sort Key1:=Sheets(2).Columns("C"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    'filtro e copio il risultato nella colonna B del foglio 2
    Sheets(2).Range("C1", Sheets(2).Range("C65536").End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets(2).Range("B1"), Unique:=True
    'cancello tutto dalla colonna C
    Sheets(2).Range("C:C").Clear
    End Sub
    Ogni volta che aggiungerai/modificherai/eliminerai righe dal foglio 1, il foglio 2 verrà aggiornato con le voci univoche di conseguenza.

  4. #4
    ciao nicola75ss...piacere di conoscerti...sei gentilissimo e ti ringrazio per l'indicazione..ho inserito il codice che mi indichi ma non funziona..a proposito volevo dire che il mio esempio contiene dati con relativi nomi dei fogli e colonne fittizi che ho cercato di sostituire al codice... poi ho cambiato nomi ai fogli per renderli uguali all'esempio ed inserire il tuo codice così come me l'hai indicato ma niente lo stesso...ciò che non mi torna anche per la mia ignoranza in materia è che nel codice ci sono riferimenti a colonna C del foglio 2 che nell'esempio non ho mensionato...
    grazie..
    chi si ferma è perduto

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao.
    Non è necessario rinominare i fogli. Nel codice che ti ho scritto faccio riferimento ad essi tramite l'indice. Quindi il foglio 1 sarà il primo nell'elenco delle linguette che trovi a fondo pagina a prescindere da come si chiama.

    Il codice te l'ho commentato appositamente per farti capire cosa fa e, come c'è scritto, la colonna c nel foglio 2 mi serve in fase di elaborazione dell'elenco dei nomi univoci. Una volta che non serve più ne rimuovo tutto il contenuto.

    Se il codice non fa nulla è perchè evidentemente non l'hai associato al foglio 1.
    Una volta aperto l'editor vba, nel menù sinistro dove trovi l'elenco dei fogli, devi fare doppio click sul foglio le cui modifiche genereranno la scrittura dei dati univoci sul foglio 2. E' quello il foglio in cui dove incollare il codice che ti ho scritto.

    Per fare le cose per bene tralascia il codice che ti ho scritto prima e incolla questo:

    codice:
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(ActiveCell, Range("A:A")) Is Nothing Then
            'copio il contenuto della colonna A del foglio 1 nella colonna C del foglio 2
            Sheets(1).Range("A:A").Copy Sheets(2).Range("C1")
            'ordino le voci copiate in senso decrescente al fine di poter applicare il filtro avanzato
            Sheets(2).Range("C:C").Sort Key1:=Sheets(2).Columns("C"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
            'filtro e copio il risultato nella colonna B del foglio 2
            Sheets(2).Range("C1", Sheets(2).Range("C65536").End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets(2).Range("B1"), Unique:=True
            'cancello tutto dalla colonna C
            Sheets(2).Range("C:C").Clear
        End If
    End Sub
    L'unica differenza rispetto al precedente è che la macro verrà eseguita solo quando apporterai modifiche nel foglio 1 nella colonna A, evitando quindi inutili elaborazioni quando le modifiche riguardano altre porzioni del foglio.

  6. #6
    scusami nicola75ss sarà che sono impedito ma...sembra che funzioni grazie tantissimo per il tuo aiuto...
    chi si ferma è perduto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.