我有一个关于在Excel中重新格式化大量数据的问题。按照目前的情况,数据分为四列,按“块”值排序如下。
我想要的是创建一个函数(或者可能是宏),它可以对数据进行排序并获取对应于“Block”值2的所有数据,将这些值删除,然后将它们粘贴到“ F635表示“对应于块1的值”。我想迭代块3的该过程,以及可能存在的任何其他块值。结果应如下所示:
当然,我是手动完成的,但当Block编号扩展到20+时,这很乏味。我已经尝试创建一个宏来执行此操作,但似乎无法使其工作(并且没有保存它,否则我会发布我的代码...对不起)。
任何帮助都将非常感激。提前谢谢。
答案 0 :(得分: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),它也不会跳过一列列,它只会取下一个列。从你的例子来看,我无法分辨你想要的行为。如果你想跳过,那么也很容易合并。