2016-12-29 14 views
1

Ich habe eine Frage bezüglich der Neuformatierung einer großen Teilmenge von Daten in Excel. Wie es derzeit steht, sind die Daten in vier Spalten, sortiert nach den "Block" -Werten wie folgt.Neuformatierung Datensatz nach Spaltenwert

enter image description here

Was Ich mag würde, ist eine Funktion (oder vielleicht Makro) zu erstellen, die auf „Block“ Werte von 2 durch die Daten und nehmen Sie alle Daten sortieren können entsprechende, schneiden diese Werte aus, und fügen Sie sie neben den "F635 Mean" -Werten ein, die Block 1 entsprechen. Ich möchte diesen Prozess auch für Block 3 und alle anderen Blockwerte, die möglicherweise existieren, wiederholen. Das Ergebnis sollte wie folgt aussehen:

enter image description here

Natürlich habe ich das manuell, aber es ist mühsam, wenn die Blocknummern zu 20 + erweitern. Ich habe versucht, ein Makro dafür zu erstellen, aber es scheint nicht zu funktionieren (und habe es nicht gespeichert, sonst würde ich meinen Code posten ... tut mir leid).

Jede Hilfe würde sehr geschätzt werden. Danke im Voraus.

Antwort

0

Wenn Ihre „Block“ Werte sind schon in Ordnung, wie sie in Ihrem Beispiel erscheinen, dann denke ich, das wird funktionieren:

Sub FunnySort() 
    Dim ws As Worksheet 
    Dim row, lastRow, newRow, newCol, block, oldBlock As Integer 
    Dim fromCell, toCell As Range 

    Set ws = Sheets("Sheet1") 
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).row 

    oldBlock = ws.Range("B2").Value2 
    newCol = 1 

    For row = 3 To lastRow 
    block = ws.Cells(row, 2).Value2 

    If block = oldBlock And newCol = 1 Then 
     ' same initial block -- don't do anything 
    Else 
     If block <> oldBlock Then 
     newRow = 2 
     newCol = newCol + 5 
     oldBlock = block 
     End If 

     Set fromCell = ws.Cells(newRow, newCol) 
     Set toCell = ws.Cells(newRow, newCol + 4) 

     ws.Range(fromCell, toCell).Value2 = ws.Range("A" & row & ":E" & row).Value2 
     newRow = newRow + 1 
     ws.Range("A" & row & ":E" & row).Clear 
    End If 
    Next row 
End Sub 

Wenn es nicht in Ordnung ist, das ist leicht genug, um hinzuzufügen.

Auch dies setzt voraus, dass, wenn Ihr "Block" -Wert Zahlen überspringt (dh von 3 auf 5 geht), auch kein Spaltenblock übersprungen wird, sondern nur der nächste verfügbare. Von Ihrem Beispiel konnte ich nicht sagen, welches Verhalten Sie wollten. Wenn Sie überspringen möchten, ist das auch einfach zu integrieren.