La formula di Excel non funziona con i riferimenti di colonna


0

Ciao,

Ho 7 risultati delle partite di calcio:

             B   D           

             Team A       
2001        0   - 12      
2002        1   - 5        
2003        1   - 11        
2004        4   - 1         
2005        1   - 6  
2006        0   - 5
2007        1   - 2

e questa formula che mi dà il miglior punteggio di calcio

=INDEX(B2:B8,SUMPRODUCT((B2:B8-D2:D8*1.01=MAX(B2:B8-D2:D8*1.01))*ROW(B2:B8))-ROW(B1))&" - "&INDEX(D2:D8,SUMPRODUCT((B2:B8-D2:D8*1.01=MAX(B2:B8-D2:D8*1.01))*ROW(B2:B8))-ROW(B1))

Funziona perfettamente finora poiché il valore risultante è 1-2. Tuttavia, poiché aggiungerò punteggi inferiori a B8, devo modificare questa formula in modo che faccia sempre riferimento all'ultima cella con i dati. Quindi ho provato questo:

=INDEX(B:B,SUMPRODUCT((B:B-D:D*1.01=MAX(B:B-D:D*1.01))*ROW(B:B))-ROW(B1))&" - "&INDEX(D:D,SUMPRODUCT((B:B-D:D*1.01=MAX(B:B-D:D*1.01))*ROW(B:B))-ROW(B1))

ma non ha funzionato. Come posso risolvere questo problema?

Grazie.


Questa risposta potrebbe essere utile superuser.com/a/982611/457808 .
Kyle,

Grazie per il link, ma temo di non averlo capito affatto. È tutto greco per me. Per quanto ho potuto capire, è quasi impossibile quello che sto cercando di ottenere?
Caino Nuke,

Siamo spiacenti, ma senza ulteriori informazioni su ciò che stai cercando di ottenere non posso davvero aiutarti. Il tuo obiettivo dichiarato sembra incredibilmente semplice, ma la tua formula è piuttosto complessa. Supponendo che nessuna delle risposte di seguito ti aiuti, se hai modificato il tuo post in modo da includere un campione di input e output attesi che sarebbe utile.
Kyle,

Ho dettagliato la mia domanda un po 'di più.
Caino Nuke,

Risposte:


0

Prendendo in prestito liberamente dalla risposta che ho collegato nei commenti ... Apri il gestore dei nomi (ctrl + F3) e definisci due nomi. Definisci range1come:

=Sheet1!$B$2:INDEX(Sheet1!$B:$B,MATCH(9.9E+307,Sheet1!$B:$B,1))

e range2come

=Sheet1!$D$2:INDEX(Sheet1!$D:$D,MATCH(9.9E+307,Sheet1!$D:$D,1))

Quindi puoi utilizzare la tua formula originale, con gli intervalli sostituiti con gli intervalli denominati che hai appena creato:

=INDEX(range1,SUMPRODUCT((range1-range2*1.01=MAX(range1-range2*1.01))*ROW(range1))-ROW(B1))&" - "&INDEX(range2,SUMPRODUCT((range1-range2*1.01=MAX(range1-range2*1.01))*ROW(range1))-ROW(B1))

Formula bonus:

=INDEX(range1,MATCH(MAX(range1-range2),range1-range2,0))&" - "&INDEX(range2,MATCH(MAX(range1-range2),range1-range2,0))

Si noti che questa è una formula di matrice e deve essere confermata con ctrl + Maiusc + Invio.


Ottima soluzione, grazie. Voglio solo chiederti cosa significa 9.9E + 307?
Caino Nuke,

@CainNuke È 9,9 * 10 ^ 307. Credo che sia il numero più grande che Excel può rappresentare tramite notazione scientifica. Viene utilizzato nella MATCH()funzione per trovare qualsiasi numero, poiché i tuoi punteggi di calcio probabilmente non raggiungeranno mai così in alto.
Kyle,

0

Sembra che funzioni

=INDEX(B:B, SUMPRODUCT((B:B-D:D*1.01=MAX(B:B-D:D*1.01))*ROW(B:B)))&"-"&INDEX(D:D, SUMPRODUCT((B:B-D:D*1.01=MAX(B:B-D:D*1.01))*ROW(B:B)))

Se è necessario escludere la prima cella, questa risposta indica che il modo migliore è specificare manualmente i numeri di cella (ad es. B2:B1048576)


Fare riferimento a intere colonne in SUMPRODUCT è un'idea disastrosa. Quella formula è stata costretta a calcolare più di 10 MILIONI di celle, un numero assolutamente sorprendente per una singola formula.
XOR LX,

Oh, capisco. Siamo spiacenti, non ho molta familiarità con Excel, ho pensato che avrebbe appena ottimizzato le celle vuote prima che avvenga qualsiasi calcolo.
Marie,

Sfortunatamente no. COUNTIF (S) / SUMIF (S) lo fanno, anche se per qualsiasi motivo le altre funzioni di elaborazione dell'array, ovvero SUMPRODUCT, AGGREGATE e qualsiasi costruzione che richieda CSE, non lo fanno.
XOR LX,

In altre parole, non si può fare con questa formula? Cosa succede se si specifica un numero più piccolo? Come 1000?
Caino Nuke,

Non penso che ciò significhi che non può essere fatto, solo che è molto intenso dal punto di vista computazionale, ad esempio potrebbe funzionare molto lentamente in alcune circostanze. Specificare un numero di riga più piccolo lo risolverebbe.
Marie,

0

Eri consapevole che la tua formula avrebbe avuto esito negativo se ci fosse stata più di una riga nei tuoi dati che condivideva il valore massimo?

L'idea di implementare uno dei set-up per determinare l'ultima riga utilizzata nei tuoi dati come indicato nel link fornito da Kyle è ragionevole.

Tuttavia, potresti anche prendere in considerazione questa alternativa, costruzione più corta, che funzionerà anche se alcune delle celle a cui viene fatto riferimento sono vuote, sebbene con l'avvertenza che nessuno dei risultati della parte:

B2:B100-D2:D100*1.01

sono negativi.

=LOOKUP(1,0/FREQUENCY(0,1/(1+((B2:B100-D2:D100*1.01)))),B2:B100&" - "&D2:D100)

Ovviamente puoi modificare la riga superiore a cui fai riferimento qui, ma assicurati di non renderla troppo grande arbitrariamente. Tali costruzioni (così come SUMPRODUCT, AGGREGATEe qualsiasi impostazione richiesta CSE) calcolano su tutte le celle passate a loro, tecnicamente oltre le ultime celle utilizzate in quegli intervalli o meno.

Saluti


Ho provato la tua formula ma tutto quello che ottengo è un trattino con spazi vuoti. Potresti parlarmi della sua costruzione, per favore?
Caino Nuke,

Cosa c'era nelle gamme B2: B100 e D2: D100 durante il test?
XOR LX,

La tabella che ho pubblicato sopra sotto la mia domanda.
Caino Nuke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.