アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記はマクロの記録で作成した作業の内容になり、この作業をブック内の左から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 ←行を削除

このようなことは可能でしょうか?
ご教授いただければ幸いです。
よろしくお願いいたします。

A 回答 (5件)

こんにちは。



提示は、マクロの記録で出てきたコードになるでしょうか?

>下記はマクロの記録で作成した作業の内容になり、この作業をブック内の左から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 やりたい事 など、検索すれば、記事が色々と出てくると思います
ので、先ずはご自分でチャレンジされては?と思います。
    • good
    • 0
この回答へのお礼

私のような初心者には難易度が高いですよね。
初心者の私がこのような質問をしてしまい申し訳ありません。
繰り返しについては、教えて頂いた書き方でやってみます。
教えて頂きありがとうございます。
ただ、データの選択範囲がシート毎に可変するので、変数を使わないといけないと思うのですが、そのあたりが分からず、もう少し知恵を頂けないか待ってみたいと思います。

お礼日時:2022/01/27 15:51

No.1の者です。



>初心者の私がこのような質問をしてしまい申し訳ありません。
→いえ、そんな事はありません。
ただ、質問内容を絞って投稿された方が良いかと思います。
場合によっては、この様なマクロを作ってと、作成依頼の様な方もいます
ので、その様な方は、私は個人的にお断りしていますので。

>データの選択範囲がシート毎に可変するので、
A列の末尾の行を取得する場合。
変数 = Cells(Rows().Count, 1).End(xlUp).Row
(1は1列目、B列なら2にすればOK)
    • good
    • 0
この回答へのお礼

mygoonickname様
何度も回答頂きありがとうございます。

Worksheets(I)の最終行は、教えて頂いた通り、Cells(Rows().Count, 1).End(xlUp).Rowで取得出来るかと思うのですが、

質問内の
Range("A2:M61").Select ←更新されたピボットテーブルの範囲を選択して
Selection.Copy ←コピーして

の部分については、作成したピボットテーブルの範囲を取得するにはどうすればいいのでしょうか?

何度も質問して申し訳ありません。

お礼日時:2022/01/27 16:25

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
    • good
    • 0
この回答へのお礼

mygoonickname様
本当に何度も回答頂きありがとうございます。
もし良ければ、もう1点だけ教えて頂けると幸いです。

質問内の最後のあたりの、
Rows("62:92").Select ←先ほど貼り付けたデータの次の行から最終行を選択
Selection.Delete Shift:=xlUp ←行を削除

の部分についてですが、
ピボットテーブルの範囲をコピーして、Worksheets(I)に貼り付けた後、
貼り付けた範囲以降最終行までの行を削除する場合、”92”の部分には最終行の変数を代入するとして、”62”はどのように取得すればいいのでしょうか?

お礼日時:2022/01/27 16:50

>”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

あくまでも、コードを見た上での推測ですが。
    • good
    • 0
この回答へのお礼

mygoonickname様

面倒な内容にお付き合い頂きありがとうございます。
ご指摘の通り、Rows("62:92")は貼り付け前のデータの残りなのですが、N列以降にデータがあり、それは残しておきたく、残りの部分の行のみ削除出来ればと思っているのですが難しいでしょうか?

お礼日時:2022/01/27 17:18

>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
    • good
    • 0
この回答へのお礼

mygoonickname様

丁寧に教えていただき本当にありがとうございます。
貼り付けたデータが、元データより行が多い時はおそらく無いと思います。
教えて頂いた内容をもとに自分でやってみたいと思います。
本当にありがとうございました。

お礼日時:2022/01/27 18:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!