Excel VBA質問箱 IV

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

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


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

【36076】複数シートの範囲を元にピボットテーブルを作成 みゆき 06/3/20(月) 15:03 質問[未読]
【36107】Re:複数シートの範囲を元にピボットテー... Ned 06/3/20(月) 23:55 発言[未読]

【36076】複数シートの範囲を元にピボットテーブル...
質問  みゆき  - 06/3/20(月) 15:03 -

引用なし
パスワード
   エクセルのVBAを独学で利用している初心者です。マクロでピボットテーブルの範囲指定をしたいのですが、うまくできないので教えていただけますか?

複数のシートをもとに、すでに作成されているピボットテーブルがあります。
それぞれのシートにはある一定期間の数値が記載されており、期間が経過するごとに同フォーマットのシートが追加されていきます。

新たな期間のシートが追加された時点で、ピボットテーブルの範囲を更新をするためのマクロを作成したいのですが、範囲指定がうまくいきません。
私が考えている内容と不明な点は次のとおりです。

1.ピボットテーブル以外の各シートの表をそれぞれ範囲指定し変数を代入する
 ⇒ユーザーフォームで2つのlistbox表示。
  listbox1に各シート範囲をリストアップし、listbox2にドラッグする
 ⇒(分からない点)
  listbox2の値を範囲として取り込みする方法が分からない。
  複数範囲に対しての変数を代入することが可能かどうか分からない

2.ピボットテーブルのSourceData:=上記の変数 にする
 ⇒(分からない点)そもそもピボットテーブルの機能として指示可能か?

アドバイスをいただけますでしょうか。

【36107】Re:複数シートの範囲を元にピボットテー...
発言  Ned  - 06/3/20(月) 23:55 -

引用なし
パスワード
   こんにちは。
複数範囲からのピボットテーブルってあまり使わないのでハズしてるかもしれませんが、
まず、複数範囲だとSourceDataは配列になるようですね。
Sub sample0()
  Dim v
  v = Sheets(1).PivotTables(1).SourceData
  If IsArray(v) Then
    MsgBox Join(v, vbLf)
  Else
    MsgBox v
  End If
End Sub
セットする時は、SourceDataをxlR1C1文字列指定してあげるとできるようですヨ^ ^
Sub sample1()
  Dim s1 As String, s2 As String, s3 As String
  s1 = Sheets(1).Range("A1:C10").Address(1, 1, xlR1C1, external:=True)
  s2 = Sheets(2).Range("A1:C10").Address(1, 1, xlR1C1, external:=True)
  s3 = Sheets(3).Range("A1:C10").Address(1, 1, xlR1C1, external:=True)
  ThisWorkbook.PivotCaches.Add _
    (SourceType:=xlConsolidation, SourceData:=Array(s1, s2, s3)) _
    .CreatePivotTable TableDestination:=""
End Sub
参考になりますかどうか。

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