Este script fará o mesmo (mais um pouco mais).
Código
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;
}
Explicado
No início do script, há um pequeno tratamento de erros. Depois disso, ele encontrará a primeira entrada mais baixa em comparação com o valor de entrada. Uma vez encontrado, ele faz algumas contas e apresenta o resultado.
Nota
Se o valor selecionado for igual a 20, o script retornará 150 como onde a fórmula produz #DIV/0
.
Captura de tela
Fórmula
Use a seguinte fórmula para levar em consideração todos os valores
=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))
Exemplo
Adicione o script em Ferramentas> Editor de scripts e pressione o botão Salvar (não é necessária autenticação).
Criei um arquivo de exemplo para você: como interpolar dados em um intervalo no Planilhas Google
Eu encontrei uma maneira de fazer isso - pode haver uma maneira melhor, mas é isso que eu criei:
Supondo que os dados estejam em A1: B10 e $ C $ 1 contém a chave a ser procurada:
Em detalhe:
PREVISÃO faz uma interpolação linear, mas assume uma linha reta. Portanto, precisamos encontrar os dois valores que incluem o valor que estamos procurando.
Então, usamos MATCH para encontrar o primeiro número igual ou superior ao que estamos procurando.
PREVISÃO espera um intervalo de dados, portanto usamos OFFSET para criar uma referência a um intervalo de dados. MATCH é um indexado, então precisamos subtrair um primeiro. Criamos um intervalo de uma largura e duas de altura. Esse valor é garantido para incluir $ C $ 1, nosso valor de pesquisa.
fonte
x=20
resultará em#DIV/0
.Essa é uma pequena modificação do script de Jacob Jan Tuinstra , permitindo que ele use uma matriz ou um valor como terceiro argumento, para que a função interpolada possa ser calculada em vários locais ao mesmo tempo. A única diferença são algumas linhas adicionadas no início; Essa é uma maneira rápida de transformar praticamente qualquer função personalizada em uma função personalizada que aceite uma matriz.
fonte