Excel Tabellenwerte normieren

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.

Higlav  08.11.2012, 18:08

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...

0

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:

  1. Drücke in Excel ALT+F11
  2. Rechtsklick beim Baum deiner Tabelle und auf "Einfügen"->"Modul" gehen.
  3. Code reinkopieren
  4. Beim grünen Text musst du links die Werte für Anfangszeile, Anfangsspalte und den Registernamen verändern.
  5. 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.