2

次のようなデータセットがあります。

This1 GH
This2 GH
This3 GH
This4 BR
This5 BR
This6 VB

データポイントが変更されたとき、つまり「GH」から「BR」に変更されたとき、Excelで改行を挿入したいと思います。完成したデータは次のようになります。

This1 GH
This2 GH
This3 GH

This4 BR
This5 BR

This6 VB

これがどのように行われるかについて何か考えはありますか?負の反復forループが機能すると思います。しかし、この場合、Excelが行操作をどのように処理するかはわかりません。

4

3 に答える 3

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 に答える
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 に答える
1

上記の「遅い」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 に答える