Excel Forum Per condividere esperienze su Microsoft Excel

Traferire dati da un foglio ad altri, nella stessa cartella di lavoro; in base a diversi criteri

  • Messaggi
  • OFFLINE
    Anthony D'Acunto
    Post: 137
    Registrato il: 24/07/2013
    Città: SALERNO
    Età: 52
    Utente Junior
    Excel LTSC 2021
    00 03/11/2023 22:15
    Buonasera a tutti
    La mia esigenza è di trasferire mediante VBA dei dati da un foglio di lavoro ad altri presenti nella stessa cartella di lavoro, in base a diversi criteri.
    Non è facile da spiegare, ma cercherò di farlo con la massima chiarezza e precisione possibile, anche se ciò comporta il doversi dilungare.
    Allego anche un file in cui nel foglio 'BASE' sono elencati i dati da trasferire e, negli altri fogli, i dati come vorrei venissero trasferiti!

    Ringrazio anticipatamente chi avrà la pazienza di soffermarsi fino alla fine e darmi un riscontro.

    PREMESSA:

    Ho una cartella di lavoro - 'Cartel1' - con circa 70 di fogli di lavoro:
    il primo foglio di lavoro è denominato: 'BASE' (con i dati da trasferire)
    i restanti fogli di lavoro - tutti vuoti - sono denominati con nome di persona:
    'Antonio'
    'Francesca'
    'Giuseppe'
    'Paolo'
    ecc.

    Il Foglio 'BASE' consta di più di cinquemila righe (che, per chiarezza espositiva, sono state ridotte a 25 nel file di esempio in allegato) e ha una serie di dati in colonna.
    Precisamente: in
    colonna 'B' i nomi dei clienti (ognuno con un foglio di lavoro parimenti denominato)
    colonna 'C' la categoria di appartenenza del prodotto
    colonna 'D' la marca del prodotto
    colonna 'E' il modello del prodotto
    colonna 'F' la tipologia del documento (TRE tipologie: 'FA', 'F', 'DDT')
    colonna 'G' il numero del documento
    colonna 'H' la data del documento

    I restanti fogli di lavoro sono VUOTI!

    ESIGENZA:

    Trasferire SELETTIVAMENTE i dati presenti nel foglio 'BASE' negli altri fogli di lavoro a seconda del nome del cliente presente in colonna 'B'...

    (ES. n°1: Tutti i dati nel foglio 'BASE', relativi al nome 'Antonio' - presente in colonna 'B' - vengono trasferiti nel foglio di lavoro denominato 'Antonio'
    Tutti i dati nel foglio 'BASE', relativi al nome 'Paolo' - presente in colonna 'B' - vengono trasferiti nel foglio di lavoro denominato 'Paolo')

    ...e a seconda di una delle tre sigle presenti in colonna 'F' e cioè : "FA" - "F" - "DDT" che ho colorato nel file di esempio con diverse tonalità solo per rendere più immediate le distinzioni.

    (ES. n°2A: Tutti i dati, nel Foglio! 'BASE' e nell'intervallo 'B5:H5000'
    - in cui 'B:B' ="Antonio" e 'F:F'="FA" -
    vanno copiati e incollati (incolla valori) nel Foglio! 'Antonio' - intervallo 'B5:H5000')

    (ES. n°2B: Tutti i dati, nel Foglio! 'BASE', nell'intervallo 'B5:F5000' (in questo caso è 'F' l'ultima colonna)
    - in cui 'B:B' ="Antonio" e 'F:F'="DDT" -
    vanno copiati e incollati (incolla valori) nel Foglio! 'Antonio' - intervallo 'K5:O5000')

    (ES. n°2C: Tutti i dati, nel Foglio! 'BASE', nell'intervallo 'B5:H5000'
    - in cui 'B:B' ="Antonio" e 'F:F'="F" -
    NON vanno presi in considerazione!!!)

    Grazie
    [Modificato da Anthony D'Acunto 04/11/2023 04:57]
    Windows 10 - Excel LTSC
  • OFFLINE
    federico460
    Post: 3.122
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Master
    365
    20 04/11/2023 00:20
    Ciao
    con le formule

    in C1
    =STRINGA.ESTRAI(CELLA("nomefile");TROVA("]";CELLA("nomefile");1)+1;30)

    in D1
    FA
    In B5 da tirare a destra fino alla colonna H e in basso
    =SE.ERRORE(INDICE(BASE!B$5:B$6000;AGGREGA(15;6;RIF.RIGA($1:$6000)/(BASE!$B$5:$B$6000=$C$1)/(BASE!$F$5:$F$6000=$D$1);RIF.RIGA($A1)));"")

    per le altre sigle adegua la cella in rosso
  • OFFLINE
    Anthony D'Acunto
    Post: 137
    Registrato il: 24/07/2013
    Città: SALERNO
    Età: 52
    Utente Junior
    Excel LTSC 2021
    00 04/11/2023 06:53
    Re:
    RISOLTO!!!!

    federico460, grazie per il tuo tempo ed impegno volti ad una soluzione ECCELLENTE!

    Infatti, non solo la tua soluzione riproduce esattamente i risultati da me desiderati ma - di più - permette di ridurre i Fogli di lavoro da 70 a 2:
    Il foglio 'BASE' e il Foglio 'Cliente' (Generico), nel quale mi basta inserire manualmente in 'C1' il nome del cliente - in base alla mia esigenza del momento - per visualizzare immediatamente tutti i suoi dati in base alle selezioni predefinite.

    Grazie mille per avermi aiutato a ridurre al minimo possibile il tempo da dedicare a questa operazione del mio lavoro
    Un abbraccio


    federico460, 04/11/2023 00:20:

    Ciao
    con le formule

    in C1
    =STRINGA.ESTRAI(CELLA("nomefile");TROVA("]";CELLA("nomefile");1)+1;30)

    in D1
    FA
    In B5 da tirare a destra fino alla colonna H e in basso
    =SE.ERRORE(INDICE(BASE!B$5:B$6000;AGGREGA(15;6;RIF.RIGA($1:$6000)/(BASE!$B$5:$B$6000=$C$1)/(BASE!$F$5:$F$6000=$D$1);RIF.RIGA($A1)));"")

    per le altre sigle adegua la cella in rosso




    Windows 10 - Excel LTSC
  • 15MediaObject5,005315MediaObject5,0023 2