Excel Tabellenwerte normieren
Hallo,
ich habe Messreihen bzw. Verläufe von Messwerten mit 50 - 150 Werten. Gern möchte ich diese jeweils auf 100 Werte inter- bzw. extrapolieren.
Leider finde ich keine passende Funktion. Hat jemand eine Idee?
Vielen Dank!
Michel
3 Antworten
Vielen Dank für die Antwort,
ich möchte keine Messwerte dazuerfinden, es geht nur darum immer 100 Stützstellen zu haben, die dann automatisiert ausgewertet werden.
Ich bräuchte daher eine Funktion, die aus den 50 oder 150 Werten jeweils 100 generiert.
Anfangspunkt und Endpunkt sind dabei immer auf gleicher Höhe, nur manchmals sind unterschiedlich viele Messwerte da.
Gibt es immer entweder 50, 100 oder 150 Werte? oder ist deren Anzahl verschieden?
Wenn sie verschieden sind, schau dir mal meine Antwort an - dort ist eine Streuung der Anzahl Messwerten berücksichtigt...
Hallo, Nickname-tester,
Ich habe da mal was mit meinen begrenzten VBA-Kenntnissen gebastelt.
Sub WerteAuf100BegrenzenOderErweitern()
Dim Zeile As Long
Dim Spalte As Long
Dim i As Long
Dim a As Long
Dim b As Long
Dim c As Long
Zeile = 3 'Das ist der Zeilenanfang für die Liste
Spalte = 3 'Das ist der Spaltenanfang für die Liste
With Tabelle1 'Falls du die Register umbenannt hast oder die Werte nicht in der ersten Tabelle sind, schau links im VBA-Projekt nach, wie die Tabelle heisst und kopieren diesen in diesen Befehl
i = .Cells(Rows.Count, Spalte).End(xlUp).Row - Zeile
If i < 100 Then
For a = 1 To 100 - i
.Cells(Zeile + a + i, Spalte) = (Cells(Zeile + a, Spalte) + Cells(Zeile + a + 1, Spalte)) / 2
Next
Else:
b = i - 100
If i > 100 Then
Range(Cells(Zeile, Spalte), Cells(Zeile + 150, Spalte)).Select
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Cells(Zeile, Spalte), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range(Cells(Zeile, Spalte), Cells(Zeile + 150, Spalte))
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
a = i / b
For c = 1 To i Step a
Cells(Zeile + c, Spalte) = ""
Next c
Range(Cells(Zeile, Spalte), Cells(Zeile + 150, Spalte)).Select
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Cells(Zeile, Spalte), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range(Cells(Zeile, Spalte), Cells(Zeile + 150, Spalte))
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End If
End With
End Sub
Da ich nicht weiss, wie gut deine Kenntnisse bezüglich VBA sind geb ich hier mal die "Anleitung für Dummies" zum besten:
- Drücke in Excel ALT+F11
- Rechtsklick beim Baum deiner Tabelle und auf "Einfügen"->"Modul" gehen.
- Code reinkopieren
- Beim grünen Text musst du links die Werte für Anfangszeile, Anfangsspalte und den Registernamen verändern.
- fertig! jetzt nur noch das Makro starten (beim Tabellenblatt ALT+F8)...
PS: Ich hoffe, dass der Code funktioniert, hab ihn mehrmals getestet...
Willst Du Messungen fälschen? "von 50=>100 Messungen extrapolieren", also gleich viele dazuerfinden?
Wenn Du 150 auf 100 reduzieren willst, dann wirf jeden dritten Wert raus, damit beeinflusst Du die Statistik am wenigsten.
Wenn Dich die fehlenden 50 in einem Diagramm stören, da gibt es irgendwo die Option: Nullwerte nicht anzeigen.
Lineares Interpolieren zB A1..?..A3 geht mit =(A1+A3)/2, eine gekrümmte Kurve kann dadurch aber verschoben werden.
Wenn Du leere Interpolationszeilen noch nicht hast, kanns Du sie erzeugen, indem Du
n einer zwischendurch neu eingefügten Spalte
schreibst: =(A1+A2)/2,
die Formel runterkopierst,
die Ergebnisse mit kopieren-InhalteEinfügen-Werte als Zahl fixierst,
die so erschaffenen Zahlen ausschneidest und
unten an die Zahlen der A-Spalte anhängst,
die neue Spalte wieder löscht und
den ganzen Bereich incl aller Messdaten nach A sortierst.
Damit hast Du zwischenwerte für die X-Wert-Spalte bestimmt, ohne zugehörige y-Werte (sind leer = 0 im Diagramm oder ignoriert.).
Bis hierher wäre das zulässig.
Nur die Erstellung neuer Y-Werte (Messwerte) wäre eine Fälschung.