2017-01-23 13 views
1

毎週一連のアイテムのデータをプルし、ピボットテーブルを生成します。数週間、これらのアイテムの1つ以上のデータは存在しません。この場合、その項目はレポートに表示されません。マクロ最後の行を見つけてデータを追加

アイテムがピボットテーブルから誤って除外されていないことを手動でチェックしないようにするには、ピボットテーブルで使用されるデータに手動で「ダミー」アイテムを追加する必要があります。

マスターアイテムシートと生データの間でCOUNTIFを使用して追加するダミーアイテムを識別できます。私の挑戦は、ピボットテーブルの行数が毎週変わるため、1)生データレポートの最後の行を特定し、2)最終行の下にダミー行を挿入する必要があります。

誰でも以下の例を使用して戦略を提案できますか?データで

アイテム

AAA  
BBB  
DDD  
FFF 

手動で私はすべてのエラーを得ていないのですが、これは動作していない

CCC  
EEE 

を挿入するために、データの項目はありません。あなたは下記の動的なピボット・データ・ソースを持つようにオフセット解決策に見

Sub DUMMY_ITEMS() 

Dim operationsSheet As Worksheet 
Dim rawDataSheet As Worksheet 
Dim copyRange As Range 
Dim LastRow As Long 

Set operationsSheet = Sheets("Operations") 
Set rawDataSheet = Sheets("Raw Data") 

operationsSheet.Range("H2:V73").Copy 

With rawDataSheet 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
End With 
rawDataSheet.Cells(LastRow, 1).PasteSpecial xlPasteValues 

End Sub 

私はしかし、非常におすすめ:コメントで、あなたのコードの

​​
+0

[最終行を検索する](https://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba/11169920#11169920)の場合は、リンクを確認してください。データの追加はそれほど難しくありません。 – L42

+1

私は何のエラーも出ませんが、これはうまくいきません。どんな助けも本当にありがとう! 'サブDUMMY_ITEMS() ' は 'マクロ シート( "操作")DUMMY_ITEMS レンジ( "H2:V73")を選択します。 Selection.Copy シート( "生データ")を選択し 点心LASTROWを選択します。 。ActiveSheet LASTROW = .Cells(.Rows.Count、 "A")と 限りエンド(xlUp).Row Selection.PasteSpecialペーストで 終了:=のxlPasteValues、操作:= xlNone、SkipBlanks _ := Falseの、Transpose:= False End Sub ' @ l42; @tackgnol – ERKSMTY

答えて

1

おかげでここに固定されたバージョンです。常にスピードにあなたのピボットテーブルを維持するための巧妙なトリックがあることをすべての上に

: 名前の名前付き範囲を作成しますRDATA

A1は、ピボットテーブルの物乞いである
=OFFSET($A$1;;;COUNTA(A:A);COUNTA(1:1)) 

COUNTA(A:A)は、範囲を拡張するために必要な行の数をカウントします(すべてのレコードについて記入された列を選択します)。COUNTA(1:1)はヘッダーの数をカウントします。 rDataをピボットソースとして配置します。 rDataは、行または列を追加するたびに拡張されます。マクロは必要ありません。

私は通常、データ範囲に

範囲(「A1」)は、データセット

with currentData 

    lastRow = .rows(.rows.count).row 

end with 

のbegginingを行うための最も最適な方法ではないかもしれである

Set currentData = ActiveWorksheet.Range("A1").CurrentRegion 

を完全なテーブルを割り当てそれが、私のため 次にあなたが

ActiveWorksheet.Cells(lastRow+1,1).Value = "CCC" 
ActiveWorksheet.Cells(lastRow+2,1).Value = "EEE" 

かを使用して下の事をすることができます動作しますオフセットを使用することができます

Set rangeToFill = ActiveWorksheet.Cells(lastRow,1) 
    rangeToFill.offset(1,0).value ="CCC" 
    rangeToFill.offset(2,0).value ="EEE" 

関連する問題