🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら

Q&A

2回答

2291閲覧

Excel vba フォルダ内にある複数の別ブックにシートをコピーしたいのですが、上手くいきません。

Qoo8123

総合スコア4

0グッド

0クリップ

投稿2019/11/18 06:55

タイトルの通りなのですが、試行錯誤しても中々うまくいきません。
助けてください。

現在の作成途中のコードは以下です。
Sub Sample()
Dim myPath As String
Dim myBook As String
Dim myActiveBook As Workbook
Dim myOpenBook As Workbook

Set myActiveBook = ActiveWorkbook myPath = "C:\Users\swprj\Desktop\test\ myBook = Dir(myPath & "*.xlsx") Do Until myBook = "" Workbooks.Open myPath & myBook Set myOpenBook = ActiveWorkbook myActiveBook.Worksheets(1).Copy After:=myOpenBook.Worksheets(1) Workbooks(myBook).Close SaveChanges:=True myBook = Dir Loop

End Sub

やりたいことは、
現在開いているブックのシートを対象フォルダ内にある全てのブックにコピー(追加)したいです。
よろしくお願いします。

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

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

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

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

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

Lim1213

2019/11/18 08:05

このプログラムはコピー元のエクセルに記載されているのですか? それともまた別のエクセルなのでしょうか。 このプログラムの実行方法も含めて知りたいです。
guest

回答2

0

何がどうダメなのか詳細をお書きください。
先走って回答しますが、アクティブ前提の作りになっているのが原因かもしれません。
以下のように修正してみました。
内容ご確認ください。
但し、動作未検証です。

VBA

1Sub Sample() 2 Dim myPath As String 3 Dim myBook As String 4 Dim myActiveBook As Workbook 5 Dim myOpenBook As Workbook 6 7 Set myActiveBook = ActiveWorkbook 8 myPath = "C:\Users\swprj\Desktop\test\ 9 myBook = Dir(myPath & "*.xlsx") 10 Do Until myBook = "" 11 'Workbooks.Open myPath & myBook 12 Set myOpenBook = Workbooks.Open myPath & myBook 13 'Set myOpenBook = ActiveWorkbook 14 myActiveBook.Worksheets(1).Copy After:=myOpenBook.Worksheets(1) 15 'Workbooks(myBook).Close SaveChanges:=True 16 myOpenBook.Close SaveChanges:=True 17 myBook = Dir 18 19 Loop 20End Sub 21

投稿2019/11/18 07:06

ttyp03

総合スコア17000

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

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

Qoo8123

2019/11/18 07:20

回答ありがとうございます。 修正頂いたコードでは Set myOpenBook = Workbooks.Open myPath & myBook の所が構文エラーですとなってしまいました。 修正前のコードでは、コピー先のブックのシート1がコピー(複製)されてしまう点が問題でした。
ttyp03

2019/11/18 07:34

こうですね。 Set myOpenBook = Workbooks.Open(myPath & myBook)
Qoo8123

2019/11/18 07:42

返答ありがとうございます。 修正をしてやってみたのですが、今度は修正前と同じく、何も作成していないプレーンのブックにはSheet1がもう一つ増え、Sheet1(2)が作成され、他の記入済み(Sheet名も変更済み)ブックには何も追加されていませんでした。 全て開かれてから保存はされているので、一応動いてはいます。
ttyp03

2019/11/18 09:17

手元の環境で試してみましたが、きちんとコピーはできていました。 何か特殊な環境的なものとか、シートが特殊な何かなどの条件はないですか?
Qoo8123

2019/11/18 09:31

了解です。 少し色々試してみます。 また疑問点が見つかったらコメントさせてください。
hentaiman

2019/11/19 01:14

同じ内容の前回の質問のコメントにも書いてますが、エクセルのバージョン含めて書きだせる環境情報全て書いてみてはどうでしょうか? 回答されている内容で動かないならやはり環境依存じゃないかと疑ってしまいます
Qoo8123

2019/11/19 01:35

調べたところExcelは2016でした。 回答ありがとうございます。
ttyp03

2019/11/19 01:54

当方は2013ですが、特別トリッキーなことをやっているわけでもないのでバージョンの違いは気にすることはなくてよさそうです。 シートの構成とかは影響しそうです。
ttyp03

2019/11/19 01:55

本番環境ではなくテスト用にシンプルな環境を作って、まずはそちらで試してみるのもよいですね。
Qoo8123

2019/11/19 02:42

一応プレーンのファイルを2つ(コピー元とコピー先)作って試してみたのですが、 結果は同じでした。なにかExcelの設定に問題があるのでしょうか。。
ttyp03

2019/11/19 02:59

コードは元のファイルのどこに置いていますか?コピー元シートに置くと当然マクロ付きになってしまってダメかと思うので、標準モジュールか別のシートに置く必要はあると思います。
Qoo8123

2019/11/19 03:03

コードは標準モジュールの下に置いています。 マクロ付きになってしまってダメとはどういう事でしょうか?
ttyp03

2019/11/19 03:05

コピー先は"*.xlsx"のファイルなのでマクロが付いていると保存できないか、何か警告が出ると思います。
Qoo8123

2019/11/19 03:05

コピー元またはコピー先がマクロ有効ブックだとだめという事なのでしょうか? 現在は両方ともに有効ブックです。コピー先の方は有効無効試してみましたがダメでした。
Qoo8123

2019/11/19 03:06

あ、コピー先を変えた時はxlsxも変更していました。
ttyp03

2019/11/19 04:03

ん?どういうことでしょうか。 見せてない処理もあるってことですか?
Qoo8123

2019/11/19 04:06

いえ、コピー先をマクロ有効ブックと普通のブックで試してみたことを伝えたかったというだけです。 その際にxlsxをxlsmに書き換えたけど結局処理としては同じで出来ませんでした。 分かりにくくて申し訳ないです。
ttyp03

2019/11/19 04:43

以下の手順でやってもダメですか? 1. 新規にワークブックを作成 2. Sheet1に何か適当に値を入力 3. 標準モジュールに回答のコードをコピペ(追加の修正もお願いします) 4. Sampleを実行 5. Sheet1が各Excelファイルの2シート目にコピーされているはず 基本これだけのはずです。 もしこれでもダメなら、myOpenBook.Closeの行をコメントアウトして処理が終わった状態で各Excelファイルがどのような状態かを確認してみてください。
guest

0

私の環境ではうまく動いているように見えます。
同じシート名がすでにある、ベースとなるパスがそもそも間違っているなど、失敗している原因は凡ミスの可能性がありますね。

投稿2019/11/19 05:51

Yamato.dd

総合スコア48

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問