期間と年のピボットtableフィールドを割り当てるためのマクロは本当に遅いです-それらをスピードアップする方法はありますか?
こんにちは
フィルタとして、ピボットtableの[現在の月]タブと[年初来]タブに期間と年を設定しています.がある年と期間を要求し、次に行って現在の月の年と期間を選択するマクロ.次に、[YTD]タブで、指定された期間番号1から期間番号を選択します.たとえば、期間番号が3の場合、1から3までのすべての期間が選択されます.
以下のコードを見ると、「本当に」遅いので、理由がわかりません.期間は12しかないため、12の期間を通過し、必要に応じてfalseに設定するのにそれほど時間はかからないはずです.
どんな助けでも大歓迎です.
ありがとう
Ros
これにより、ピボットtableの期間がクリアされ、選択した期間が割り当てられます.
整数としての薄暗いCPeriod
Dim Pt As PivotTable
Dim Pf As PivotField
CPeriod= LastPeriod
Pt= Worksheets( "Client List").PivotTables(1)を設定します
Pf= Pt.PivotFields( "Period")を設定します
Pfを使用
.ClearAllFilters
.CurrentPage= CPeriod
で終わる
これはその年も同じです:
Dim CYear As Integer
CYear= LastYear
Pt= Worksheets( "Client List").PivotTables(1)を設定します
Pf= Pt.PivotFields( "Year")を設定します
Pfを使用
.ClearAllFilters
.CurrentPage= CYear
で終わる
'[YTD]タブを更新
これにより、年が更新されます:
Sheets( "Client List YTD").Select
Set Pt= Worksheets( "Client List YTD").PivotTables(1)
Pf= Pt.PivotFields( "Year")を設定します
Pfを使用
.ClearAllFilters
.CurrentPage= CYear
で終わる
これにより、[ytd]タブのピボットtableのすべての期間が選択されます.
ActiveSheet.PivotTables( "PivotTable1").PivotFields( "Period")を使用
.ClearAllFilters
.ShowAllItems= True
で終わる
これが実行され、期間が選択した期間よりも大きい場合は、選択が解除されます.
ActiveSheet.PivotTables( "PivotTable1").PivotFields( "Period").PivotItemsの各ピット
If pit.Value= "(blank)" Then
ElseIf pit.Value>LastPeriod Then
pit.Visible= False
終了する場合
次のピット
返信リスト(回答:6)
このようなシナリオを再現するには複雑すぎます.そして、それがあなたのものと一致しない場合、私たちのソリューションはあなたのために機能しません.
この種のリクエストについては、元のファイルのレイアウトでサンプルファイルを作成し、サンプルデータと色付きのセルで期待される結果を入力してください.
せいぜい元のファイルのコピーを作成し、必要なデータを匿名化します.このためにこのファイルをダウンロードしてください
https://www.dropbox.com/s/rkfxuh85j5wyj9y/modAnonymize.bas?dl=1
Excelファイルを開きます
シートタブを右クリック
「コードの表示」を選択します
Ctrl-Mを押します
ダウンロードしたファイルを選択してインポートします
VBAエディターを閉じます
機密データのあるセルを選択します
Alt-F8を押します
マクロ匿名化を選択します
[実行]をクリックします
onedrive(または選択した他のオンラインファイルホスティングサービス)にアップロードし、ダウンロードリンクをここに投稿してください.
https://support.Office.com/ja-jp/article/Share-onedrive-files-and-folders-9fcc2f7d-de0c-4cec-93b0-a82024800c07
次に、ファイルを見て、解決策を見つけようとします.ご理解のほどよろしくお願いいたします.
アンドレアス.
応答6# ->にスキップ5 #RosCampダウンロードしようとして恐れている最初のハードルで失敗しました https://www.dropbox.com/s/rkfxuh85j5wyj9y/modAnonymize.bas?dl=1
開くための何も提供されていなかったため、開くことができませんでした.
私が考えていたのは、SQLデータベースにリンクされているということです.最初の部分はデータベースを更新します.ここでかかる時間は理解できます.
次に、期間と年の選択を行う2番目のマクロがあります.これにより、最初の12列のデータが更新されます.ただし、この右側の列はすべて、他のタブからデータを取得する数式ベースです.インデックス、一致など
マクロを実行中としてトレースすると、このビットは古くなります:
ActiveSheet.PivotTables( "PivotTable1").PivotFields( "Period").PivotItemsの各ピットについて
If pit.Value= "(blank)" Then
ElseIf pit.Value>LastPeriod Then
pit.Visible= False
終了する
次のピット
そして、その理由がわかりません!
感謝の気持ちを込めて受け取ったポインタ.
ありがとう
Ros
応答5# ->にスキップ4 #Andreasロス、
コード自体はIMHOであり、実際には問題ではありません.ボトルネックは、ピボットtableが更新され、データが更新される可能性があることです.
つまり、時間のかかる部分はVBAコードではなく、それが強制するアクションです.さらに、基本的な問題はファイルのデータ構造/レイアウトです...
アンドレアス.
応答4# ->にスキップ2 #RosCamp戻ってきてくれてありがとう.私はすべての数式を取り出して、基本的な更新と年と期間の選択を実行しました、そしてそれはとても速く進みました!
更新と年の後に数式を元に戻して、期間の選択が行われ、マクロでより速く機能するかどうかを確認します.
それがどうなるかで更新されます.
ありがとう
Ros
応答2# ->にスキップ3 #RosCampこんにちは.すべての数式を削除したら、SQLデータベースを更新し、上記のコードで期間と年を選択しました.次に、数式をマクロの一部として追加し直しました.はるかに速く-すべてソートされています.
助けてくれてありがとう
よろしくお願いします
Ros