システムwiki

期間と年のピボットtableフィールドを割り当てるためのマクロは本当に遅いです-それらをスピードアップする方法はありますか?

RosCamp 解決済 最終更新日:2022-05-27 04:55

こんにちは

フィルタとして、ピボット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)

6 #
Andreas

このようなシナリオを再現するには複雑すぎます.そして、それがあなたのものと一致しない場合、私たちのソリューションはあなたのために機能しません.
この種のリクエストについては、元のファイルのレイアウトでサンプルファイルを作成し、サンプルデータと色付きのセルで期待される結果を入力してください.
せいぜい元のファイルのコピーを作成し、必要なデータを匿名化します.このためにこのファイルをダウンロードしてください
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

応答3# ->にスキップ
1 #
Andreas 1

いいですね.ヒントを教えていただけてうれしいです.

アンドレアス、メッセージありがとうございます.