2017-11-13 12 views
0

私はこのピボットテーブルを持っています私は自分のデータの上に挿入しています。データは長さが異なるので、ピボットテーブルと異なる長さにすることができます。だから、私がやっていることは、おそらく行30で始まるシート上にデータを少し下に置くことです。次にピボットテーブルを上に挿入します。次に、データとピボット・テーブルの間の空白の行をすべて削除するコードを作成します。VBAデータの特定のポイントに行を挿入します

sub foo() 
    dim r As Range, rows As Long, i As Long 
    Set r = ActiveSheet.Range("A1:Z50") 
    rows = r.rows.Count 
    For i = rows To 1 Step (-1) 
     If WorksheetFunction.CountA(r.rows(i)) = 0 Then r.rows(i).Delete 
    Next 
End Sub 

このコードはすべての空白行を削除し、正常に動作しているようです。それはすべてをまとめているので、ピボットテーブルとデータの間に2行の空白行を入れていますが、ピボットテーブルの終了位置やデータの開始位置を特定する方法はわかりません。

enter image description here

だから私はそれが^^^^見えるようにしたいが、今は行7と8が存在しないと、私のデータは私のピボットテーブル上に押し上げています。どんな助けもよろしくお願いします!

Rows.Count + 1などを使用している人がピボットテーブルの終了位置を見つけると思っていました。しかし、私はそれがすぐ後の行にデータがあるので、それがどのように決定するのか分かりません。だから、私は、データが列Aで始まり、その直前に行を挿入するときに見つける必要があるかもしれません。ヘルプのために事前にありがとう!

+0

がそこからあなたのピボットテーブル領域とし、次の2行を取得します。 'Set pvt = Sheet4.PivotTables(1) MsgBox pvt.TableRange1.Offset(pvt.TableRange1.Rows.Count).Resize(2).Address' – cyboashu

答えて

2

は、これらの線に沿って何かを試してみてください:

Public Sub Answer() 
    Dim dataTopRowIndex As Integer 
    Dim ptBottomRowIndex As Integer 

    With ActiveSheet 'Note: use your worksheet's CodeName here instead, e.g. With Sheet1 (Active[anything], Activate, Select, Selection: evil). 
     dataTopRowIndex = .Cells(1, 1).End(xlDown).Row 

     With .PivotTables("PivotTable1").TableRange1 'Replace PivotTable1 by your PT's name. 
      ptBottomRowIndex = .Row + .Rows.Count - 1 
     End With 

     If (dataTopRowIndex - ptBottomRowIndex - 1) > 2 Then 
      .Range(.Rows(ptBottomRowIndex + 1), .Rows(dataTopRowIndex - 3)).EntireRow.Delete 
     End If 
    End With 
End Sub 
+0

これは素晴らしいですね。なぜそれがうまくいくのか分かりません。私は.row + .rows.Count - 1が何をするのか理解していない。最初の部分がどのように働いているかを見て、一番上の行のインデックスを取得していますが、私は2番目の部分を取得しませんでした。しかし、これは、他のコードを最初に実行しない限り、うまくいくでしょう。これは、行を削除しますが、戻さないためです。これは、データに空の行がない場合にのみうまくいくでしょう。他の人に知らせるだけではありません。空白の行がある場合でも機能しますが、空の行も保持します。ありがとう! – Robillard

+0

'.Row + .Rows.Count - 1'部分は、PTの最後の行がどこにあるかを計算します。修飾子(ブロック内の親内のオブジェクト)は、TableRange1であり、PT全体をカバーします(最終ページフィールドを除く)。したがって、 '.Row'はTableRange1の最初の行で、' .Rows.Count'はTableRange1の行数です。 – Excelosaurus

+0

ああ、ありがとう。ええ、私はカウントがおそらく何だったのか把握することができましたが、私はちょうど '。ロー 'が何であるか分かりませんでした。そうですね。私は枢着座ではあまり仕事をしていません。私はそれらを作るために使用するいくつかのコードがありますが、私はそれを再度行う必要があるときにそれをコピーして貼り付けます。これが将来役立つと助けてくれてありがとう。 – Robillard

関連する問題