
下記はマクロの記録で作成した作業の内容になり、この作業をブック内の左から6番目以降のシートで繰り返したいと思っております。
Sheets("ピボットテーブル元データ").Select ←ピボットテーブルのデータ元シート選択(シート名固定)
Cells.Select ←全セルを選択
Selection.Delete Shift:=xlUp ←ピボットテーブルのデータ元シートのデータをクリアする。
Sheets("22-001").Select ←シート名は毎回変わります。データをコピーするシートを選択
Range("A2:T156").Select ←コピーする範囲を選択、列数(A~T列)は毎回同じ、最終行は毎回可変します。
Selection.Copy ←コピーして
Sheets("ピボットテーブル元データ").Select ←ピボットテーブルのデータ元シートを選択
Range("A2").Select
ActiveSheet.Paste ←コピーしたデータをセルA2へ貼付
ActiveSheet.PivotTables("ピボットテーブル1").ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"ピボットテーブル元データ!R2C1:R156C20", _
Version:=7) ←ピボットテーブルのデータソースを先ほど貼付けしたデータ範囲に変更
ActiveWorkbook.RefreshAll ←データをすべて更新
Range("A2:M61").Select ←更新されたピボットテーブルの範囲を選択して
Selection.Copy ←コピーして
Sheets("22-001").Select ←シート名は毎回変わります。データを貼付するシートを選択
Range("H2").Select ←コピーしたデータをセルH2へ値として貼付
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("A:G").Select ←A列~G列を選択して
Selection.Delete Shift:=xlToLeft ←A列~G列を削除
Rows("62:92").Select ←先ほど貼り付けたデータの次の行から最終行を選択
Selection.Delete Shift:=xlUp ←行を削除
このようなことは可能でしょうか?
ご教授いただければ幸いです。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
>N列以降にデータがあり、それは残しておきたく、
→ では、コピーした範囲の行の数字を残しておけば良いかと。
No.3の回答のコードですが、
Range("A2:M" & Cells(Rows().Count, 1).End(xlUp).ROW).Copy
↓
変数a = Cells(Rows().Count, 1).End(xlUp).ROW
Range("A2:M" & 変数a).Copy
変数aに、貼り付けた行の末尾があるので、
変数a + 1で消したい行になるかと。
ただ、貼り付けたデータが、元データより行が多い時は、注意が必要です。
>Range("H2").Select
>Selection.PasteSpecial Paste:~
の後に、
変数b = Cells(Rows().Count, 1).End(xlUp).ROW
IF 変数a +1 < 変数b Then
Rows(変数a +1 & ":" & 変数b).Delete Shift:=xlUp ←行を削除
End if
mygoonickname様
丁寧に教えていただき本当にありがとうございます。
貼り付けたデータが、元データより行が多い時はおそらく無いと思います。
教えて頂いた内容をもとに自分でやってみたいと思います。
本当にありがとうございました。
No.4
- 回答日時:
>”92”の部分には最終行の変数を代入するとして、”62”はどのように取得すればいいのでしょうか?
逆に、この62行のこの数字って、何でしょうか?
質問者さんの方が詳しいと思うのですが。。。
このマクロの記録を取られた時に、どの様な処理をされたかを考えながら
作っていく必要があると思います。
Range("H2").Select ←コピーしたデータをセルH2へ値として貼付
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("A:G").Select ←A列~G列を選択して
Selection.Delete Shift:=xlToLeft ←A列~G列を削除
Rows("62:92").Select ←先ほど貼り付けたデータの次の行から最終行を選択
Selection.Delete Shift:=xlUp ←行を削除
やっている事は、多分ですが、
H2に貼り付けて、A~G列を選択し削除 → H列がA列に移動しているかと
Rows("62:92").Select → たぶん、貼り付け前の、データの残りでは?
それを削除しているのでは? この部分の説明がないので、推測ですが。
それでしたら、シート上のデータを先に消しておけば良い様な気がします。
シート上のデータを消した後に、下記を実施するだけで、済むかと。
Range("A2").Select ←コピーしたデータをセルH2へ値として貼付
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
あくまでも、コードを見た上での推測ですが。
mygoonickname様
面倒な内容にお付き合い頂きありがとうございます。
ご指摘の通り、Rows("62:92")は貼り付け前のデータの残りなのですが、N列以降にデータがあり、それは残しておきたく、残りの部分の行のみ削除出来ればと思っているのですが難しいでしょうか?
No.3
- 回答日時:
No.1の者です。
>Range("A2:M61").Select ←更新されたピボットテーブルの範囲を選択
Selection.Copy ←コピーして
シート上のデータを取得して、コピーという感じでしたら、
下記のどちらもで、結果は同じになるかと思います。お好きな方で。
Range("A2:M" & Cells(Rows().Count, 1).End(xlUp).ROW).Copy
Range(Range("M2"),Cells(Rows().Count, 1).End(xlUp)).Copy
mygoonickname様
本当に何度も回答頂きありがとうございます。
もし良ければ、もう1点だけ教えて頂けると幸いです。
質問内の最後のあたりの、
Rows("62:92").Select ←先ほど貼り付けたデータの次の行から最終行を選択
Selection.Delete Shift:=xlUp ←行を削除
の部分についてですが、
ピボットテーブルの範囲をコピーして、Worksheets(I)に貼り付けた後、
貼り付けた範囲以降最終行までの行を削除する場合、”92”の部分には最終行の変数を代入するとして、”62”はどのように取得すればいいのでしょうか?
No.2
- 回答日時:
No.1の者です。
>初心者の私がこのような質問をしてしまい申し訳ありません。
→いえ、そんな事はありません。
ただ、質問内容を絞って投稿された方が良いかと思います。
場合によっては、この様なマクロを作ってと、作成依頼の様な方もいます
ので、その様な方は、私は個人的にお断りしていますので。
>データの選択範囲がシート毎に可変するので、
A列の末尾の行を取得する場合。
変数 = Cells(Rows().Count, 1).End(xlUp).Row
(1は1列目、B列なら2にすればOK)
mygoonickname様
何度も回答頂きありがとうございます。
Worksheets(I)の最終行は、教えて頂いた通り、Cells(Rows().Count, 1).End(xlUp).Rowで取得出来るかと思うのですが、
質問内の
Range("A2:M61").Select ←更新されたピボットテーブルの範囲を選択して
Selection.Copy ←コピーして
の部分については、作成したピボットテーブルの範囲を取得するにはどうすればいいのでしょうか?
何度も質問して申し訳ありません。
No.1
- 回答日時:
こんにちは。
提示は、マクロの記録で出てきたコードになるでしょうか?
>下記はマクロの記録で作成した作業の内容になり、この作業をブック内の左から6番目以降のシートで繰り返したいと思っております。
例えば下記の様な書き方で、左から6番目以降全てのシートを処理可能です。
Dim I As Long
For I=6 to Worksheets.Count
Worksheets(I).Select
処理
Next I
たぶん、できると思いますが、ピボットテーブルは、少し難易度が高い様な
気がしますが。
Excel VBA マクロでピボットテーブルを作ってみよう
https://www.kurumico.com/excel-vba-pivottable-1/ …
VBA やりたい事 など、検索すれば、記事が色々と出てくると思います
ので、先ずはご自分でチャレンジされては?と思います。
私のような初心者には難易度が高いですよね。
初心者の私がこのような質問をしてしまい申し訳ありません。
繰り返しについては、教えて頂いた書き方でやってみます。
教えて頂きありがとうございます。
ただ、データの選択範囲がシート毎に可変するので、変数を使わないといけないと思うのですが、そのあたりが分からず、もう少し知恵を頂けないか待ってみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) excelVBAについて。 8 2022/12/11 13:47
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのSheet番号って変更でき...
-
excel vbaのエラー原因について
-
Count Ifのセルの範囲指定に変...
-
マクロの「SaveAs」でエラーが...
-
【Excel VBA】自動メール送信の...
-
VBA Userformで一部別シートに...
-
Excelのシート別でのセルのリン...
-
祝日を除いた月曜から土曜まで...
-
【マクロ】実行時エラー '424':...
-
Excel UserForm の表示位置
-
選択されたブックを開いてデー...
-
「段」と「行」の違いがよくわ...
-
別シートのデータを参照して値...
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
VBAでの SendKeysの変数指定方法
-
【Excel VBA】一番右端セルまで...
-
エクセルで数字を認識して、行...
-
vba列範囲の拡大について
-
VBAで条件から範囲を指定して色...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのSheet番号って変更でき...
-
マクロの「SaveAs」でエラーが...
-
マクロ実行後に別シートの残像...
-
VBA 空白行に転記する
-
VBA別シートの最終行の次行へ転...
-
Count Ifのセルの範囲指定に変...
-
【VBA】データを各シートに自動...
-
Changeイベントで複数セルへの...
-
VBAで変数の数/変数名を動的に...
-
VBA 別ブックからの転記の高速...
-
Excel VBA オートフィルターで...
-
【VBA】特定の条件でセルをコピー
-
VBAでEXCELから固定長...
-
Excel2013で切り取り禁止
-
Unionでの他のシートの参照につ...
-
楽天RSSからエクセルVBAを使用...
-
100万件越えCSVから条件を満た...
-
ExcelのVBマクロを、バックグラ...
-
VBA 実行時エラー1004 rangeメ...
-
同じ作業(データコピー・貼付...
おすすめ情報