Pagina 1 di 1

Interpolazione 2D in una tabella Excel

MessaggioInviato: 17 set 2016, 11:49
da rini
Salve,

ho un problema che non so risolvere in Excel. Data una tabella, ad esempio quella nell'immagine seguente, c'è un modo in Excel per calcolare un punto interpolante in una tabella 2D?
Esempio.PNG
Esempio
Esempio.PNG (9.39 KiB) Osservato 9862 volte

Non mi vengono in mente modi semplici per calcolarlo, quindi chiedo a voi.

Ad esempio, se in quella tabella entro con due valori a=5, b=13 vorrei scrivere una funzione intelligente (più compatta possibile) per trovare il risultato.
Si, posso ricorrere a vba, ma vorrei inserire semplicemente una formula. Quindi vi chiedo se c'è un modo più intelligente di farlo.

Su come calcolare il risultato viene spiegato egregiamente in questa pagina web: http://it.wikihow.com/Applicare-un'Inte ... are-Doppia


Regole:
- Non si usa vba
- il risultato deve stare in una sola cella.

Re: Interpolazione 2D in una tabella Excel

MessaggioInviato: 17 set 2016, 12:45
da rini
Comunque la mia soluzione poco elegante ma funzionante è questa :?

Codice: Seleziona tutto
=((SE(CERCA.ORIZZ(D12;D3:H3;1;VERO)=MAX(D3:H3);MAX(D3:H3);INDICE(D3:H3;CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3)+1))-D12)/(SE(CERCA.ORIZZ(D12;D3:H3;1;VERO)=MAX(D3:H3);MAX(D3:H3);INDICE(D3:H3;CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3)+1))-CERCA.ORIZZ(D12;D3:H3;1;VERO))*INDICE(D4:H9;CONFRONTA(CERCA.VERT(C12;C4:C9;1;VERO);C4:C9);CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3))+(D12-CERCA.ORIZZ(D12;D3:H3;1;VERO))/(SE(CERCA.ORIZZ(D12;D3:H3;1;VERO)=MAX(D3:H3);MAX(D3:H3);INDICE(D3:H3;CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3)+1))-CERCA.ORIZZ(D12;D3:H3;1;VERO))*INDICE(D4:H9;CONFRONTA(CERCA.VERT(C12;C4:C9;1;VERO);C4:C9);CONFRONTA(SE(CERCA.ORIZZ(D12;D3:H3;1;VERO)=MAX(D3:H3);MAX(D3:H3);INDICE(D3:H3;CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3)+1));D3:H3)))*(SE(CERCA.VERT(C12;C4:C9;1;VERO)=MAX(C4:C9);MAX(C4:C9);INDICE(C4:C9;CONFRONTA(CERCA.VERT(C12;C4:C9;1;VERO);C4:C9)+1))-C12)/(SE(CERCA.VERT(C12;C4:C9;1;VERO)=MAX(C4:C9);MAX(C4:C9);INDICE(C4:C9;CONFRONTA(CERCA.VERT(C12;C4:C9;1;VERO);C4:C9)+1))-CERCA.VERT(C12;C4:C9;1;VERO))+((SE(CERCA.ORIZZ(D12;D3:H3;1;VERO)=MAX(D3:H3);MAX(D3:H3);INDICE(D3:H3;CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3)+1))-D12)/(SE(CERCA.ORIZZ(D12;D3:H3;1;VERO)=MAX(D3:H3);MAX(D3:H3);INDICE(D3:H3;CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3)+1))-CERCA.ORIZZ(D12;D3:H3;1;VERO))*INDICE(D4:H9;CONFRONTA(SE(CERCA.VERT(C12;C4:C9;1;VERO)=MAX(C4:C9);MAX(C4:C9);INDICE(C4:C9;CONFRONTA(CERCA.VERT(C12;C4:C9;1;VERO);C4:C9)+1));C4:C9);CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3))+(D12-CERCA.ORIZZ(D12;D3:H3;1;VERO))/(SE(CERCA.ORIZZ(D12;D3:H3;1;VERO)=MAX(D3:H3);MAX(D3:H3);INDICE(D3:H3;CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3)+1))-CERCA.ORIZZ(D12;D3:H3;1;VERO))*INDICE(D4:H9;CONFRONTA(SE(CERCA.VERT(C12;C4:C9;1;VERO)=MAX(C4:C9);MAX(C4:C9);INDICE(C4:C9;CONFRONTA(CERCA.VERT(C12;C4:C9;1;VERO);C4:C9)+1));C4:C9);CONFRONTA(SE(CERCA.ORIZZ(D12;D3:H3;1;VERO)=MAX(D3:H3);MAX(D3:H3);INDICE(D3:H3;CONFRONTA(CERCA.ORIZZ(D12;D3:H3;1;VERO);D3:H3)+1));D3:H3)))*(C12-CERCA.VERT(C12;C4:C9;1;VERO))/(SE(CERCA.VERT(C12;C4:C9;1;VERO)=MAX(C4:C9);MAX(C4:C9);INDICE(C4:C9;CONFRONTA(CERCA.VERT(C12;C4:C9;1;VERO);C4:C9)+1))-CERCA.VERT(C12;C4:C9;1;VERO))