お世話になります。
Excel2016にて作業をしております。
ピボットテーブルを既存のシートに作成したいのですが、上手くいかないのでお知恵をお貸しいただければと思います。
【概要】
ピボットテーブルを既存のシートに作成したい
【詳細】
複数シート(シート名は担当者名)のA2:B列をデータ範囲としてピボットテーブルを作成しようとしています。
A列とB列の行数は同じですが、シートによって最終行の位置は異なります。
新しいシートにピボットテーブルを作成するのではなく、同じシート内にピボットテーブルを作りたいと考えています。
ただこのシート名が、担当者名が書かれたセルをシート名として拾うようになっており、シート指定をどのようにすれば良いかわからず困っています。
A列 B列 C列 D列
1行目 A1セルの値がシート名 D1セルよりピボットテーブル作成開始
2行目 A B
3行目 A B
4行目 A B
5行目
(シート名:担当者名)
マクロ記録では下記のようになりましたが、
1)Range("A2:B50").Select → B列最終行を取得し、A2~B列最終行までにしたい
2)SourceData:= "担当名!R2C1:R50C2" → シート名をどのように指定すればよいかわからない
3)TableDestination:="担当名!R2C6" → シート名をどのように指定すればよいかわからない
この3点で悩んでいます。
Sub Macro()
Range("A2:B50").Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"担当名!R2C1:R50C2", Version:=6).CreatePivotTable TableDestination:="担当名!R2C4" _
, TableName:="ピボットテーブル2", DefaultVersion:=6
Sheets("担当名").Select
Cells(2, 4).Select
End Sub
1)は
Set ws = ActiveSheet
データ範囲 = "ws!A2:B" & ws.Cells(Rows.Count, "A").End(xlUp).Row
のように指定してみていますが、うまくいきません。
お知恵をお貸しいただけますとありがたいです。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
「必ず、ピボットを作成したいシート(目的の担当の方のシート)をアクティブにしている」、かつ、
「複数のExcelファイルを同時に開いての処理はしない」、
ということが前提ですが・・・
以下のような感じで指定してみてはどうでしょうか?
2)SourceData:= "担当名!R2C1:R50C2"
→SourceData:= Activesheet.Name & "!R2C1:R50C2"
3)TableDestination:="担当名!R2C6"
→TableDestination:= Activesheet.Name & "!R2C6"
※Activesheet.Name は、何か変数を作って代入し、例えば以下のように書いても良いと思います。
Dim ActShtNm As String
ActShtNm = Activesheet.Name
とやっておいて・・・・
2)SourceData:= "担当名!R2C1:R50C2"
→SourceData:= ActShtNm & "!R2C1:R50C2"
3)TableDestination:="担当名!R2C6"
→TableDestination:= ActShtNm & "!R2C6"
と、やってもいいと思います。
=========================================
一応、ご提示のマクロの記録のコードをもとに少し書き換えるなら、以下のような感じになるのではないかと思います。
Sub test998()
Dim ActShtNm As String '現在アクティブなシート名を代入する変数
Dim LastRow As Long 'A列とB列の最終行を代入する変数
Dim SourceArea As String 'ピボットのソースのセル範囲を代入する変数
Dim TargetCell As Range 'ピボットを作成したい出力先のセルを代入するオブジェクト変数
'変数を使って、ピボットのソースのセル範囲を指定する形に変えたので、
'このセル範囲の選択操作は不要になったので、コメントアウトします。
' Range("A2:B50").Select
'A列とB列の行数は同じなので、A列で最終行をチェックして変数に代入
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'現在開いている(=アクティブな)シートの名前を変数に代入
ActShtNm = ActiveSheet.Name
'A列とB列のセル範囲を変数に代入
' SourceArea = ActShtNm & "!R2C1:R" & LastRow & "C2" 'こっちの書き方でもOK。(R1C1形式)
SourceArea = ActShtNm & "!A2:B" & LastRow 'こっちの書き方でもOK。(A1形式)
'ピボットの出力先は、Rangeオブジェクトじゃないといけないっぽいので
'出力先のセルをオブジェクト変数に代入
Set TargetCell = ActiveSheet.Range("D3")
ActiveWorkbook.PivotCaches. _
Create( _
SourceType:=xlDatabase, _
SourceData:=SourceArea) _
.CreatePivotTable _
TableDestination:=TargetCell, _
TableName:="test2"
'「Version:=6」や「DefaultVersion:=6」を省略したので、
'もしエラーが出るようでしたら
'SourceData:=SourceArea や
'TableName:="test2" のあとに
'カンマ付きで復活させてください。
Sheets(ActShtNm).Select
Cells(2, 4).Select
End Sub
動かなかったらごめんなさい。
No.5
- 回答日時:
No2です。
ほ・・・ほんとうにごめんなさい。「A1セルの値がシート名 」ということでしたですね。
ご質問をちゃんと読んでなくて本当にすみません。
シート名を拾際のお話ですが、私の最初の回答のプログラムコードのように、
「ActiveSheet.Name」を使ってもいいと思うのですが、
何らかの理由でそれだとエラーになる場合は・・・
ActShtNm = ActiveSheet.Name
の行を
ActShtNm = ActiveSheet.Range("A1").Value
に書き換えて試してみてください。
本当に失礼いたしました。
No.4
- 回答日時:
No2です。
何度もごめんなさい。同様に、
SourceData:= Activesheet.Name & "!R2C1:R50C2"
のところも、RangeオブジェクトでもOKでした。
なので、
SourceData:= ActiveSheet.Range("A2:B50")
といったような指定もできました。
名前定義したセル範囲も使えるようです。
例えば、「A2:B50」に、「集計ソース」という名前を定義した場合、
SourceData:= ”集計ソース”
でも行けました。
色々、失礼いたしました。
No.3
- 回答日時:
No2です。
ごめんなさい!
'ピボットの出力先は、Rangeオブジェクトじゃないといけないっぽいので
'出力先のセルをオブジェクト変数に代入
のところは、
'ピボットの出力先は、RangeオブジェクトでもOKっぽいので
'出力先のセルをオブジェクト変数に代入
の書き間違いでした。
私の前回回答のコードとしては、
TableDestination:=TargetCell, _
と書いても、
TableDestination:=ActShtNm & "!R3C4", _
と書いても、ピボットを作成できました。
大変失礼いたしました。
No.1
- 回答日時:
各シートのB列最終行を探すのは簡単で
Range(Range("A2:B2"), Range("A2:B2").End(xlDown))
これでそれぞれ最終行まで選択してくれます
また、シート名の取得ということですが、全てのシートが対象であれば
Dim objSheet As Worksheet
For Each objSheet In Worksheets
with objSheet
end with
Next
こんな感じでワークシート全てをループする方法ではいかがでしょうか
その中で特定のワークシートのみ作業を行いたいという事であれば
Forの中でシート名が取得できますので
For Each objSheet In Worksheets
with objSheet
select case .Name
case "田中"
case "佐藤"
case "大城"
case else
exit sub
end with
Next
みたいな感じで振り分けすれば良いと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Visual Basic(VBA) 最終行の指定について教えてください。 複数シートを1シートへまとめる下記マクロでは各シートの6行目を 1 2022/10/04 18:37
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
ちょっと先の未来クイズ第5問
日本漢字能力検定協会が主催し、12月12日に発表される、2024年の「今年の漢字」に選ばれる漢字一文字は何でしょう?
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
既存ワークシートにピボットテーブルを作成するマクロ
Excel(エクセル)
-
Excel VBA ピボットテーブルにて、 最終行の取得の仕方を教えてください
Excel(エクセル)
-
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
-
4
VBAでセル入力の数式に変数を用いたい
Excel(エクセル)
-
5
同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか
Visual Basic(VBA)
-
6
エクセル オートフィルタで絞り込みをしたデータの色つけ
Excel(エクセル)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
9
ピボットテーブルでの毎回可変するデータの最終行までの範囲を指定したいです。
PowerPoint(パワーポイント)
-
10
Excel、VBAでピボットテーブル、pagefieldの絞込み
Excel(エクセル)
-
11
ピボットテーブルの日付フィルタ(VBA)
Excel(エクセル)
-
12
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
13
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセルで、チェックボックス...
-
エクセルの列の限界は255列以上...
-
エクセル マクロ 標準モジュー...
-
Excelに自動で行の増減をしたい...
-
【VBA】ピボットテーブルを既存...
-
Excelでの並べ替えを全シートま...
-
Excel VBA ピボットテーブルに...
-
Excel の複数シートの列幅を同...
-
SUMPRODUCTにて別シートのデー...
-
EXCEL VBAのコンボボックスに取...
-
データチェックを行うエクセル...
-
VLOOKアップ関数の結果の...
-
Excelで条件別にシートを振り分...
-
エクセル 日報売上を月報に展開...
-
【エクセル】1列のデータを交...
-
【マクロ】全てのシートの列を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
Excelのセルの色を変えた行(す...
-
エクセル マクロ 標準モジュー...
-
Excelでの並べ替えを全シートま...
-
Excel の複数シートの列幅を同...
-
エクセルの列の限界は255列以上...
-
Excel VBA ピボットテーブルに...
-
エクセルで、チェックボックス...
-
【条件付き書式】countifsで複...
-
スプレッドシートでindexとIMPO...
-
【VBA】複数のシートの指定した...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
-
【エクセル】1列のデータを交...
-
エクセルで横並びの複数データ...
-
Excelに自動で行の増減をしたい...
-
excel 複数のシートの同じ場所...
おすすめ情報