![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
ブック内にA,Bと2つのシートがあり、ボタンをクリックすると特定の回数、シートAの情報が新規作成されたシートCにコピーされ、シートCとシートBの2シートが別ファイルとして保存される。という動きを繰り返したいのですが、
新規生成されるシートCだけを別ファイルで保存することまでは出来たのですが、シートBが追加できず困っています。
Sub 分割()
Dim cpy As Range
Dim pst As Range
Dim path 'ファイルパス
path = ActiveWorkbook.path
Dim CopyWorkBook
Dim CopyWorkSheet1
Dim CopyWorkSheet2
Dim Position(2,2) 'ここにはシートCを作成する際の情報が入っている。
'新規シートCを作成してシートAからデータをコピー。
For i = 1 To 2 Step 1 'とりあえず2シート作成する。
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = Position(i, 2)
'まずは、タイトル欄をコピー
Worksheets("Sheet1").Activate
Set cpy = Worksheets("Sheet1").Range("A2:Q2")
Worksheets(Position(i, 2)).Activate
Set pst = Worksheets(Position(i, 2)).Range("A2:Q2")
pst.Value = cpy.Value '貼り付け
End With
'シートを別名で保存
Set CopyWorkSheet1 = Worksheets(Position(i, 2))
Set CopyWorkSheet2 = Worksheets("シートB")
CopyWorkSheet1.Copy
' CopyWorkSheet2.Copy ←これでシートBもコピーされるかと思いましたが、シートBが上書きされてしまう。
Set CopyWorkBook = ActiveWorkbook
ActiveWorkbook.SaveAs path & "\" & Position(i, 2) & "xls", xlWorkbookNormal
CopyWorkBook.Close
Next
End Sub
質問は2つあります。
(1)シートBも新規作成されたシートCと一緒に別ブックに保存したいのですが、どうすればいいでしょうか?
(2)シートのコピーの動きがイマイチよくわかりません。
今の私の環境だと(ネットで調べた書き方ですが)、シートを別ブックにコピーする際、
Set CopyWorkSheet1 = Worksheets("シートA")
CopyWorkSheet1.Copy
Set CopyWorkBook = ActiveWorkbook
となっていますが、Setで、コピー元のシートAの情報をCopyWorkSheet1にコピーしたあと、
CopyWorkSheeet1.Copy となっていますが、この意味がわかりません。
なぜ更にコピーしているのでしょうか?またこれで、別ブックにシートが追加されてる理由もわかりません。
また、この処理の後に、 Set CopyWorkBook = ActiveWorkbook と、ブックの情報をコピーしていますが、普通に考えると最初にブックの情報をコピーして別名のブックを生成しておく必要があるように思えるのですが、後でよい理由も分かりませんし、これだと、Activeのワークブックのシート情報も全部コピーされてしまう気がするのですが。。。
この辺が全然分かっていないので、解説頂けるか参考サイトを教えて頂けないでしょうか。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
何をされたいのかちょっとよく分からないので(^^;、
余計混乱してしまうかもしれませんが、以下の視点を持つと、理解が進むと思います。
・Setでいちいちオブジェクトに代入しなくてもコピペ(というか値を書き写す)できます。
・通常のマウス操作であるコピーしてペーストするというのを忘れて下さい。
■セルのコピー
左辺の値を右辺にすると書きます。
Range("○○").value = Range("●●").value
(今アクティブなシートの)セル○○の値をセル●●の値にします。
シートを指定する場合はRangeの前にSheets("●●").のように。
ブックを指定する場合はSheetsの前にWorkbooks("●●").のように書きます。
■シートのコピー
これはそういう命令です。
Sheets("○○").copy のあとにBeforeかAfterと書いて、
どのシートの前(後ろ)にコピーするか指定します。
■参考
Sub sheet_copy1()
Sheets("○○").copy After:=Sheets("○○")
End Sub
↑シート名○○を、シート名○○の後ろにコピーし名前は自動付加します。
Sub sheet_copy2()
Sheets("Sheet1").Range("A1").Value = Sheets("Sheet2").Range("A1").Value
End Sub
↑シート名Sheet2のA1セルの値を、シート名Sheet1のA1セルにコピペします。
Sub sheet_copy3()
With Workbooks.Open("1.xlsm")
Workbooks("2.xlsm").Sheets("sheet1").Copy after:=.Sheets("sheet1")
End With
End Sub
↑ブック名2.xlsmシート名Sheet1を、ブック名1.xlsmシート名Sheet1の後ろにコピーします。
WithがSetの役割をしています。
・Activateする、Setして代入する、と書かれている行はほぼ全て不要です。
・Activeなシートをどうこうする
というのもワケがわからなくなるので、
直接ブック名やシート名を指定するとうまく動かせる気がします。
細かくご説明いただき有難うございました。
非常に勉強になりました。
最終的に目的の動作を構築することができました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 別ブックからシートのコピー 3 2022/04/01 20:07
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
特定のシートの削除を禁止した...
-
シート番号からシート名を取得する
-
EXCEL:同じセルへどんどん足し...
-
シートの保護のあとセルの列、...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルでファイルを開いたと...
-
複数シートの色付きセルがある...
-
エクセル 計算式も入っていない...
-
前の(左隣の)シートを連続参...
-
エクセルで前シートを参照して...
-
エクセルで前のシートを連続参...
-
エクセルのシート名をリスト化...
-
VBAでシートコピー後、シート名...
-
シートを追加・名前を次月に変...
-
エクセルで毎回1枚目のシートを...
-
エクセルVBA 串刺し計算の際、...
-
シート名ではなく、相対位置で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
エクセルで前シートを参照して...
-
エクセルでファイルを開いたと...
-
エクセル 計算式も入っていない...
-
エクセルで前のシートを連続参...
-
Accessのスプレッドシートエク...
-
特定のシートの削除を禁止した...
-
EXCEL:同じセルへどんどん足し...
-
エクセルVBAでパスの¥マークに...
-
シートの保護のあとセルの列、...
-
Excel、同じフォルダ内のExcel...
-
エクセルのシート名をリスト化...
-
シート番号からシート名を取得する
-
Excelのシートを、まとめて表示...
-
EXCELで1ヶ月分の連続した日付...
-
excelでシート毎の最終更新日を...
-
エクセルで毎回1枚目のシートを...
おすすめ情報