› Excel e gli applicativi Microsoft Office › Interpolazione lineare dati da tabella con 2 dati in ingresso
Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
-
AutoreArticoli
-
Ciao a tutti!vorrei sottoporvo una questione excelifera... 🙂Vorrei effettuare una interpolazioni dati da una tabella entrando con due dati di input.In particolare, ho una tabella di X righe ed Y colonne.La tabella raggruppa, per alcune coppie di parametri L e M, i valori di un terzo parametri F.Io vorrei effettuare una interpolazione dati da tabella ovvero, entrando con valori di L e M a piacere (e intermedi) rispetto a quelli tabellati calcolare in maniera automatica il valore di F corrispondente.in particolare nel mio caso avrei...Colonna A1:A7 parametri di riferimento per L,Riga B2:F2 parametri di riferimento per M,Celle B3:F7, valori di F tabellati e corrispondenti alle coppie A-B di valori di riferimentoCella I3 valore di ingresso in tabella per L a piacereCella I4 valore di ingresso in tabella per M a piacereCella I5 valore di F calcolato mediante interpolazione dati da tabella in funzione di L e M definiti a piacere.Qualcuno saprebbe indirizzarmi? Spero di essere stato abbastanza chiaro nell'esposizione! 😛Grazie in anticipo
Allegati:
You must be logged in to view attached files.Ciaoil problema si divide in due partila prima analitico matematica in cui definire cosa intendi per interpolazione lineare e come effettuarla (matematicamente intendo)il secondo problema è come applicare la teoria di cui al punto precedente in ExcelCi lavoro un attimo e ti faccio sapereCiao Prova con le due function qui sotto riportateLa seconda viene richiamata dalla prima.RegLin2Var devi poi richiamarla nel foglioElenco X sono i valori della prima variabile in orizzontale (nel tuo caso i numeri verdi o B2F2)Elenco Y sono i valori della prima variabile in Verticale (nel tuo caso i numeri blu o A3:A7)X e Y note sono i valori in I3 e I4 (da selezionare coerentemente con le definizione di X e Y per gli elenchi.Metodo è vero o falso manon dovrebbe cambiare nullaFammi sapere Ciao LucaOption Explicit Public Function RegLin2Var(ElencoX As Range, ElencoY As Range, XNota, YNota, Optional Metodo As Boolean) Dim Xmin As Range Dim Xmax As Range Dim Ymin As Range Dim Ymax As Range Dim CellaW As Range Dim ValXmaxYmax As Range Dim ValXminYmax As Range Dim ValXmaxYmin As Range Dim ValXminYmin As Range Dim RegLinXmin Dim RegLinXmax Dim RegLinYmin Dim RegLinYmax Dim RegLinXY1 Dim RegLinXY2 Set Xmin = ElencoX.Cells(1.1) Set Xmax = ElencoX.Cells(1.1) Set Ymin = ElencoY.Cells(1.1) Set Ymax = ElencoY.Cells(1.1) For Each CellaW In ElencoX If CellaW < Xmin Then Set Xmin = CellaW End If If CellaW > Xmax Then Set Xmax = CellaW End If Next For Each CellaW In ElencoY If CellaW < Ymin Then Set Ymin = CellaW End If If CellaW > Ymax Then Set Ymax = CellaW End If Next For Each CellaW In ElencoX If CellaW < = XNota Then If CellaW > Ymin Then Set Xmin = CellaW End If End If If CellaW >= XNota Then If CellaW < Xmax Then Set Xmax = CellaW End If End If Next For Each CellaW In ElencoY If CellaW <= YNota Then If CellaW > Ymin Then Set Ymin = CellaW End If End If If CellaW >= YNota Then If CellaW < Ymax Then Set Ymax = CellaW End If End If Next Set ValXmaxYmax = Intersect(Xmax.EntireColumn, Ymax.EntireRow) Set ValXminYmax = Intersect(Xmin.EntireColumn, Ymax.EntireRow) Set ValXmaxYmin = Intersect(Xmax.EntireColumn, Ymin.EntireRow) Set ValXminYmin = Intersect(Xmin.EntireColumn, Ymin.EntireRow) RegLinXmin = RegLin(Ymin, ValXminYmin, Ymax, ValXminYmax, YNota) RegLinXmax = RegLin(Ymin, ValXmaxYmin, Ymax, ValXmaxYmax, YNota) RegLinYmin = RegLin(Xmin, ValXminYmin, Xmax, ValXmaxYmin, XNota) RegLinYmax = RegLin(Xmin, ValXminYmax, Xmax, ValXmaxYmax, XNota) RegLinXY1 = RegLin(Xmin, RegLinXmin, Xmax, RegLinXmax, XNota) RegLinXY2 = RegLin(Ymin, RegLinYmin, Ymax, RegLinYmax, YNota) If Metodo Then RegLin2Var = RegLinXY1 Else RegLin2Var = RegLinXY2 End If End Function Public Function RegLin(X_Nota1, Y_Nota1, X_Nota2, Y_Nota2, X_Incognita) RegLin = Y_Nota1 + (X_Incognita - X_Nota1) * (Y_Nota2 - Y_Nota1) / (X_Nota2 - X_Nota1) End FunctionCiao Luca!sei stato gentilissimo e il codice funziona alla grande! Me lo sono controllato ben bene e le tutto mi torna... L'unico aspetto però è che non riesce a produrre un risultato se vengono inseriti i valori spaccati di tabella (naturalmente perchè il denominatore di RegLin va a 0). Adesso provo a lavorarci un attimo e se riesco a fixare posto il codice 🙂Grazie ancora!Ho provato a integrare il codice contemplando i casi di coincidenza di righe e colonne cercado di bypassare il den =0 però non mi restituisce il valore...Questo è il codice... riuscite a darmi una dritta?? Grazie mille!!Option Explicit Public Function RegLin2Var(ElencoX As Range, ElencoY As Range, XNota, YNota, Optional Metodo As Boolean) Dim Xmin As Range Dim Xmax As Range Dim Ymin As Range Dim Ymax As Range Dim CellaW As Range Dim ValXmaxYmax As Range Dim ValXminYmax As Range Dim ValXmaxYmin As Range Dim ValXminYmin As Range Dim RegLinXmin Dim RegLinXmax Dim RegLinYmin Dim RegLinYmax Dim RegLinXY1 Dim RegLinXY2 Set Xmin = ElencoX.Cells(1.1) Set Xmax = ElencoX.Cells(1.1) Set Ymin = ElencoY.Cells(1.1) Set Ymax = ElencoY.Cells(1.1) For Each CellaW In ElencoX If CellaW < Xmin Then Set Xmin = CellaW End If If CellaW > Xmax Then Set Xmax = CellaW End If Next For Each CellaW In ElencoY If CellaW < Ymin Then Set Ymin = CellaW End If If CellaW > Ymax Then Set Ymax = CellaW End If Next For Each CellaW In ElencoX If CellaW < = XNota Then If CellaW > Ymin Then Set Xmin = CellaW End If End If If CellaW >= XNota Then If CellaW < Xmax Then Set Xmax = CellaW End If End If Next For Each CellaW In ElencoY If CellaW <= YNota Then If CellaW > Ymin Then Set Ymin = CellaW End If End If If CellaW >= YNota Then If CellaW < Ymax Then Set Ymax = CellaW End If End If Next Set ValXmaxYmax = Intersect(Xmax.EntireColumn, Ymax.EntireRow) Set ValXminYmax = Intersect(Xmin.EntireColumn, Ymax.EntireRow) Set ValXmaxYmin = Intersect(Xmax.EntireColumn, Ymin.EntireRow) Set ValXminYmin = Intersect(Xmin.EntireColumn, Ymin.EntireRow) If ((ValXmaxYmax = ValXminYmax) & (ValXmaxYmax = ValXmaxYmin) & (ValXmaxYmax = ValXminYmin)) = 1 Then 'COINCIDENZA DELLA RIGA E DELLA COLONNA RegLinXmin = ValXmaxYmax RegLinXmax = ValXmaxYmax RegLinYmin = ValXmaxYmax RegLinYmax = ValXmaxYmax RegLinXY1 = ValXmaxYmax RegLinXY2 = RegLinXY1 'COINCIDENZA DELLA RIGA ElseIf ((ValXminYmin = ValXminYmax) & (ValXmaxYmin = ValXmaxYmax)) = 1 Then RegLinXmin = ValXminYmin 'VALORE IN COLONNA RegLinXmax = ValXmaxYmin 'VALORE IN COLONNA RegLinYmin = RegLin(Xmin, ValXminYmin, Xmax, ValXmaxYmin, XNota) 'VALORE IN RIGA RegLinYmax = RegLin(Xmin, ValXminYmax, Xmax, ValXmaxYmax, XNota) 'VALORE IN RIGA RegLinXY1 = RegLinXmin RegLinXY2 = RegLinYmin ' COINCIDENZA DELLA COLONNA ElseIf ((ValXminYmin = ValXmaxYmin) & (ValXminYmax = ValXmaxYmax)) = 1 Then RegLinXmin = RegLin(Ymin, ValXminYmin, Ymax, ValXminYmax, YNota) 'VALORE IN COLONNA RegLinXmax = RegLin(Ymin, ValXmaxYmin, Ymax, ValXmaxYmax, YNota) 'VALORE IN COLONNA RegLinYmin = ValXminYmin 'VALORE IN RIGA RegLinYmax = ValXminYmax 'VALORE IN RIGA RegLinXY1 = RegLinXmin RegLinXY2 = RegLinYmin 'NESSUNA COINCIDENZA Else RegLinXmin = RegLin(Ymin, ValXminYmin, Ymax, ValXminYmax, YNota) 'VALORE IN COLONNA RegLinXmax = RegLin(Ymin, ValXmaxYmin, Ymax, ValXmaxYmax, YNota) 'VALORE IN COLONNA RegLinYmin = RegLin(Xmin, ValXminYmin, Xmax, ValXmaxYmin, XNota) 'VALORE IN RIGA RegLinYmax = RegLin(Xmin, ValXminYmax, Xmax, ValXmaxYmax, XNota) 'VALORE IN RIGA RegLinXY1 = RegLin(Xmin, RegLinXmin, Xmax, RegLinXmax, XNota) RegLinXY2 = RegLin(Ymin, RegLinYmin, Ymax, RegLinYmax, YNota) End If If Metodo Then RegLin2Var = RegLinXY1 Else RegLin2Var = RegLinXY2 End If End Function Public Function RegLin(X_Nota1, Y_Nota1, X_Nota2, Y_Nota2, X_Incognita) RegLin = Y_Nota1 + (X_Incognita - X_Nota1) * (Y_Nota2 - Y_Nota1) / (X_Nota2 - X_Nota1) End FunctionAllegati:
You must be logged in to view attached files.Ecco il codice fixato... fatemi sapere cosa ne pensate, se vi pare corretto e se avete consigli sulla stesura in forma piu efficiente! Siete stati gentilissimi!!Option Explicit Public Function RegLin2Var(ElencoX As Range, ElencoY As Range, XNota, YNota, Optional Metodo As Boolean) Dim Xmin As Range Dim Xmax As Range Dim Ymin As Range Dim Ymax As Range Dim CellaW As Range Dim ValXmaxYmax As Range Dim ValXminYmax As Range Dim ValXmaxYmin As Range Dim ValXminYmin As Range Dim RegLinXmin Dim RegLinXmax Dim RegLinYmin Dim RegLinYmax Dim RegLinXY1 Dim RegLinXY2 Set Xmin = ElencoX.Cells(1.1) Set Xmax = ElencoX.Cells(1.1) Set Ymin = ElencoY.Cells(1.1) Set Ymax = ElencoY.Cells(1.1) For Each CellaW In ElencoX If CellaW < Xmin Then Set Xmin = CellaW End If If CellaW > Xmax Then Set Xmax = CellaW End If Next For Each CellaW In ElencoY If CellaW < Ymin Then Set Ymin = CellaW End If If CellaW > Ymax Then Set Ymax = CellaW End If Next For Each CellaW In ElencoX If CellaW < = XNota Then If CellaW > Ymin Then Set Xmin = CellaW End If End If If CellaW >= XNota Then If CellaW < Xmax Then Set Xmax = CellaW End If End If Next For Each CellaW In ElencoY If CellaW <= YNota Then If CellaW > Ymin Then Set Ymin = CellaW End If End If If CellaW >= YNota Then If CellaW < Ymax Then Set Ymax = CellaW End If End If Next Set ValXmaxYmax = Intersect(Xmax.EntireColumn, Ymax.EntireRow) Set ValXminYmax = Intersect(Xmin.EntireColumn, Ymax.EntireRow) Set ValXmaxYmin = Intersect(Xmax.EntireColumn, Ymin.EntireRow) Set ValXminYmin = Intersect(Xmin.EntireColumn, Ymin.EntireRow) If ((Xmin = Xmax) And (Ymin = Ymax)) Then 'COINCIDENZA DELLA RIGA E DELLA COLONNA RegLinXmin = ValXmaxYmax RegLinXmax = ValXmaxYmax RegLinYmin = ValXmaxYmax RegLinYmax = ValXmaxYmax RegLinXY1 = ValXmaxYmax RegLinXY2 = RegLinXY1 GoTo Fine 'COINCIDENZA DELLA RIGA ElseIf (Ymin = Ymax) Then RegLinXmin = ValXminYmin 'VALORE IN COLONNA RegLinXmax = ValXmaxYmin 'VALORE IN COLONNA RegLinYmin = RegLin(Xmin, ValXminYmin, Xmax, ValXmaxYmin, XNota) 'VALORE IN RIGA RegLinYmax = RegLin(Xmin, ValXminYmax, Xmax, ValXmaxYmax, XNota) 'VALORE IN RIGA RegLinXY1 = RegLinYmin RegLinXY2 = RegLinYmin GoTo Fine ' COINCIDENZA DELLA COLONNA ElseIf (Xmin = Xmax) Then RegLinXmin = RegLin(Ymin, ValXminYmin, Ymax, ValXminYmax, YNota) 'VALORE IN COLONNA RegLinXmax = RegLin(Ymin, ValXmaxYmin, Ymax, ValXmaxYmax, YNota) 'VALORE IN COLONNA RegLinYmin = ValXminYmin 'VALORE IN RIGA RegLinYmax = ValXminYmax 'VALORE IN RIGA RegLinXY1 = RegLinXmin RegLinXY2 = RegLinXmin GoTo Fine 'NESSUNA COINCIDENZA Else RegLinXmin = RegLin(Ymin, ValXminYmin, Ymax, ValXminYmax, YNota) 'VALORE IN COLONNA RegLinXmax = RegLin(Ymin, ValXmaxYmin, Ymax, ValXmaxYmax, YNota) 'VALORE IN COLONNA RegLinYmin = RegLin(Xmin, ValXminYmin, Xmax, ValXmaxYmin, XNota) 'VALORE IN RIGA RegLinYmax = RegLin(Xmin, ValXminYmax, Xmax, ValXmaxYmax, XNota) 'VALORE IN RIGA RegLinXY1 = RegLin(Xmin, RegLinXmin, Xmax, RegLinXmax, XNota) RegLinXY2 = RegLin(Ymin, RegLinYmin, Ymax, RegLinYmax, YNota) End If Fine: If Metodo Then RegLin2Var = RegLinXY1 Else RegLin2Var = RegLinXY2 End If End Function Public Function RegLin(X_Nota1, Y_Nota1, X_Nota2, Y_Nota2, X_Incognita) RegLin = Y_Nota1 + (X_Incognita - X_Nota1) * (Y_Nota2 - Y_Nota1) / (X_Nota2 - X_Nota1) End FunctionAllegati:
You must be logged in to view attached files. -
AutoreArticoli
Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
