Doppelte Zeilen entfernen
#1
Hallo zusammen, 

PHP-Code:
Zeit    Geschwindigkeit [km/h]    Höhe NN [m]    Spannung [V]    Drehzahl [rpm]
0,000            0,28             820,1        
0
,000                                              11,32               683
0
,100            0,3             820,1        
0
,200            0,17             820,1        
0
,250                                              11,31               689
0
,300            0,3             820,1        
0
,400            0,28             820,1        
0
,500            0,26             820,1        
0
,500                                              11,31                699
0
,600            0,2             820,1        
0
,700            0,48             820,1        
0
,750                                              11,32                706
0
,800            0,24             820,1        
0
,900            0,13             820,1        
1
,000            0,09             820,1        
1
,000                                              11,33                714
1
,100            0,11             820        
1
,200            0,15             820,1        
1
,250                                              11,33                718 
Über zwei Messsysteme wurden Messwerte aufgenommen mit jeweils unterschiedlichen Abtastfrequenzen
Im aufgeführten Minimalbeispiel entsprechen die Werte für Geschwindigkeit und Höhe einer Frequent von 10hz und die Werte für Spannung und Drehzahl entsprechen einer Frequenz von 4hz
Um beide Messdaten zu Synchronisieren habe ich zwei Zeitleisten in der jeweiligen Abtastfrequent erstellt und über "Sortieren" alle Werte übereinander gelegt. 

Wie kann ich die Werte die von beiden Messsystemen zum Zeitpunkt t=0 und t=0,5 aufgenommen wurden, in eine Zeile schreiben, damit in der Zeitspalte keine doppelten Zeiteinträge mehr vorkommen ?

Beste Grüße 
Martin
Antworten Top
#2
Hallöchen,

wenn Du die Einträge aus D und E immer eins hoch ziehen willst dann z.B. so. Vorher eine Sicherheitskopie anlegen.

Code:
Option Explicit

Sub daten_hoch()
'Variablendeklarationen Variant, Long
Dim arrAS, j As Long
  'Daten aus Spalte A uebernehmen
  arrAS= Cells(1).CurrentRegion.Columns(1).Value
  'Schleife von unten ueber alle Daten
  For j = UBound(arrAS) To 2 Step -1
    'Wenn Eintrag mit darueber liegendem Eintrag ueberein stimmt, dann
    If arrAS(j, 1) = arrAS(j - 1, 1) Then
      'Zellwert von D und E in darueber liegende Zellen uebernehmen
      Cells(j - 1, 4).Value = Cells(j, 4).Value
      Cells(j - 1, 5).Value = Cells(j, 5).Value
      'Zellen der Uebernahmezeile von A bis E loeschen
      Range(Cells(j, 1), Cells(j, 5)).Delete Shift:=xlUp
    'Ende Wenn Eintrag mit darueber liegendem Eintrag ueberein stimmt, dann
    End If
  'Ende Schleife von unten ueber alle Daten
  Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo

noch eine Lösung über Formeln und Filtern

Code:
Option Explicit

Private Sub Weg_damit()
    Dim TB1 As Worksheet, LR As Long, LC As Integer
   
    Application.ScreenUpdating = False
   
    Set TB1 = Sheets("Tabelle1")
       
    With TB1
        LR = .Cells(.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
        LC = .Cells(1, .Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile
   
        'möglichen Autofilter ausschalten
        If .AutoFilterMode Then .AutoFilterMode = False
       
        'Überschriften in Hilfsspalten übertragen
        .Cells(1, LC).Offset(0, 2).Resize(1, 2).Value = _
            .Cells(1, LC).Offset(0, -1).Resize(1, 2).Value
       
        'Formel eintragen
        With .Cells(2, LC).Offset(0, 2).Resize(LR - 1, 2)
            .FormulaR1C1 = _
                "=IF(R[1]C1=RC1,R[1]C[-3],IF(RC1=R[-1]C1,""weg damit"",IF(RC2="""",RC[-3],"""")))"
            .Value = .Value 'Formel in Wert
           
        End With
       
        'filtern
        With .Columns(LC).Offset(0, 2).Resize(, 2)
            .AutoFilter Field:=1, Criteria1:="weg damit"
       
            'gefilterte Zeilen löschen
            If WorksheetFunction.CountIf(.Cells, "weg damit") > 0 Then
                .Rows(2).Resize(LR - 1).EntireRow.Delete
           
            End If
        End With
       
        .AutoFilterMode = False
       
        'Alte Spalten löschen
        .Columns(4).Resize(, 3).Delete
   
    End With
End Sub


LG UweD
Antworten Top
#4
In VBA:

Code:
Sub M_snb()
  sn = Sheet1.Cells(1).CurrentRegion
 
  With CreateObject("scripting.dictionary")
      For j = 1 To UBound(sn)
        sp = Application.Index(sn, j)
        If .exists(sn(j, 1)) Then
            sp = .Item(sn(j, 1))
            sp(4) = sn(j, 4)
            sp(5) = sn(j, 5)
        End If
        .Item(sn(j, 1)) = sp
      Next

      Sheet1.Cells(1, 10).Resize(.Count, UBound(sn, 2)) = Application.Index(.items, 0, 0)
    End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
Vielen Dank schonmal für die Antworten.

Ich hätte jetzt noch eine andere Idee gehabt ohne anschließend interpolieren zu müssen.
Ist es möglich die Messdaten aus Messsystem 1 und Messsystem 2 in einem Liniendiagramm darstellen zu lassen?

Das Problem an der Stelle sind die unterschiedlichen Abtastfrequenzen beider Zeitspalten.
Antworten Top
#6
Ich hatte schon vorher geahnt, dass es in ein Crossposting mündet. 

Neu ist, wie geschickt es nicht von Anfang an als ein solches gilt.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#7
Ich bitte vielmals um Entschuldigung. Die Nachricht von Berverly aus dem anderen Forum hatte ich ganz vergessen. 

Trotzdem vielen Danke für den Tipp.
Hat super geklappt.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste