2017-03-22 13 views
0

VBAの新機能で、範囲内の値(たとえば0)に基づいて行を選択してExcelでコードを作成しようとしています。 Excelのグループ機能下にあるリンクされたキャプチャでは、私がどこに行きたいか(キャプチャ1)からどこに行きたいのかを見ることができます(キャプチャ2)。VBA Excel - 特定の条件に基づいて行をグループ化する

次のコードは、すべての行を選択する場所です。残念ながら、複数の行が一緒に選択されていない場合は、グループ関数を使用できません。

私はコードに何を追加して最初の0のセットをグループ化し、次に0のセットに移動し、それが範囲の終わりに達するまで同じことをするのかよく分かりません。また、画面キャプチャの行13にあるような空白のセルをスキップすることもできます。

Sub SelectGroupRows0() 

Dim c As Range 
Dim rng0 As Range 
Dim block As Range 

Set block = Range("B4:B23") 

For Each c In block 
    If c = 0 Then 
     If rng0 Is Nothing Then Set rng0 = c.EntireRow 
     Set rng0 = Union(rng0, c.EntireRow) 

    Else: End If 
Next c 

rng0.Select 
Selection.Rows.Group 

End Sub

この上の任意の助けいただければ幸いです。事前に

おかげで、あなたは正しい場所にいくつかのElse Ifしていなかった

Q

enter image description here enter image description here

+0

、ピボットテーブルは、順序はテーブルがThinkCellの滝グラフで使用されているよう – Slai

+0

順序が重要である重要でない場合ははるかに簡単にグループ化することができます。 – Qwin

答えて

1

さらに、Unionの範囲Areasをループして、それぞれをグループ化する必要があります。

rng0.Selectと後でSelection.Rows.Groupを使用する必要はありません。サイドノートとして

コード

Option Explicit 

Sub SelectGroupRows0() 

Dim c As Range 
Dim rng0 As Range 
Dim block As Range 

Set block = Range("B4:B23") 

For Each c In block 
    If Not IsEmpty(c) And c.Value = 0 Then 
     If rng0 Is Nothing Then 
      Set rng0 = c 
     Else 
      Set rng0 = Union(rng0, c) 
     End If 
    End If 
Next c 

' loop through your Range's Areas and group each one of them 
For Each c In rng0.Areas 
    c.EntireRow.Group 
Next c 

End Sub 
+0

これはうまくいった。コードのために非常にShai Radoありがとう、私は正しい軌道にあるが、まだかなり離れていた。感謝します! – Qwin

関連する問題