質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

2675閲覧

VBA ファイルのシートをコピー新しいブックとして作成。その後複製したいです

momo2134

総合スコア6

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2020/08/24 09:47

編集2020/08/24 23:55

前提・実現したいこと

ファイル内の2シートをコピーして新しいブックとして保存し、
その後作成したファイルを複製するというマクロを作成したいです。
しかし私が作成したコードだとファイルを複製する箇所でエラーになり、原因がわからずにいます。
解決のために知恵をお貸しください。

【作成したマクロの概要】
元ファイルの2シートをAシート、Bシート
新ファイルの2シートをA'シート、B'シートと記載します。

① 元ファイルのAシート・Bシートをコピー
② ①を「テンプレート.xlsx」という名前をつけて、元ファイルと同じフォルダに保存
③ ②で作成したファイルのB'シートのデータがある範囲をコピー
④ ③でコピーしたセルをB'シートのA1セルに値で貼り付け
⑤ テンプレートファイルを上書き保存
⑥ テンプレートファイルを、ファイル名を指定して同じフォルダに複製

【その他質問】
Bシートは、元ファイルのCシートを参照しています。
そしてAシートはBシートを参照しています。
(Cシート←(参照)←Bシート←(参照)←Aシート)
AシートとBシートを分けて、テンプレートファイルにコピーしても、
A'シートの参照がB'シートになる方法はあるのでしょうか?
(BシートをB'シートにコピーしてから値で貼り付けするのではなく、
BシートからB'シートに直接値で貼り付けしたいのですが、
そうするとA'シートの参照先が、元ファイルのBシートになってしまいます。)

発生している問題・エラーメッセージ

下記コードの★の箇所で、「アプリケーション定義またはオブジェクト定義のエラーです」となります。 その後の処理でもエラーにある可能性はありますが、まだ確認はできておりません。 →解決しました 下記コードの★の箇所で「オブジェクトが必要です」となります。

該当のソースコード

VBA

1 2Option Explicit 3 4Dim mFSO As FileSystemObject 5 6Sub シート分割複製() 7 8 Dim myPath, folderPath As String 9 Dim newBook As Workbook 10 Dim rng As Range 11 12 Set mFSO = New FileSystemObject 13 myPath = ThisWorkbook.Path 14 folderPath = mFSO.GetFolder(myPath) 15 16 'Aシート、Bシートをコピー 17 Worksheets(Array("Aシート", "Bシート")).Copy 18 '新しいブックとして保存 19 ActiveWorkbook.SaveAs Filename:=folderPath & "\テンプレート" & Format(Now(), "yyyymmdd"), _ 20 FileFormat:=xlOpenXMLWorkbook 21 Set newBook = ActiveWorkbook 22 23 'B'シートのデータ範囲をコピー '~~/★ここでエラーになります~~ →解決しました 24 With newBook.Worksheets("Bシート") 25 Set rng = .Range(.Cells(1, 1), _ 26 Cells(.Cells(Rows.Count, 2).End(xlUp).Row, _ 27 .Cells(21, Columns.Count).End(xlToLeft).Column)) 28 'B'シートは複数テーブルがあり「.CurrentRegion」では正しくデータを取得できないため、 29  '上記のようにセル範囲を取得しています 30 31 rng.Copy 32 'A1セルに値で貼り付け 33 .Range("A1").PasteSpecial Paste:=xlPasteValues 34 End With 35 36 Application.CutCopyMode = False 37 38 newBook.Save 39 newBook.Close 40 41 'テンプレートファイルを同じフォルダに複製 '/★ここでエラーになります 42 FileCopy newBook, "folderPath" & "AAAファイル" & Format(Now(), "yyyymmdd") & ".xlsx""" 43 FileCopy newBook, "folderPath" & "BBBファイル" & Format(Now(), "yyyymmdd") & ".xlsx""" 44 FileCopy newBook, "folderPath" & "CCCファイル" & Format(Now(), "yyyymmdd") & ".xlsx""" 45 FileCopy newBook, "folderPath" & "DDDファイル" & Format(Now(), "yyyymmdd") & ".xlsx""" 46 47End Sub 48

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/08/24 09:58

・Excelのバージョンは何ですか? ・Excel2013で質問のコードを試したところ「Sub シート分割・複製()」で”不正な文字です”とのコンパイルエラーが出ますが、そちらでは出ませんでしたか?
momo2134

2020/08/24 23:40

バージョンはO365 MSO(32ビット)です。 ご指摘の箇所に関して、ご質問させていただくにあたり変更させていただいた箇所で、誤りがあったようです。申し訳ございませんでした。
guest

回答2

0

追加でさせていただいた質問は、下記コードで解決しました。
ありがとうございました。

VBA

1 FileCopy folderPath & "\テンプレート_" & Format(Now(), "yyyymmdd") & ".xlsx", _ 2 folderPath & "\AAAファイル_" & Format(Now(), "yyyymmdd") & ".xlsx"

投稿2020/08/25 00:16

momo2134

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

VBA

1Set rng = .Range(.Cells(1, 1), _ 2 Cells(.Cells(Rows.Count, 2).End(xlUp).Row, _ 3 .Cells(21, Columns.Count).End(xlToLeft).Column))

VBA

1Set rng = .Range(.Cells(1, 1), _ 2 .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, _ 3 .Cells(21, .Columns.Count).End(xlToLeft).Column))

に変更したら質問のエラーは無くなりました。

投稿2020/08/24 10:07

meg_

総合スコア10579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momo2134

2020/08/24 23:51

ご回答いただきありがとうございました。 いただいたコードに修正したところ、質問させていただいたエラーは解消しました。 しかし、テンプレートファイルを複製する箇所で再度エラーになってしまいました。 FileCopy newBook, "folderPath" & "AAAファイル" & Format(Now(), "yyyymmdd") & ".xlsx""" 上記箇所で、「オブジェクトが必要です。」のエラーになってしまいます。 テンプレートファイルと同じフォルダに、「AAAファイルyyyymmdd.xlsx」と名前をつけて複製したいのですが、解決方法をご存知でしたら、ご教示いただけませんでしょうか? (質問の内容も更新します)
momo2134

2020/08/25 00:18

追加でさせていただいた質問も解決しました。 ご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問