ブック内に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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
excelでシート毎の最終更新日を...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルでファイルを開いたと...
-
Accessのスプレッドシートエク...
-
特定のシートの削除を禁止した...
-
エクセルで前のシートを連続参...
-
シートの保護のあとセルの列、...
-
エクセルVBAでパスの¥マークに...
-
エクセルで複数設定したハイパーリンク先...
-
Excelのシートを、まとめて表示...
-
エクセルのシート名をリスト化...
-
エクセル 計算式も入っていない...
-
Excelで同じシートのコピーを一...
-
別シート参照のセルをシート毎...
-
Excel、同じフォルダ内のExcel...
-
前の(左隣の)シートを連続参...
-
エクセル 別シートのアクティ...
-
複数シートの色付きセルがある...
-
EXCELで1ヶ月分の連続した日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
Excelのシートを、まとめて表示...
-
エクセルVBAでパスの¥マークに...
-
エクセルでファイルを開いたと...
-
excelでシート毎の最終更新日を...
-
別シート参照のセルをシート毎...
-
EXCEL:同じセルへどんどん足し...
-
前の(左隣の)シートを連続参...
-
エクセルで前シートを参照して...
-
Accessのスプレッドシートエク...
-
特定のシートの削除を禁止した...
-
シートの保護のあとセルの列、...
-
エクセルのシート名をリスト化...
-
VBAでシートコピー後、シート名...
-
EXCELで同一フォーマットのシー...
-
複数シートの特定の位置に連番...
-
エクセルで複数設定したハイパーリンク先...
-
エクセルで前のシートを連続参...
-
シートを追加・名前を次月に変...
おすすめ情報