2

我有一个如下所示的数据集:

这 1 生长激素
这2GH
这3GH
这4 BR
这5 BR
这6 VB

当数据点发生变化时,即“GH”到“BR”我希望excel插入换行符。使最终的数据看起来像这样。

这 1 生长激素
这2GH
这3GH

这4 BR
这5 BR

这6 VB

知道如何做到这一点吗?我认为负迭代 for 循环会起作用。但我不知道在这种情况下 excel 将如何处理行操作。

4

3 回答 3

2

假设您的电子表格没有数千行,您可以使用此(快速而肮脏的)代码:

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
于 2012-05-10T17:47:17.800 回答
2

最快的方法(尝试和测试

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 行有标题。

宏在行动

在此处输入图像描述

于 2012-05-10T18:08:25.307 回答
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
于 2013-07-23T20:06:10.703 回答