2016-12-29 85 views
1

我有一个关于在Excel中重新格式化大数据子集的问题。就目前而言,数据分为四列,按以下“块”值排序。按列值重新格式化数据集

enter image description here

我想什么是创建一个函数(或者宏)可以通过对数据进行排序,并采取一切相应的2到“块”值的数据,切这些值出来,将它们粘贴到与块1相对应的“F635平均值”旁边。我想要为块3以及可能存在的任何其他块值重复该过程。结果应该是这样的:

enter image description here

当然,我手动这样做,但它是单调乏味的,当数座延伸至20+。我试图创建一个宏来做到这一点,但似乎无法得到它的工作(并没有保存它,否则我会张贴我的代码...对不起)。

任何帮助将不胜感激。提前致谢。

回答

0

如果你的“块”的价值观已经在顺序,它们出现在你的榜样,那么我认为这会工作:

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 

如果不是为了,那是很容易的补充。另外,这假设如果你的“块”值跳过数字(即从3到5),它也不会跳过一列的数据块,它只需要下一个可用数据。从你的例子来看,我无法分辨你想要什么样的行为。如果你想跳过,那很容易融入。