Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1010 / 13645 ツリー ←次へ | 前へ→

【76885】VBAでピボットテーブルを自動化する方法 a 15/4/2(木) 13:51 質問[未読]
【76886】Re:VBAでピボットテーブルを自動化する方法 マナ 15/4/3(金) 0:09 発言[未読]
【76900】Re:VBAでピボットテーブルを自動化する方法 a 15/4/6(月) 13:26 回答[未読]

【76885】VBAでピボットテーブルを自動化する方法
質問  a  - 15/4/2(木) 13:51 -

引用なし
パスワード
   初めまして。
Excel VBAでピボットテーブルを自動化する方法を教えていただきたいです。
何故か一部しかピボットテーブルが表示されずに「オブジェクトが必要です」というエラーが出ました。
デバックをしたところ、下の方に矢印を入れた".Position=1"が黄色くなりました。
おそらくコードの間違いがあると思いますが、過去ログ等を見ても分からなかったので、
どのような間違いがあるのか分かる方はできれば教えていただきたいです。

Sub Macro2()
'
' Macro2 Macro
'

'
  ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "Book1!R1C1:R21C5", Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:="Book1!R23C8", TableName:="ピボットテーブル1", DefaultVersion _
    :=xlPivotTableVersion12
  Sheets("Book1").Select
  Cells(23, 8).Select
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollRow = 2
  ActiveWindow.ScrollRow = 3
  ActiveWindow.ScrollRow = 4
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 8
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("氏名")
    .Orientation = xlPageField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("氏名")
    .Orientation = xlRowField
    .Position = 1
  End With
  ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル1").PivotFields("性別"), "データの個数 / 性別", xlCount
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("都道府県")
    .Orientation = xlColumnField
    .Position = 1
  End With
  ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル1").PivotFields("都道府県"), "データの個数 / 都道府県", xlCount
  ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データの個数 / 都道府県"). _
    Orientation = xlHidden
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("年齢")
    .Orientation = xlColumnField
    .Position = 1
  End With
  ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル1").PivotFields("年齢"), "合計 / 年齢", xlSum
  ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("合計 / 年齢").Orientation = _
    xlHidden
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 12
  ActiveWindow.ScrollRow = 13
  ActiveWindow.ScrollColumn = 4
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollColumn = 7
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 4
  Range("I23").Select
  ActiveWindow.ScrollRow = 12
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 8
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 4
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 1
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 4
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 8
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 12
  ActiveWindow.ScrollRow = 13
  ActiveWindow.ScrollRow = 12
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 8
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 4
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 4
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 1
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 8
  ActiveWindow.ScrollColumn = 10
  ActiveWindow.ScrollColumn = 9
  ActiveWindow.ScrollColumn = 8
  ActiveWindow.ScrollColumn = 7
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 8
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 12
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データの個数 / 性別")
    .Orientation = xlPageField
⇒    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("性別")
    .Orientation = xlColumnField
    .Position = 1
  End With
  ActiveWindow.ScrollRow = 13
  ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル1").PivotFields("年齢"), "合計 / 年齢", xlSum
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("電話番号")
    .Orientation = xlPageField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("都道府県")
    .Orientation = xlPageField
    .Position = 1
  End With
End Sub

【76886】Re:VBAでピボットテーブルを自動化する方...
発言  マナ  - 15/4/3(金) 0:09 -

引用なし
パスワード
   最終的にどうしたいかがよくわかりません。
マクロ記録で無駄な操作まで記録されないように
事前に操作を練習しておくとよいです。

とりあえず、こちらで適当にマクロ記録とって
それを編集してみました。

Sub test()
  Dim pt As PivotTable
  Dim ws As Worksheet
  
  Set ws = ActiveWorkbook.Sheets("Book1")
  
  On Error Resume Next
  ws.Range(ws.PivotTables(1).TableRange2.Address).Delete
  On Error GoTo 0
  
  Set pt = ActiveWorkbook.PivotCaches.Create(xlDatabase, ws.Range("A1:E25")) _
      .CreatePivotTable(ws.Range("W3"))

  With pt
  
    With .PivotFields("都道府県")
      .Orientation = xlRowField
      .Position = 1
    End With
    With .PivotFields("性別")
      .Orientation = xlColumnField
      .Position = 1
    End With
    With .PivotFields("年齢")
      .Orientation = xlColumnField
      .Position = 2
    End With
    .AddDataField .PivotFields("氏名"), "データの個数 / 氏名", xlCount
    
  End With
  
End Sub

【76900】Re:VBAでピボットテーブルを自動化する方...
回答  a  - 15/4/6(月) 13:26 -

引用なし
パスワード
   ▼マナ さん:
>最終的にどうしたいかがよくわかりません。
>マクロ記録で無駄な操作まで記録されないように
>事前に操作を練習しておくとよいです。
>
>とりあえず、こちらで適当にマクロ記録とって
>それを編集してみました。
>
>Sub test()
>  Dim pt As PivotTable
>  Dim ws As Worksheet
>  
>  Set ws = ActiveWorkbook.Sheets("Book1")
>  
>  On Error Resume Next
>  ws.Range(ws.PivotTables(1).TableRange2.Address).Delete
>  On Error GoTo 0
>  
>  Set pt = ActiveWorkbook.PivotCaches.Create(xlDatabase, ws.Range("A1:E25")) _
>      .CreatePivotTable(ws.Range("W3"))
>
>  With pt
>  
>    With .PivotFields("都道府県")
>      .Orientation = xlRowField
>      .Position = 1
>    End With
>    With .PivotFields("性別")
>      .Orientation = xlColumnField
>      .Position = 1
>    End With
>    With .PivotFields("年齢")
>      .Orientation = xlColumnField
>      .Position = 2
>    End With
>    .AddDataField .PivotFields("氏名"), "データの個数 / 氏名", xlCount
>    
>  End With
>  
>End Sub

投稿者です。回答が遅れてすみません。
本当に有難うございます。このようにコードを短縮できるのですね。
とても分かりやすく、おかげさまでピポットテーブルを自動化することができました。

1010 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free