• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロ登録したピボットが重いのです)

マクロ登録したピボットが重いですか?解決方法を教えてください。

このQ&Aのポイント
  • エクセル2003でピボットを作成し、マクロで処理を行うと再計算が始まると非常に時間がかかる場合があります。特に、PasteSpecialメソッドを使用する際に処理が重くなることがあります。
  • この場合、一つの解決策は、PasteSpecialメソッドを使用せずに値のみを貼り付けることです。また、適切なデータ範囲を指定することも重要です。
  • さらに、ピボットテーブルの作成に時間がかかる場合は、データの量や計算の複雑さを減らすことができます。不要なフィールドや計算を削除することで処理速度を改善できます。

質問者が選んだベストアンサー

  • ベストアンサー
  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.1

こんにちは。 ピボットは重くないですよ~。(^_^) > 時間がかからないようにする方法… 関数式を使わずに For Each ステートメントでしらみつぶしに調べては如何でしょうか? Sheets("data").Select から Application.CutCopyMode = False に該当するコードです。 関数式を元に組んで見ましたが意図した結果にならなかったらすみません。Offsetプロパティあたりを修正すればできると思います。<(_ _)> Dim DataSht As Worksheet, NumSht As Worksheet Dim varData() As Variant Dim myCount As Long, i As Long Dim Target As Range, Target2 As Range With ThisWorkbook   Set DataSht = .Worksheets("data")   Set NumSht = .Worksheets("number") End With With DataSht   .Range("D1").Value = "担当"   myCount = .Range("A2").End(xlDown).Row   ReDim varData(1 To myCount, 0)   i = 1   For Each Target In .Range("D2:D" & myCount)     For Each Target2 In NumSht.Range("A:A").SpecialCells(xlCellTypeConstants, 3)       If Target.Offset(, -3).Value = Target2.Value Then         varData(i, 0) = Target2.Offset(, 1).Value         i = i + 1         Exit For       End If     Next Target2   Next Target   With .Range("D2:D" & myCount)     .ClearContents     .Value = varData   End With End With Erase varData Set NumSht = Nothing Set DataSht = Nothing

murasakish
質問者

お礼

お礼が遅くなって申し訳ありません。参考にさせていただいたら動きました。ありがとうございました。

関連するQ&A

専門家に質問してみよう