advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 2420 for ピボットテーブル (0.004 sec.)
[[20200330170037]]
#score: 4770
@digest: 9f9f4c7d25c25b2319fc2bd57845ab4c
@id: 82851
@mdate: 2020-03-31T14:22:02Z
@size: 13897
@type: text/plain
#keywords: ◆. (62602), tablerange2 (53053), タ更 (43344), 新シ (41738), ス更 (30545), タソ (21192), pv (14460), hanni (14358), ト. (13769), kazuo (13435), 新() (13316), pivottables (10792), sourcedata (10657), pt (9136), 更新 (8072), ピボ (7690), ト目 (7555), pivottable (7341), dstwb (7141), xlsx (6537), 出デ (6470), トデ (6121), トテ (5001), ソー (4775), worksheets (4000), デー (3894), thisworkbook (3840), 元デ (3754), workbooks (3618), ボッ (3572), ータ (3442), xlpastevalues (3312)
『VBAピボットテーブルデータソース更新』(な)
お世話になっております。 VBA初心者で失礼します。 VBAにて、ピボットテーブルの作成を複数シートに行うのですが、 1から作成するのではなくデータソース更新で 順々に作成したいと考えています。 そこで、ピボットテーブルのデータソース更新の構文を教えて頂きたく思います。 <条件> ・抽出データは、「◆.xlsx」にあります。 本ブックには、複数シートがあり、シートごとに下記<やりたいこと>の作業を行います。 ・ピボットテーブルのひな形は、元データがある◆.xlsxとは別のブックに持っておきます。 ひな形のあるブック名:「データ更新シート.xlsx」 本ブックには、2シートあり、「貼り付け」と「PT」があります。 データソースのテーブル名を「hanni」に設定しています。 <やりたいこと> 1、「ひな形のあるブック:「データ更新シート.xlsx」貼り付け」シートに「◆.xlsx」の元データを貼り付けます。 2、「貼り付け」シートに元データ貼り付け後、ピボットテーブルひな形のある「PT」シートにて、データソース更新→すべて更新作業をし、ピボットテーブルを更新したいです。 以下のとおり、構文を記載しましたが、以下構文でエラーになってしまいます。 「Worksheets("PT").PivotTables("hanni").PivotCache.Refresh」 Sub ピボットデータ更新() ' ' ピボットデータ更新 Macro ' Dim hanni As String '抽出データをコピー Windows("◆.xlsx").Activate '2シート目を選択※2シート目から最終シートまで繰り返し Worksheets(2).Select ActiveWindow.WindowState = xlNormal Rows("2:2").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy '切り取り Application.CutCopyMode = False Selection.Cut '切り取ったデータを貼り付け Windows("データ更新シート.xlsx").Activate Sheets("貼り付け").Select ActiveSheet.Paste '▼ピボットテーブルデータソース更新テスト中 Windows("データ更新シート.xlsx").Activate Worksheets("PT").PivotTables("hanni").PivotCache.Refresh '▲テスト中(終了) End Sub < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- なみさんですか? 別にデータは同じBookにある必要はありません。 あくまでもすべてのシートデータの項目行が同一フォーマットであり、セル結合がない条件です。 以下を◆.xlsxのシート数分繰り返します。 ひな形pvを新規シートにコピーします。(PTシートをPT(n)シートにコピーでも構いません。n=1 to ◆.xlsxのシート数分) コピーされたピボットテーブル(以下pv)のデータソースを◆.xlsxの各シートのデータ範囲とします。 pv.RefreshTableします。 pv.TableRange2.Copy: pv.TableRange2.Cells(1).PasteSpecial xlPasteValuesします。 (kazuo) 2020/03/30(月) 18:28 ---- 失礼しました。 pv.SourceDataでデータソースの変更をすると、使用されているフィールド項目さえあれば、項目の順序・数量はあっている必要はないようです。 また、勝手に更新してくれますね。(pv.RefreshTableしますは必要ない) >抽出データは、「◆.xlsx」にあります >ひな形のあるブック名:「データ更新シート.xlsx」 マクロのあるBook(拡張子.xlsm)がありません。 3つのBookを使うのですか? もし、ひな形のあるブックを「データ更新シート.xlsm」 としてよいなら、 Sub ピボットデータ更新() Dim pv As PivotTable Dim sh As Worksheet For Each sh In Workbooks("◆.xlsx").Worksheets ThisWorkbook.Worksheets("PT").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) Set pv = ActiveSheet.PivotTables(1) With pv pv.SourceData = sh.Range("A2").CurrentRegion.Address(True, True, xlR1C1, True) '◆.xlsxの1行目は空白でA2セルからデータがあること pv.TableRange2.Copy pv.TableRange2.Cells(1).PasteSpecial xlPasteValues Cells(1).Select End With Next Application.CutCopyMode = False End Sub で良いと思います。 (kazuo) 2020/03/30(月) 20:15 ---- kazuo様 なみです。 同じような質問をして申し訳ありません。 ご教授有難うございます。 頂いた構文を実行してみたところ、 以下部分にてエラーになってしまいました。 「インデックスが有効範囲にありません」となります。 PTは、データ更新シート.xlsmにあるシートと考えてよいのでしょうか。 ◆.xlsxファイルにPTシートをコピーしてみましたが、 それもエラーになってしまいました。。。 ThisWorkbook.Worksheets("PT").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) (な) 2020/03/30(月) 23:35 ---- >ひな形のあるブック名:「データ更新シート.xlsx」 >本ブックには、2シートあり、「貼り付け」と「PT」があります。 たぶん最初ので合っています。私のPTは半角、なさんのはPTは全角でした。 >PTは、データ更新シート.xlsmにあるシートと考えてよいのでしょうか。 はい、PT(全角)に戻してください。データ更新シート.xlsmに、「貼り付け」と「PT」の2シートです。 でも、なさんのコードを読み返すと項目名だけを変更しているように見えます。 そうなら、私のはやっていることが違います。 あと、 > '2シート目を選択※2シート目から最終シートまで繰り返し を見逃していました。以下に変えて動かないようなら再度どういったpivotを作りたいのか説明ください。 Sub ピボットデータ更新() Dim pv As PivotTable Dim sh As Worksheet Dim i As Long For i = 2 To Workbooks("◆.xlsx").Worksheets.Count Set sh = Workbooks("◆.xlsx").Worksheets(i) ThisWorkbook.Worksheets("PT").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) Set pv = ActiveSheet.PivotTables(1) With pv pv.SourceData = sh.Range("A2").CurrentRegion.Address(True, True, xlR1C1, True) '◆.xlsxの1行目は空白でA2セルからデータがあること pv.TableRange2.Copy pv.TableRange2.Cells(1).PasteSpecial xlPasteValues Cells(1).Select End With Next Application.CutCopyMode = False End Sub (kazuo) 2020/03/31(火) 07:54 ---- kazuo様 すみません、頂いたコードでもできませんでした。 同じ部分でエラーになってしまいます。 説明不足で大変申し訳ありません。 やりたいこととしては、 1、「◆.xlsx」にある元データを、「データ更新シート.xlsm」の「貼り付け」シートに切り取りコピー。 2、「PT」シートのピボットテーブルのデータソースを更新。貼り付けシートのデータをPTシートに反映させる。 3、PTシートにできたデータを、「◆.xlsx」にある切り取りした部分に値貼り付けする。 ※この作業を「◆.xlsx」にあるシート分だけ繰り返します。 1と3は自分で出来そうなのですが、2の構文がわからず、質問させていただきました。 何度も申し訳ありませんが、可能でしたらご教授よろしくお願いいたします。 (な) 2020/03/31(火) 10:10 ---- 2 を助言するにしても Worksheets("PT") を確定できないといけませんので、 Sub test() On Error Resume Next Debug.Print ThisWorkbook.Name For i = 1 To Workbooks.Count Debug.Print Workbooks(i).Name; " 1: " & Workbooks(i).Worksheets(1).Name, "2: " & Workbooks(i).Worksheets(2).Name Next On Error GoTo 0 End Sub を実施して、VBE画面でCtrl + g してイミディエイトウィンドウを出して 出力された文字を貼り付け下さい。 (kazuo) 2020/03/31(火) 11:16 ---- kazuo様 ご返信、大変ありがとうございます。 イミディエイトウインドウで出力された文字を添付します。 <イミディエイトウインドウで出力された文字> テスト中(出来上がったら差し替え):マクロ(自由分析)名前を付けて保存追加.xlsm データ更新シート.xlsm 1: PT 2: 貼り付け ◆.xlsx 1: Sheet1 2: AAA?? <な コメント> ※◆ブックの2には、元データとなる2シート目の企業名が記載されています。 お手数おかけしますが、よろしくお願いいたします。 (な) 2020/03/31(火) 12:20 ---- bookは3つですか。 テスト中(出来上がったら差し替え):マクロ(自由分析)名前を付けて保存追加.xlsm は閉じてください。 ThisWorkbook の意味さえ解らないのでは、とても1,3 が出来そうにありません。 とりあえず、データ更新シート.xlsm はすでに xlsmに変えてしまったので、これに、マクロを貼り付けて実施してください。 そして、PT(2)からPT(n)にデータができ、それが(◆.xlsxの各シートに)欲しいものか お知らせ下さい。 また、もとのようにBookは3つ必要ですか。◆.xlsx 、データ更新シート.xlsx 、仮前を付けて保存追加.xlsm (kazuo) 2020/03/31(火) 12:39 ---- 大変失礼しました。 全然読んでいませんでした。 >'抽出データをコピー フィルターされた値なので、元のデータのままではダメですね? 少し、考えます。 (kazuo) 2020/03/31(火) 15:22 ---- 頂いたコードでほぼやりたいことができました! >bookは3つですか。 申し訳ありません、2つで大丈夫です。 ◆.xlsx 、データ更新シート.xlsx 後々、ピボットテーブル操作を行い、形式を整えた後、 年月を名前に入れて保存する予定です。 これを合わせれば3つになります。 1点だけ、可能でしたら教えてください。。 上のやり取りで「3」は自分でできそうとお伝えしましたが、 うまくいかず、、、。 <やりたいこと> ピボットテーブル作成したデータを、 PTのある「データ更新シート.xlsm 」にシート展開するのではなく、 「◆.xlsx 」ファイルの元データがあった部分に値貼り付けし、 シート展開したいです。 (この時、◆.xlsx の元データはクリアした状態) 頂いたコードで実験してみましたが、 依然として、PTのある「データ更新シート.xlsm 」にシート展開のままになっております。 変更箇所、わかりましたら教えて頂ければ幸いです。 Sub ピボットデータ更新() Dim pv As PivotTable Dim sh As Worksheet Dim i As Long '◆ブックの2シート目以降シート分繰り返し処理 For i = 2 To Workbooks("◆.xlsx").Worksheets.Count Set sh = Workbooks("◆.xlsx").Worksheets(i) 'ThisWorkbook=「データ更新シート」ブック ThisWorkbook.Worksheets("PT").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) Set pv = ActiveSheet.PivotTables(1) With pv '◆.xlsxの元データを範囲コピー、「データ更新シート」ピボットデータソース更新 pv.SourceData = sh.Range("A2").CurrentRegion.Address(True, True, xlR1C1, True) '◆.xlsxの1行目は空白でA2セルからデータがあること '更新したピボットテーブルをコピー pv.TableRange2.Copy '値貼り付け pv.TableRange2.Cells(1).PasteSpecial xlPasteValues Cells(1).Select End With '▼ここから自分で記載した構文 Windows("◆.xlsx").Activate '元データの値クリア ActiveWindow.WindowState = xlNormal Rows("2:2").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Range("A1").Select '値貼り付け Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("E6").Select Next Application.CutCopyMode = False End Sub (na) 2020/03/31(火) 16:46 ---- >'抽出データをコピー >データソースのテーブル名を「hanni」に設定 で悩んでいました。フィルターはされていないのですね。 Sub ピボットデータ更新() Dim pv As PivotTable Dim sh As Worksheet Dim i As Long '◆ブックの2シート目以降シート分繰り返し処理 For i = 2 To Workbooks("◆.xlsx").Worksheets.Count Set sh = Workbooks("◆.xlsx").Worksheets(i) 'ThisWorkbook=「データ更新シート」ブック Set pv = ThisWorkbook.Worksheets("PT").PivotTables(1) 'ピボットデータソースを◆.xlsxの元データを範囲とし「データ更新シート」のピボット更新 pv.SourceData = sh.Range("A2").CurrentRegion.Address(True, True, xlR1C1, True) '◆.xlsxの1行目は空白でA2セルからデータがあること '元データの値クリア sh.UsedRange.Clear '更新したピボットテーブルをコピー pv.TableRange2.Copy '値貼り付け sh.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.Goto sh.Range("E6") 'なぜにE6? Next Application.CutCopyMode = False ThisWorkbook.Saved = True '保存せずに閉じたときメッセージを出さないよう変更無かったことにする End Sub (kazuo) 2020/03/31(火) 17:27 ---- 横からですが、 >なみです。 ということは↓の続きですかね [[20200308010329]] 『VBAピボットテーブル可変範囲設定方法』(なみ) いくつか確認したいのですが、このトピックのはじめに提示されたコードを、提示された情報を元に整理してみるとこんな感じになるとおもいます。(ループ部分は除く) Sub 整理() Dim データソース As String Dim dstWB As Workbook Set dstWB = Workbooks("データ更新シート.xlsx") '▼カット&ペースト With Workbooks("◆.xlsx").Worksheets(2) .Range("A2", .Range("A2").End(xlDown)).EntireRow.Cut .Paste Destination:=dstWB.Worksheets("貼り付け").Range("A2") End With '▼データソースをシート名も含めて取得する データソース = Split(dstWB.Worksheets("貼り付け").Range("A2").CurrentRegion.Address(External:=True), "]")(1) '▼「PT」シートの「hanni」というピボットテーブルのデータソースを更新する dstWB.Worksheets("PT").PivotTables("hanni").ChangePivotCache _ Workbooks(dstWB.Name).PivotCaches. _ Create(SourceType:=xlDatabase, SourceData:=データソース) End Sub ■1 上記のうち、ループ処理にしたい(次々に変えたい)部分はどこですか? ■2 カット&ペーストではなく、コピー&ペーストではダメなんですか? (データ元消しちゃってもいいのかなぁと…) (もこな2 ) 2020/03/31(火) 18:51 ---- kazuo様 何度も有難うございます。 やりたいことができました!! 本当にありがとうございます。 >なぜにE6? ここは、誤っていました。 A1セルに指定しなおしました。 とても勉強になりました。 (な) 2020/03/31(火) 23:17 ---- もこな2様 なみです。過去に投稿させていただいた内容の続きでした。 何度も同じような質問をして申し訳ありません。 kazuo様に頂いたコードで解決しましたが、 頂いたコード、解説付きで勉強になります。 今後の参考にさせていただきます。 有難うございます!! ちなみに、カットペーストの後、シート完成後 別名でファイル保存をするため、元データは残せるような構成を考えております。 また、何かあれば相談させてください。 (な) 2020/03/31(火) 23:22 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/202003/20200330170037.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97005 documents and 608069 words.

訪問者:カウンタValid HTML 4.01 Transitional