| | Post: 22 | Registrato il: 27/01/2003
| Città: CAGLIARI | Età: 40 | Utente Junior | 2010 | | OFFLINE |
|
12/06/2013 21:21 | |
Cerca verticale dal basso verso l'alto Ciao a tutti!
Avrei bisogno di una specie di cerca verticale che cerchi all'interno di un tabella ma dal basso verso l'alto, in modo che riesca ad ottenere l'ultimo inserimente di un certo valore.
esempio:
13 Pippo 17
10 mario 12
2 gino 15
10 mario 15
facendo cerca verticale in questa tabella cercando il valore 10 e colonna 2, otterrei 12, a me serve 15
ho anche trovato delle righe di codice che dovrebbero fare al caso mio, ma non capisco perche funzionino solo in certi casi..
Metto il codice in spoiler, comunque questo crea una funzione "reverselookup" che sarebbe perfetta se non fosse che funziona solo in certe condizioni...
Testo nascosto - clicca qui Function NLookup(Dove As Range, Valore As Variant, Occorrenza As Long, riga As Long, colonna As Long) As Variant
Dim Contatore As Integer
Dim CellaRicerca As Range
Dim First As Range
Dim CCorrente As Range
Dim Trovato As Boolean
Contatore = 0
Trovato = False
For Each CCorrente In Dove
If CCorrente.Value = Valore Then
Contatore = Contatore + 1
End If
If Contatore = Occorrenza Then
Trovato = True
Exit For
End If
Next
If Trovato Then
NLookup = CCorrente.Offset(riga, colonna).Value
Else
NLookup = CVErr(xlErrNA)
End If
End Function
Function ReverseLookup(Dove As Range, Valore As Variant, colonna As Long) As Variant
Dim CellaRicerca As Range
Dim Indice As Long
Dim CCorrente As Range
Dim Trovato As Boolean
Dim CCH As Integer
Dim CCW As Integer
Contatore = 0
Trovato = False
CCH = Dove.Columns(Dove.Columns.Count).Column - Dove.Column + 1
CCW = Dove.Rows(Dove.Rows.Count).Row - Dove.Row + 1
If colonna > CCH Then
ReverseLookup = CVErr(xlErrNA)
Else
Indice = Dove.Rows(Dove.Rows.Count).Row
While Indice > Dove.Row And Not Trovato
If Cells(Indice, Dove.Column).Value = Valore Then
Trovato = True
End If
Indice = Indice - 1
Wend
End If
If Trovato Then
ReverseLookup = Cells(Indice + 1, Dove.Column + colonna - 1).Value
Else
ReverseLookup = CVErr(xlErrNA)
End If
End Function
[Modificato da pitti 12/06/2013 21:23] |
|
| | Post: 1.116 | Registrato il: 27/09/2010
| Città: FIRENZE | Età: 61 | Utente Veteran | Excel 2010 | | OFFLINE | |
|
12/06/2013 21:28 | |
Ciao
=CERCA(7;1/(A1:A10=10);C1:C10)
Edit: controlla se va bene
Saluti [Modificato da (Canapone) 12/06/2013 21:34]
|
| | Post: 22 | Registrato il: 27/01/2003
| Città: CAGLIARI | Età: 40 | Utente Junior | 2010 | | OFFLINE |
|
12/06/2013 21:35 | |
(Canapone), 12/06/2013 21:28:
Ciao
=CERCA(7;1/(A1:A10=10);C1:C10)
Edit: controlla se va bene
Saluti
mi puoi spiegare come funziona?
perche la dovrei applicare ad una tabellla enorme... |
| | Post: 1.118 | Registrato il: 27/09/2010
| Città: FIRENZE | Età: 61 | Utente Veteran | Excel 2010 | | OFFLINE | |
|
12/06/2013 21:50 | |
Ciao,
basta che modifichi i 10 con 50.000.
Nella colonna A cerchi i 10, nella colonna C (o dove vuoi) i risultati accanto all'ultimo 10 della colonna A.
La formula sfrutta delle proprietà di CERCA.
Puoi sostituire il 7 con qualsiasi numero superiore a 1.
Metti che hai bisogno di sapere cosa ci sia accanto all'ultimo 10 della colonna nella colonna Y
=CERCA(2;1/(A:A=10);Y:Y)
E' - lasciamelo dire- una bellissima formula, che puoi usare anche su intervalli estesi : mettitela da parte.
Saluti [Modificato da (Canapone) 12/06/2013 21:52]
|
| | Post: 23 | Registrato il: 27/01/2003
| Città: CAGLIARI | Età: 40 | Utente Junior | 2010 | | OFFLINE |
|
13/06/2013 01:38 | |
Ti ringrazio, formula potentissima |
| | Post: 1.549 | Registrato il: 28/06/2011
| Città: AGORDO | Età: 70 | Utente Veteran | 2013 | | OFFLINE | |
|
13/06/2013 03:02 | |
Troppo forte, meno male che esisti. Excel 2013 |
| | Post: 11 | Registrato il: 18/04/2014
| Città: TREVISO | Età: 33 | Utente Junior | 2007 | | OFFLINE |
|
10/09/2015 16:18 | |
Riesumo questa vecchia discussione per chiedervi:
Se invece di avere due elementi da cercare, in questo caso i "10", ne avessi 15 e volessi sapere quale valore corrisponde al quinto "10" della colonna "A". C'è un modo? |
| | Post: 156 | Registrato il: 21/04/2015
| Città: LOIRI PORTO SAN PAOLO | Età: 41 | Utente Junior | 2010 | | OFFLINE | |
|
10/09/2015 17:18 | |
Sempre considerando colonne "A" e "C", dove cercando la quinta ricorrenza di un valore nella colonna "A" vogliamo ottenere il corrispondente valore nella colonna "C" possiamo usare questa
=INDIRETTO(INDIRIZZO(PICCOLO(SE(A1:A20=10;RIF.RIGA(A1:A20);"");5);3;1;1))
é Matriciale, quindi da confermare con "CTRL+MAIUSC+INVIO"
Non é elegantissima ma funziona. Windows 7 - Office 2010 |
| | Post: 12 | Registrato il: 18/04/2014
| Città: TREVISO | Età: 33 | Utente Junior | 2007 | | OFFLINE |
|
10/09/2015 17:39 | |
Provo ad allegare un file di esempio.
Vorrei che nel Foglio 2, nelle celle B3 B4 B5, F3 F4 F5, ecc... ci siano scritte le lettere che ho segnalato io in quelle caselle. Non so se è fattibile la cosa! Grazie intanto! |
| | Post: 157 | Registrato il: 21/04/2015
| Città: LOIRI PORTO SAN PAOLO | Età: 41 | Utente Junior | 2010 | | OFFLINE | |
|
10/09/2015 17:52 | |
Dovrebbe venire cosi...
Windows 7 - Office 2010 |
| | Post: 1.880 | Registrato il: 27/09/2010
| Città: FIRENZE | Età: 61 | Utente Veteran | Excel 2010 | | OFFLINE | |
|
10/09/2015 18:13 | |
indice piccolo non matriciale
Ciao a tutti,
riformulo l'idea di guybruhs82 (ciao!)
Se mi confermi che usi Excel 2007, in B3 da copiare in basso e poi in F3...
=SE.ERRORE(INDICE('Foglio 1'!$C$2:$C$27;PICCOLO(INDICE(('Foglio 1'!$B$2:$B$27=B$1)*RIF.RIGA($2:$27)-1;);CONTA.SE('Foglio 1'!$B$2:$B$27;"<>"&B$1)+RIGHE($A$1:$A1)));"")
Non è matriciale: basta copiarla.
Saluti [Modificato da (Canapone) 10/09/2015 18:14]
|
| | Post: 160 | Registrato il: 21/04/2015
| Città: LOIRI PORTO SAN PAOLO | Età: 41 | Utente Junior | 2010 | | OFFLINE | |
|
10/09/2015 18:51 | |
Re: indice piccolo non matriciale Ciao a te canapone!!!!
Bella la tua versione. Funziona perfettamente e non é matriciale quindi più facile da adattare o traslare. Windows 7 - Office 2010 |
| | Post: 1.881 | Registrato il: 27/09/2010
| Città: FIRENZE | Età: 61 | Utente Veteran | Excel 2010 | | OFFLINE | |
|
10/09/2015 19:17 | |
Ciao,
ho ripreso solo la tua idea: la formula fa esattamente lo stesso lavoro.
L'unica cosa particolare è l'uso del CONTA.SE.
questa è la tua formula senza control+maiusc+invio
=INDIRETTO(INDIRIZZO(PICCOLO(INDICE(('Foglio 1'!$B$2:$B$27=B$1)*RIF.RIGA($A$2:$A$27););CONTA.SE('Foglio 1'!$B$2:$B$27;"<>"&B$1)+RIGHE($1:1));3;1;1;"Foglio 1"))
Saluti [Modificato da (Canapone) 10/09/2015 19:19]
|
| | Post: 13 | Registrato il: 18/04/2014
| Città: TREVISO | Età: 33 | Utente Junior | 2007 | | OFFLINE |
|
11/09/2015 17:21 | |
Perfetto ragazzi!! Sono riuscito ad adattare la formula al mio foglio ora funziona tutto benissimo!!! All'inizio mi dava un errore di riferimento circolare ma che ho risolto!! Ora va bene! Oddio, è un po' lentino a fare certe operazioni ma le fa!! Grazie mille a tutti per le soluzioni!! |
| | Post: 0 | Registrato il: 15/06/2018
| Età: 39 | Utente Junior | 2017 | | OFFLINE | |
|
15/06/2018 17:16 | |
ciao a tutti e complimenti.
comme faccio a trovare i relativi valori di martedi e non di lunedi?
grazie |
| | Post: 1.628 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
15/06/2018 18:29 | |
ciao
non ci si accoda ad altre discussioni
rischi di non essere visto.
vuoi estrarre tutti i valori di martedì
in base a cosa?
giorno
nome
codice
dovresti specificarlo
|
| | Post: 1 | Registrato il: 15/06/2018
| Età: 39 | Utente Junior | 2017 | | OFFLINE | |
|
15/06/2018 19:06 | |
della colonna D.
è un file al quale vanno aggiunti i dati in modo verticale e devo sempre trovare il precedente valore in questo caso il martedi. grazie |
| | Post: 199 | Registrato il: 15/01/2016
| Città: ROMA | Età: 51 | Utente Junior | 2016 | | OFFLINE |
|
15/06/2018 21:10 | |
Buonasera
non sapendo dove vuoi i risultati li ho messi a partire da G1 quindi
in G1 da trascinare a destra fino a J1 e poi in basso
=SE.ERRORE(INDICE($A$1:$D$1000;AGGREGA(15;6;RIF.RIGA($A$1:$A$1000)/($A$1:$A$1000=INDICE($A$1:$A$1000;CONFRONTA(CERCA(2;1/($A$1:$A$1000<>"");$A$1:$A$1000);$A$1:$A$1000;0)-1));RIF.RIGA($A1));RIF.COLONNA(A$1));"")
attenzione che nel file allegato i lunedi di riga 1 e 2 i martedi di riga 22 e 23 e i mercoledi di riga 43 e 44 sono scritti male cioè non hanno la i accentata |
| | Post: 2 | Registrato il: 15/06/2018
| Età: 39 | Utente Junior | 2017 | | OFFLINE | |
|
19/06/2018 15:36 | |
grazie ma non risco a risolvere. allego un altro file di esempio: devo completare le celle verdi delle colonne K e L con il valore che c'è subito sopra. La Pratica si ripete più volte e devo verificare qual'era l'ultimo Stato e Nota. ogni giorno incollo le pratiche, verifico lo Stato e la Nota, li aggiorno manualmente se è il caso. e così via.... |
| | Post: 200 | Registrato il: 15/01/2016
| Città: ROMA | Età: 51 | Utente Junior | 2016 | | OFFLINE |
|
19/06/2018 16:04 | |
Buonasera
Subito sopra dove???
Metti a mano i risultati da ottenere
Quale è il criterio per estrarre i dati??? |
| | Post: 188 | Registrato il: 11/07/2015
| Età: 33 | Utente Junior | office 2013-2016 | | OFFLINE | |
|
19/06/2018 16:10 | |
Buon giorno
k64=SE.ERRORE(CERCA(2;1/($A$2:$A$63=$A64);K$2:K$63);"")
copia in basso e destra
Saluti
|
| | Post: 3 | Registrato il: 15/06/2018
| Età: 39 | Utente Junior | 2017 | | OFFLINE | |
|
19/06/2018 17:23 | |
grazie 1000000 funziona alla grande |
| | Post: 16 | Registrato il: 13/10/2013
| Città: BUSSETO | Età: 54 | Utente Junior | 365 | | OFFLINE | |
|
14/09/2018 09:39 | |
buongiorno, scusate se riapro questa discussione. La formula riportata all'inizio ossia
CERCA(7;1/(A1:A10=10);C1:C10)
è proprio quella che mi serve e funziona benissimo per ciò che stavo cercando. Scusate l'ignoranza ma avrei una domanda, per capirla a fondo.
Qual è lo scopo della frazione? ossia dell'1/(A1:A10=10).
che cosa permette di fare 1 diviso l'intervallo?
grazie mille e scusate ancora
m. 2010 |
| | Post: 2.307 | Registrato il: 27/09/2010
| Città: FIRENZE | Età: 61 | Utente Veteran | Excel 2010 | | OFFLINE | |
|
14/09/2018 10:14 | |
Ciao
ti rispondo subito: la funzione CERCA ignora gli errori.
Nella formula
=CERCA(7;1/(A1:A10=10);C1:C10)
il CERCA elabora come secondo argomento
1/(A1:A10=10)
Faccio un esempio: i 10 sono in A2 e A10
La formula elabora
=CERCA(7;1/{FALSO.VERO.FALSO.FALSO.FALSO.FALSO.FALSO.FALSO.FALSO.VERO};C1:C10)
Una serie di VERO/FALSO.
IL FALSO a denominatore viene letto come uno zero (0), i VERO come uno (1)
Quindi CERCA si troverà a dover scegliere fra una serie di risultati del tipo
1/VERO o 1/FALSO
Cioè 1 e 1/0 (= errore #DIV/0!)
{#DIV/0!.1.#DIV/0!.#DIV/0!.#DIV/0!.#DIV/0!.#DIV/0!#DIV/0!.#DIV/0!.1}
Il 7 in questa serie di risultati non può esserci, il CERCA di commestibile troverà solo degli 1.
Nell'esempio, in seconda ed ultima posizione
Il CERCA allora restituisce il valore corrispondente all'ultimo elemento inferiore al valore cercato (l'ultimo 1).
Puoi quindi sostituire al 7 (primo argomento del CERCA) qualsiasi numero naturale superiore ad 1.
In rete e nel Forum troverai altri di esempi declinati di solito
=CERCA(2;1/...blà blà blà
e spiegazioni migliori.
Saluti
[Modificato da (Canapone) 14/09/2018 10:31]
|
|
|