estrazione riferimentoindirizzo e dati
Hai un problema con Excel? 
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)
**************
Vuoi Approfondire?