
以前、http://oshiete1.goo.ne.jp/qa3362330.html を質問させていただいた者です。
同じくエクセル2003で、ピボットを作りました。VBAで、
Selection.End(xlDown).Select
N = Selection.Row
を登録し、下記のプログラムを作ったところ、★の部分で再計算が始まり、終了まで非常に時間がかかってしまいます(1分程)。マクロは作動しますので、時間がかからないようにする方法はあるでしょうか。よろしくお願いします。
Sheets("data").Select
Range("D1").Select
ActiveCell.FormulaR1C1 = "担当"
Selection.End(xlDown).Select
N = Selection.Row
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],number!C[-3]:C[-2],2,0)"
Selection.AutoFill Destination:=Range("D2:D" & N)
Range("D2:D" & N).Select
Selection.Copy
★ Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("answer").Select
Range("A1").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"data!R1C1:R" & N & "C4").CreatePivotTable TableDestination:="[集計(1).xls]answer!R1C1", _
TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("性別")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("商品番号")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
"ピボットテーブル1").PivotFields("価格"), "合計 / 価格", xlSum
Columns("A:A").ColumnWidth = 30
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) excel ピポットテーブルの更新について 1 2022/05/13 16:12
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sort関数でひらがなとカタカナ...
-
int型(2バイト)データの分割
-
Perlでのテキスト変換方法に関して
-
C言語でPBYTE型からDOUBLE型へ変換
-
RegQueryValueExでの2バイト文字
-
構造体のソートの方法について...
-
マクロ登録したピボットが重い...
-
fgets, sscanf, バッファ、スト...
-
aliasesファイルを検索したいの...
-
値によって組み分けを作成する...
-
xcopyを用いて、別ドライブにコ...
-
HKEY_CLASSES_ROOT\\.avi
-
画像処理のチェーンコード
-
Excel VBA グラフ作成のとき...
-
CSVファイルの行と列のセルって...
-
perlでくじ引きプログラムを作...
-
System.Collections.ArrayList ...
-
C++ multipart/form-data f
-
C言語の勉強しています。すみま...
-
C言語 平均を求めるプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
エクセルVBA:日付データの変換...
-
【Excel VBA】10進数を2進数に...
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
C#でのswitch文
-
'dataType' 引数を Null にする...
-
linuxのシェルでファイル名に先...
-
printfの%eで指数部分の桁数を...
-
ポインター引数の関数でコンパ...
-
CreateProcessでの環境変数の設...
-
C言語でのLinuxとwindows共通の...
-
C言語でPBYTE型からDOUBLE型へ変換
-
pythonでDBのカラム名で取得し...
-
エクセルVBAで16の16乗を正確に...
-
FFTがうまくできない
-
ビットデータのチェック方法
-
参照渡しの速度について
-
POSTで配列のデータを渡す方法は?
-
PINVOKEで構造体配列をマーシャ...
おすすめ情報