Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

fehlende werte durch linearinterpolation

fehlende werte durch linearinterpolation
26.07.2007 11:12:48
Werner
guten morgen alle zusammen...
ich suche für folgende aufgabenstellung ein lösung, am besten mittels makro:
(eine beispieldatei habe ich unter https://www.herber.de/bbs/user/44454.xls upgeloaded)
über einen Zeitraum von 70 std. wurden in unterschiedlichen intervallen messwerte aufgezeichnet.
ich möchte nun durch lineare interpolation einen wert zu jeder vollen stunde berechnen.
Für Hilfe mit dieser aufgabenstellung wäre ich mächtig dankbar
mfg
gruss Werner

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: fehlende werte durch linearinterpolation
26.07.2007 12:26:44
ingUR
Hallo, Werner,
so kompliziert kann man einen Dreisatz in eine EXCEL-Formel kleiden ;)
dV = (INDIREKT("B"&VERGLEICH($D4;$A:$A)+1)-INDIREKT("B"&VERGLEICH($D4;$A:$A)))
dT = (INDIREKT("A"&VERGLEICH($D4;$A:$A)+1)-INDIREKT("A"&VERGLEICH($D4;$A:$A)))
dt = (D4-INDIREKT("A"&VERGLEICH($D4;$A:$A)) 'Diff. vom nächstkl. Rodatenwert zur vollen Stunde
V0 = INDIREKT("B"&VERGLEICH($D4;$A:$A)) 'nächster Rohdatenwert vor der vollen Stunde
V[Std] = V0 + dt*dV/dT
 ABCDE
1Zeitmesswert ZeitWert
2hmg/dl hmg/dl
307,5 07,5
40,985,89 15,766

Formeln der Tabelle
ZelleFormel
E3=B3
E4=INDIREKT("B"&VERGLEICH($D4;$A:$A))+(D4-INDIREKT("A"&VERGLEICH($D4;$A:$A)))*(INDIREKT("B"&VERGLEICH($D4;$A:$A)+1)-INDIREKT("B"&VERGLEICH($D4;$A:$A)))/(INDIREKT("A"&VERGLEICH($D4;$A:$A)+1)-INDIREKT("A"&VERGLEICH($D4;$A:$A)))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Die Formel aus der Zelle E3 ist durch Ziehen in die unteren Zellen der Spalte E zu übertragen.
Soweit meine Idee zum Lösungsansatz
Gruß,
Uwe

Anzeige
AW: fehlende werte durch linearinterpolation
26.07.2007 15:03:00
Werner
wow, vielen dank für die prompte lösung!! funktioniert für alle testreihen.
hab noch das problem, dass ich für einen mittelwert über die gesamte zeit
auch den letzten wert in der tabelle brauch, was nicht der fall ist, wenn er nicht zu einer vollen stunde
gemessen wurde...
...sodala, problem auch schon behoben, ich addier ihn jetzt mit INDEX(B:B;ANZAHL2(B:B)) zur gesamtsumme dazu...
weisst du vielleicht auch eine VBA - Lösung für diese aufgabenstellung? würd mich sehr freun, da ich gerade dabei bin, mich in VBA einzulernen, und ich öfters derartige lösungen suche... :o)
vielen dank auf jeden fall und bis bald
werner

Anzeige
AW: fehlende werte durch linearinterpolation
26.07.2007 18:25:00
ingUR
Hallo, Werner,
erst einmal ist es schön zu erfahren, dass die Umsetzung problemlos verlief und zu richtigen Ergebnissen führte, obwohl natürlich meine ansage, dass die Zellenformel E3 zu kopieren sei, falsch war, denn es mußte natürleich die Zellenformel E4 als Kopiervorlage benutzt werden.
Es gibt mehrere Ausformungen der Programmschritte, um die Aufgabe zu lösen, denn u.a besteht die Möglichkeit, die Zellenformel (engl. Wörter) über die VBA-Funktion Application.WorksheetFunctionen.Match(...) (=VERGLEICH) und Application.WorksheetFunctionen.Indirekct(...) (=INDIREKT) einzusetzen.
Werde jedoch erst später dazu kommen, etwas überschaubares zu entwerfen.
Gruß,
Uwe

Anzeige
AW: fehlende werte durch linearinterpolation
27.07.2007 07:45:00
ingUR
Hallo, Werner,
hier ein erstes Grundgerüst, das den Algorithmus für die linieare Interpolation beinhaltet.
Darüberhinaus kannst du Elemente für Deine weiteren beschriebenen Programmideen hier herausnehmen, wie z.B. das Löschen von Beriechen.
Die Veränderlichkeit in der Stundenanzahl wird in der FOR-Schleife bereits berücksichtigt, da die maximale volle Stunde in Abhängigkeit vom Zeitpunkt der letzten Messaufzeichnung inder Spalte A ermittelt wird.
Option Explicit Sub StundenWerte() Dim maxR As Long, r As Long Dim h As Integer, h0 As Double, h1 As Double Dim dh As Double, dt As Double Dim dv As Double, v0 As Double, v1 As Double, vt As Double ' | Um ggf. zeitverzögernde Einflüsse auszuschalten, ' | kann hier während der Berechnung ' | - auf die automatische Neiuberechnung der Tabellenblätter und ' | - auf die Aktualisierung der Tabellenblattansicht ' | verzichtet werden ' | (Achtung: das gilt nicht immer!) Application.Calculation = xlCalculationManual Application.ScreenUpdating = False ' | Ermiittling der letzten beschriebenen Datenzelle in der Spalte 1 maxR = Cells(Rows.Count, 1).End(xlUp).Row ' | Löschen aller inhalte in den Spalten G und H Columns("G:H").ClearContents ' | Schreiben der Texte in die Spaltenkopfzeilen Cells(1, "G") = "Zeit": Cells(1, "H") = "Zeit" Cells(1, "G") = "h": Cells(2, "H") = "h" Cells(1, "H") = "Zeit": Cells(1, "H") = "messwert" Cells(1, "H") = "h": Cells(2, "H") = "mg/dl" ' | Zentrieren des Zelleninhalts im Bereich G1:H2 Range("G1:H2").HorizontalAlignment = xlCenter ' | Füllen der Zeile für die erste Meßwertaufzeichnung zum Startzeitpunkt 0 Cells(3, "G") = 0 Cells(3, "H") = Cells(3, "B") ' | Schleife über alle vollen Stunden ' | mit CInt(zahl) wird die Zahl zur nächsten Ganzzahl gerundet; ' | um also das Aufrunden zu sichern, wird hier 0.5 zum Wert addiert For h = 1 To CInt(Cells(maxR, 1) + 0.5) ' | Schreibe Stundenzahl in die Spalte G und dort in die Zeile 3+h ' | die Zalh 3 berücksichtigt hier, dass die dritte Zeile die erste Datenzeile ist Cells(3 + h, "G") = h ' | Es wird nun die Zellenfunktion =VERGLEICH, also als englischer Ausdruck MATCH, _ genutzt, ' | um die Zeilenmummer in der Spalte A (Culumns(1) zu ermitteln, in der der größte _ Wert steht, der ' | kleiner als der Suchwert h ist. r = Application.WorksheetFunction.Match(h, Columns(1)) ' | ist die Zeile gefunden, dann ist dies die Zeile für den Datenpunkkt P0 = {h0;v0} ' | es wirden hier die Einzelvariablien gesetzt, um den Rechengang leichter _ nachvollziehen zu können ' | (die zusammenfasung der Berechung in einer Formel wäre auch möglich) h0 = Cells(r, "A") v0 = Cells(r, "B") ' | die Folgezeile, r+1, enthält den zweiten Datenpunkt P1 = {h1;v1}, ' | der für die lineare Interpolation benötigt wird h1 = Cells(r + 1, "A") v1 = Cells(r + 1, "B") ' | es folgt die Ermittlung der Differenzen zwischen den Punkten P0 und P1 ' | sowie dier Zeitspanne von h0 bis zur vollen Stunde dh = h1 - h0 dv = v1 - v0 dt = h - h0 ' | die Berechnung des Vollenstundenwertes, ' | hier auch noch einmal in eine eigene Variable geschrieben, ... vt = v0 + dt * dv / dh ' | ... um sie dann in die betreffende Zelle zu veröffentlichen. Cells(3 + h, "H") = vt Next h ' | Wiederherstellen der Modi "Automatische Tabelelnbattaktualisierung" und ' | "Automatische Neuberechnung" Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub

Für die Bezeichnung des Zellenobjekts ist hier teilweise die Schreibweise Cells(5,"F") verwedendet worden, die gleichwertig mit der Schreibweise Cells(5, 6) ist, da als Argument immer in der festen Reihenfolge die Zeilen- und die Spaltennummer zu übergeben ist. Ein gültiger Spaltenbuchstabe wird intern zur Nummer gewandelt.
Viel Erfolg sowie gute und schnelle fortschritte bei der Einarbeitung in VBA
Gruß,
Uwe

Anzeige
AW: fehlende werte durch linearinterpolation
26.07.2007 18:28:00
Werner
So, jetzt bin ichs nochmal... :o)
falls noch jemand lust hat, ein bisschen an diesem beispiel zu basteln:
mein generelles ziel ist es, ein template für diese berechnung zu erzeugen, bei dem ich mehrere buttons (befehlsschaltflächen) habe, die folgende funktionen haben:
1. button 1 eingabebereich (spalte A und B) löschen
-- dann kopier ich die neuen daten rein
2. button 2 beschreibt spalte D und E (dynamisch, da nicht immer 70h und vielleicht mehr messungen)
3. button 3 ... vielleicht diagramm erzeugen ( mit dynamischer größe ) spalte B und E über der Zeit
4. button 4 ... berechnung des mittelwerts (inklusive des letzten messwerts falls letzte zeit nicht ganze zahl )
mir wär auch schon mit einzelnen code - vorschlägen ungemein geholfen...
vielen dank auch noch mal an uwe, der mir gleich mal ein lösung geschrieben hat
mfg
werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige