estrazione riferimentoindirizzo e dati



  • estrazione riferimento/indirizzo e dati
    di MAV57 data: 25/09/2015 18:16:07

    Buona sera a tutte/i!

    Ho cercato, senza esito, una possibile soluzione al problema che dettaglio qui di seguito.

    Da foglio contenente nelle prime 2 righe rispettivamente una data (ordinata cronologicamente) e un nominativo ovvero data e agente, nonché sotto ciascuna colonna (data/agente) ho dei valori numerici (per ora) in numero variabile.

    Devo trovare in un foglio, selezionando l'agente:
    - il riferimento a ciascuna cella contenente il nominativo (in formato $A$1);
    - le date corrispondenti;
    - il numero di elementi corrispondenti.

    Per semplificare e chiarire, allego qui un file d'esempio che sicuramente sarà più utile;
    il file contiene 2 fogli:
    - test (contenente i dati da cui estrarre gli elementi richiesti);
    - risultato atteso (contenente l'idea del tipo di risultato atteso).


    Grazie!
    Buona serata, BUON TUTTO!
    ***
    Marcello (MAV57)
    **************



  • di ninai data: 25/09/2015 19:34:59

    ciao
    uno dei modi:
    in D6:
    =INDIRIZZO(2;AGGREGA(15;6;RIF.COLONNA('test (excel 2013 - 2010)'!$B$2:$S$2)/('test (excel 2013 - 2010)'!$B$2:$S$2=$C$5);RIGHE('risultato atteso'!$D$6:D6));4;1)

    in E6:
    =INDICE('test (excel 2013 - 2010)'!$B$1:$S$1;AGGREGA(15;6;RIF.COLONNA('test (excel 2013 - 2010)'!$B$2:$S$2)-1/('test (excel 2013 - 2010)'!$B$2:$S$2=$C$5);RIGHE('risultato atteso'!$D$6:D6)))

    in F6:
    =MATR.SOMMA.PRODOTTO(('test (excel 2013 - 2010)'!$B$3:$S$118<>"")*('test (excel 2013 - 2010)'!$B$2:$S$2=$C$5)*('test (excel 2013 - 2010)'!$B$1:$S$1=$E6))

    e trascini in basso

    funzionano con excel 2010 e andrebbero completate con un SE.ERRORE(formula;"")


    edit
    ho appena letto lo scopo che tu riporti nel file, non l'ho capito ma sospetto che si potrebbe fare diversamente



  • di MAV57 data: 26/09/2015 10:04:50

    Grazie!
    Tutto ok!! Risolto!

    Buona giornata, BUON TUTTO!
    ***
    Marcello (MAV57)
    **************



  • di alfrimpa data: 26/09/2015 18:40:21

    Ciao a tutti.

    Poiché l'avevo in "work in progress" il quesito posto da Marcello posto anche la mia soluzione (naturalmente in VBA) che ho utilizzato nel file allegato MAV57.

    Ho solo fatto una piccolissima modifica sul primo foglio dove in riga 3 ho inserito il conteggio dei valori delle singole colonne (riga poi nascosta).

    Alfredo 
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim miorange As Range
    Dim cella As Range
    Dim cont As Integer
    cont = 6
    Set miorange = Worksheets("testexcel2013_2010").Range("b2:s2")
    If Not Intersect(Target, Range("c5")) Is Nothing Then
        For Each cella In miorange
            If cella.Value = Range("c5").Value Then
                Range("d" & cont).Value = cella.Address(0, 0)
                Range("e" & cont).Value = cella.Offset(-1, 0).Value
                Range("f" & cont).Value = cella.Offset(1, 0).Value
            cont = cont + 1
            End If
        Next cella
    End If
    End Sub
    






  • di MAV57 data: 30/09/2015 12:34:23

    Buona giornata a tutte/i!

    Alfredo innanzitutto grazie e scusami del ritardo!! Leggo solo ora la tua risposta...
    Ho provato subito anche la soluzione proposta da te. Tutto ok!

    Correggimi se sbaglio: è un ciclo - preceduto dalla verifica della esistenza del valore in c5 - che estrae rispettivamente l'indirizzo della cella, la data e il numero degli elementi. Giusto?!
    A tal punto senza abusare troppo della tua cortesia, ti chiedo:
    - come posso ripulire l'area di estrazione dati ad ogni nuova ricerca? Facendo delle prove, resta il risultato della ricerca precedente (ad esempio se cerco i dati di PIPPO e poi quelli di PLUTO, rispettivamente 4 e 3 occorrenze, restano nell'ultima riga i valori della prima ricerca invece di celle vuote).
    - possiamo determinare il conteggio del numero dei dati (in riga 3) usando CONTA.VALORI() o altro per determinare dinamicamente il numero di celle contenenti dati? Nel senso che attualmente il range 4:1000 è più che sufficiente ma in caso di eventuali ulteriori sviluppi (o diversi usi) potrebbe non esserlo più. Avrei pensato di usare un modo per determinare l'ultima riga usata in ogni colonna.

    Grazie!
    Buona giornata, BUON TUTTO!
    ***
    Marcello (MAV57)
    **************



  • di alfrimpa data: 30/09/2015 14:13:31

    Ciao Marcello

    Cit. "Correggimi se sbaglio: è un ciclo - preceduto dalla verifica della esistenza del valore in c5 - che estrae rispettivamente l'indirizzo della cella, la data e il numero degli elementi. Giusto?!"

    Si esatto è così.

    Ti riallego il file (MAV57_a.xlsm) con le modifiche da te richieste.

    Sul primo foglio in riga 3 o cambiato la formula CONTA.VALORI (era la strada più semplice) scrivendo

    =CONTA.VALORI(B4:B100000)

    Se 100.000 non fosse sufficiente puoi variarlo tu stesso.

    Per la cancellazione dei dati sul foglio "Risultato atteso" ho variato il codice come puoi vedere sotto.

    Fai delle prove e fai sapere.

    Alfredo  
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim miorange As Range
    Dim cella As Range
    Dim cont As Integer
    cont = 6
    Set miorange = Worksheets("testexcel2013_2010").Range("b2:s2")
    If Not Intersect(Target, Range("c5")) Is Nothing Then
    Application.EnableEvents = False
    Range("d6:f1000").ClearContents   <=== Eventualmente modifica il range
    Application.EnableEvents = True
        For Each cella In miorange
            If cella.Value = Range("c5").Value Then
                Range("d" & cont).Value = cella.Address(0, 0)
                Range("e" & cont).Value = cella.Offset(-1, 0).Value
                Range("f" & cont).Value = cella.Offset(1, 0).Value
            cont = cont + 1
            End If
        Next cella
    End If
    End Sub






  • di MAV57 data: 30/09/2015 22:42:20

    Buona serata a tutte/i!

    Alfredo grazie ancora...
    Ho provato subito anche la nuova soluzione. Tutto ok! Perfetto così!

    Ho studiato il codice e le variazioni.... ne farò tesoro.

    Grazie!
    Buona serata, BUON TUTTO!
    ***
    Marcello (MAV57)
    **************