我有一个如下所示的数据集:
这 1 生长激素 这2GH 这3GH 这4 BR 这5 BR 这6 VB
当数据点发生变化时,即“GH”到“BR”我希望excel插入换行符。使最终的数据看起来像这样。
这 1 生长激素 这2GH 这3GH 这4 BR 这5 BR 这6 VB
知道如何做到这一点吗?我认为负迭代 for 循环会起作用。但我不知道在这种情况下 excel 将如何处理行操作。
假设您的电子表格没有数千行,您可以使用此(快速而肮脏的)代码:
Sub doIt()
Dim i As Long
i = 2
While Cells(i, 1) <> ""
If Cells(i, 2) <> Cells(i - 1, 2) Then
Rows(i).Insert
i = i + 1
End If
i = i + 1
Wend
End Sub
最快的方法(尝试和测试)
Option Explicit
Sub Sample()
Dim aCell As Range, bCell As Range
Dim ExitLoop As Boolean
With Sheets("Sheet1")
.Columns("A:B").Subtotal GroupBy:=2, Function:=xlCount, TotalList:=Array(2), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Set aCell = .Cells.Find(What:=" Count", LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
Set bCell = aCell
.Rows(aCell.Row).ClearContents
Do While ExitLoop = False
Set aCell = .Cells.FindNext(After:=aCell)
If Not aCell Is Nothing Then
If aCell.Address = bCell.Address Then Exit Do
.Rows(aCell.Row).ClearContents
Else
ExitLoop = True
End If
Loop
End If
.Cells.RemoveSubtotal
End With
End Sub
我假设第 1 行有标题。
宏在行动
除了上面的 'slow' excel 问题,别忘了禁用 application.screenupdating ,它会提高任何宏的速度 5000%
Sub doIt()
Application.ScreenUpdating = False
Dim i As Long
i = 2
While Cells(i, 1) <> ""
If Cells(i, 1) <> Cells(i - 1, 1) Then
Rows(i).Insert
i = i + 1
End If
i = i + 1
Wend
Application.ScreenUpdating = True
End Sub