Microsoft Excel

Herbers Excel/VBA-Archiv

Lineare Interpolation

Betrifft: Lineare Interpolation von: Peter Pan
Geschrieben am: 08.11.2014 20:59:50

Hallo liebes Forum,

ich weiß, dass es sowas wie Makros gibt. Wie ich diese schreibe oder wie sie angewandt werden, weiß ich leider nicht. Bitte seid nachsichtig mit eurem Support, über den ich mich schon jetzt in jedem Fall sehr freue!

Folgendes ist mein Problem:
Ich habe eine Datenreihe, z.B.:

20
25
21
22
23
24


Diese Reihe lässt sich nach unten beliebig weiter führen. Zwischen den Zahlen gibt es Leerzeilen. Die Anzahl der Lehrzeilen variiert je Datei, mal sind es 20, mal 18, mal weniger. Ich möchte nun zwischen den Zeilen linear interpolieren, dies kann sowhol absteigend, als auch aufsteigend sein. Bei 20 Leerzeilen würde sich z.B. folgendes ergeben:

20.00
20.25
20.50
21.00
.
.
.
25.00
24.80
24.60
24.40
.
.
.
21

Ich hoffe, dass ich mich alles verständlich darstellen konnte und mir einer von euch mit Eurem Wissen weiterhelfen kann. Wie kann ich obiges Problem programmieren?

Schöne Grüße und ein schönes Wochenende!

Peter

  

Betrifft: Man könnte das auch lösen, indem man Fmln ... von: Luc:-?
Geschrieben am: 08.11.2014 23:55:27

…in die Leerzellen einsetzt, die sich auf den vorhergehenden und den nachfolgenden Wert, sowie die Leerzellen­Anzahl dazwischen beziehen, Peter;
für dein Bsp mit 19 Leerzellen zwischen 20 und 25 (Adressen A1 und A21) würde sie so lauten:
A2[:A20]:=A1+(A$21-A$1)/ZEILEN(A$2:A$21)
Und für die ebenfalls 19 Leerzellen zwischen 25 und 21 (Adressen A21 und A41) analog:
A22[:A40]:=A21+(A$41-A$21)/ZEILEN(A$22:A$41)
Gruß + schöWE, Luc :-?


  

Betrifft: AW: Lineare Interpolation von: ransi
Geschrieben am: 09.11.2014 10:07:52

Hallo Peter

Nehmen wir mal an das sind deine Werte:
Tabelle1

 A
181
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14602
15 
16 
17 
18 
19240
20 
21 
22617
23 
24 
25994
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36192
37 
38 
39 
40785


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4


Dann könnte man das mit VBA z.B. so lösen:

' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Sub machs()
    Dim rngBereich As Range, rngLeerzellen As Range, rngzelle As Range
    Dim dblOben As Double, dblUnten As Double, dblDifferenz As Double
    On Error Resume Next
    Set rngBereich = Sheets("Tabelle1").Range("A1:A10000").Cells.SpecialCells(xlCellTypeBlanks) 'Anpassen
    On Error GoTo 0
    If rngBereich Is Nothing Then Exit Sub
    
    For Each rngLeerzellen In rngBereich.Areas
        dblOben = rngLeerzellen(1).Offset(-1, 0).Value
        dblUnten = rngLeerzellen(rngLeerzellen.Count).Offset(1, 0).Value
        dblDifferenz = (dblUnten - dblOben) / (rngLeerzellen.Count + 1)
        For Each rngzelle In rngLeerzellen
            With rngzelle
                .Value = .Offset(-1, 0).Value + dblDifferenz
            End With
        Next
    Next
    
End Sub



Ausgabe ist dann dies:
Tabelle1

 A
181
2121,076923
3161,153846
4201,230769
5241,307692
6281,384615
7321,461538
8361,538462
9401,615385
10441,692308
11481,769231
12521,846154
13561,923077
14602
15529,6
16457,2
17384,8
18312,4
19240
20365,666667
21491,333333
22617
23742,666667
24868,333333
25994
26921,090909
27848,181818
28775,272727
29702,363636
30629,454545
31556,545455
32483,636364
33410,727273
34337,818182
35264,909091
36192
37340,25
38488,5
39636,75
40785


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

Der Code ist in etwa das was Lukes Formeln auch machen.
ransi


  

Betrifft: AW: Lineare Interpolation von: Peter Pan
Geschrieben am: 11.11.2014 14:00:21

Hallo Luc, hallo Ransi,

danke Euch beiden für eure Rückmeldung.
Deine Variante Luc ist grundsätzlich auch ein guter Ansatzt und wäre für mich mit Sicherheit die einfachere Variante. Leider sind Datensätze sehr lang (bis zu 1.700 Zeilen). Nach deinem Ansatz müsste ich die Formeln immer wieder anpassen, oder täusche ich mich?

Ransi, vielen Dank für die Programmierung. Bleibt der Code auch so bestehen, falls sich die Anzahl der Leerzeilen zwischen den Ausgangswerten nicht verändert? Es also z.B. konstant 20 Zeilen sind (die Anzahl der Leerzeilen verändert sich nur zwischen den Dateien, nicht aber innerhalb eines Datensatzes).

Nun kommt noch leider der Zeitpunkt an dem ich mich als absoluter Noob outen muss. Ich weiß leider nicht, wo und wie ich diesen Code eingebe. Natürlich habe ich bereits versucht mich schlau zu machen, bin aber auf verschiedene Varianten gestoßen, von denen keine funktioniert hat. Auch an dieser Stelle bitte ich Euch noch einmal um Eure Unterstützung.

Schöne Grüße


Peter