[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ピボットテーブルのデータ範囲再設定をVBAで』(じょあ)
お世話になっております。
ピボットテーブルのデータ範囲を変更したく、ネットで検索して以下のように書いてみたのですがデータソースの指定がうまくいきません。ご助言いただけますでしょうか。
データは"Data"という名前のワークシートのA1からデータが入っている範囲を選択したいです。(列数はQ列目までで固定ですが行数が変わります)
Sub データソースの変更()
Dim wsPivot As Worksheet 'ピポットテーブルのシート Dim Ws As Worksheet 'データ元のシート名 Dim ptblName As String 'ピポットテーブル名 Dim sourceArea As String 'データ範囲 Set wsPivot = Worksheets("差分確認") Set Ws = Worksheets("Data") ptblName = "差分確認table" sourceArea = Ws.Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
'ピポットテーブルのデータソース変更 wsPivot.PivotTables(ptblName).ChangePivotCache _ ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:=Ws & "!" & sourceArea) End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
間違っていそうなところなぞ。
・With文を宣言していないのに、親シートを省略して .Cells とか書いてある。親は誰?
・sourceAreaは文字列変数なのに、Rangeオブジェクトを代入している。 欲しいのは .Address では?
(???) 2020/06/17(水) 14:03
Sub データソースの変更()
Dim wsPivot As Worksheet 'ピポットテーブルのシート Dim Ws As Worksheet 'データ元のシート名 Dim ptblName As String 'ピポットテーブル名 Set wsPivot = Worksheets("差分確認") Set Ws = Worksheets("Data") ptblName = "差分確認table" 'ピポットテーブルのデータソース変更 wsPivot.PivotTables(ptblName).ChangePivotCache _ ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:= Ws.Range("A1:Q100") End Sub (じょあ) 2020/06/17(水) 14:24
カッコが閉じてないだけでは? 少なくとも構文エラーくらいはご自分で確認して下さい。
必要な行だけ列挙すると、こんなことでしょうか。 Dim sourceArea As Range Set sourceArea = Ws.Range("A2:Q" & Ws.Cells(Rows.Count, "A").End(xlUp).Row) wsPivot.PivotTables(ptblName).ChangePivotCache _ ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:=sourceArea)
(γ) 2020/06/17(水) 14:48
シート指定がうまくできていないような気がするので、直接、プロパティを変更しては? SourceDataプロパティは、文字列で指定します。(何で途中でRangeオブジェクトに変えてしまったのやら…)
wsPivot.PivotTables(ptblName).SourceData = Ws.Range("A1:Q" & Ws.Cells(Rows.Count, "A").End(xlUp).Row).Address(1, 1, xlR1C1, True) (???) 2020/06/17(水) 16:43
バージョン依存でしたか。ミスリードしてしまったようですね。
私の手元のVersion(Excel2010)では、 Sub Macro1() Dim r As Range Set r = Range("Sheet1!A1:B7") ActiveSheet.PivotTables("ピボットテーブル1").ChangePivotCache ActiveWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=r, _ Version:=xlPivotTableVersion14) End Sub が動作します。
また、PivotCaches.Createのヘルプには、以下の記述があり、RangeオブジェクトでOKのようにあります。 | SourceType が xlExternal ではない場合は、引数 SourceData を必ず指定します。 | この引数には、Range オブジェクト (SourceType が xlConsolidation または xlDatabase の場合) | または Excel ブックの Connection オブジェクト (SourceType が xlExternal の場合) を | 指定できます。
(γ) 2020/06/17(水) 17:35
以下、ヘルプの引用です。
SourceType が xlExternal でない場合は、SourceData 引数が必要です。 このメソッドは、 Range オブジェクト ( _SourceType_がxlconsolidationまたはxlconsolidationの場合) または**WorkbookConnection** オブジェクト ( _SourceType_がxlconsolidationの場合) に渡される必要があります。
rangeオブジェクトを渡す場合は、ブック、ワークシート、およびセル範囲を指定する ために、文字列を使用するか、名前付き範囲を設定して名前を文字列として渡すことを お勧めします。 Rangeオブジェクトを渡すと、予期しないエラーが発生することが あります。
(γ) 2020/06/17(水) 17:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.