Ce script fera de même (plus un peu plus).
Code
function myInterpolation(x, y, value) {
if(value > Math.max.apply(Math, x) || value < Math.min.apply(Math, x)) {
throw "value can't be interpolated !!";
return;
}
var check = 0, index;
for(var i = 0, iLen = x.length; i < iLen; i++) {
if(x[i][0] == value) {
return y[i][0];
} else {
if(x[i][0] < value && ((x[i][0] - check) < (value - check))) {
check = x[i][0];
index = i;
}
}
}
var xValue, yValue, xDiff, yDiff, xInt;
yValue = y[index][0];
xDiff = x[index+1][0] - check;
yDiff = y[index+1][0] - yValue;
xInt = value - check;
return (xInt * (yDiff / xDiff)) + yValue;
}
Expliqué
Au début du script, il y a une petite gestion des erreurs. Après cela, il trouvera la première entrée la plus basse par rapport à la valeur d'entrée. Une fois trouvé, il fera quelques calculs et présentera le résultat.
Remarque
Si la valeur sélectionnée est égale à 20, le script renvoie 150 comme où la formule donne #DIV/0
.
Capture d'écran
Formule
Utilisez la formule suivante pour prendre en compte toutes les valeurs
=IF(
ISNA(
MATCH(C2,A2:A7,0)),
FORECAST(
$C$2,
OFFSET(B$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1),
OFFSET(A$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1)),
INDEX(
B2:B7,
MATCH(C2,A2:A7,0)
,0)
)
copy / paste
=IF(ISNA(MATCH(C2, A2:A7, 0)), FORECAST($C$2,OFFSET(B$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1),OFFSET(A$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1)), INDEX(B2:B7, MATCH(C2, A2:A7, 0), 0))
Exemple
Ajoutez le script sous Outils> Editeur de script et appuyez sur le bouton Enregistrer (aucune authentification requise).
J'ai créé un exemple de fichier pour vous: comment interpoler des données dans une plage dans Google Sheets
J'ai trouvé un moyen de le faire - il y a peut-être un meilleur moyen, mais voici ce que j'ai trouvé:
En supposant que les données sont en A1: B10 et $ C $ 1 contient la clé à rechercher:
En détail:
FORECAST effectue une interpolation linéaire, mais il suppose une ligne droite. Nous devons donc trouver les deux valeurs qui entourent la valeur que nous recherchons.
Nous utilisons donc MATCH pour trouver le premier nombre égal ou supérieur à ce que nous recherchons.
FORECAST attend une plage de données, nous utilisons donc OFFSET pour créer une référence à une plage de données. MATCH est un indexé, nous devons donc soustraire un premier. Nous créons une gamme qui est un large et deux haut. Cette valeur est garantie d'inclure $ C $ 1, notre valeur de recherche.
la source
x=20
se traduira par#DIV/0
.Il s'agit d'une petite modification du script de Jacob Jan Tuinstra , lui permettant de prendre un tableau ou une valeur comme troisième argument, de sorte que la fonction interpolée puisse être calculée à plusieurs endroits à la fois. La seule différence est quelques lignes ajoutées au début; c'est un moyen rapide de transformer à peu près n'importe quelle fonction personnalisée en une fonction personnalisée qui accepte un tableau.
la source