- ベストアンサー
VBAでシートをコピーする方法
- VBAでシートをコピーする方法について質問します。Bファイルには指定のシートが挿入されているのですが、Aファイルのシート1がコピーされない問題が発生しています。どこに問題があるのかわかりません。解決策を教えてください。
- VBAを使用してAファイルのシート1をBファイルにコピーしようとしていますが、うまくいきません。Bファイルには他のシートは挿入されていますが、シート1だけがコピーされません。どのようにすれば解決できるでしょうか?
- VBAのコードでAファイルのシート1をBファイルにコピーしようとしていますが、うまくいきません。シートが挿入されるのはBファイルですが、シート1がコピーされません。どの部分が間違っているのか教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
長々とコードを張り付けて、その目的、正常稼働のイメージも告げずに "すぐに回答を!" ってのはどうなんだろか。 以下、勝手に想像した仕様に基づいた検証。 仕様: A.xslm ファイルの全シートを B.xlsx にコピーする。 もし A.xlsm ファイルのシートと同じ名前のシートが B.xlsx に存在したら、先に B.xlsx 側の同名シートを削除してからコピーする。 サンプル: 以下の 2つのブックを使って検証を行った。 A.xlsm "Sheet1" "シート1" "シート2" "シート3" "ほげ" の 4つのシートを持ち、各シートのセルにはブック名とシート名を記述。 B.xlsx "シートA" "シートB" "シートC" "ほげ" の 4つのシートを持ち、各シートのセルにはブック名とシート名を記述。 検証結果: コードを実行した結果、B.xlsx には A.xlsm からコピーされた "Sheet1" "シート1" "シート2" "シート3" "ほげ" と、最初からあった "シートA" "シートB" シートC" が残り、最初から B.xlsx にあった "ほげ" は削除された。 したがって、「結果、Bファイルにはsheet(仮)が挿入されましたがAファイルのsheet1がコピーされません。」 は再現しなかった。ただし "Sheet (仮)" が何の事なのかは不明。 その他に気になった点: 提示されたコードでは B.xlsx に空のシートを追加して "仮" という名前にする箇所があるが、このシートに対して特に何の処理もせず、あとから削除しているのが不要だと感じた。 For ~ Next のカウントに使っている変数 f と T の宣言がされていない。 変数の使いまわしが多い。 別のブックをコントロールする内容なのにオブジェクト変数 (Workbook型や Worksheet型) を使用せずにブック名やシート名の文字列頼りになっている点で、処理対象を誤る危険性を感じる。 下のコードは洗練されてないが、とりあえず作ってみたもの。 コピー後のシートの並び順が希望と逆になっているが、とりあえず動くと思う。 Sub hoge() Dim destBook As Workbook ' コピー先ブック Dim destSheet As Worksheet ' コピー先ブックのシート Dim srcBook As Workbook ' コピー元ブック Dim srcSheet As Worksheet ' コピー元ブックのシート Dim destPath As Variant, srcPath As Variant ' ブックのパス destPath = Application.GetOpenFilename("Excel ファイル (*.xlsx), *.xls", , "貼り付け先ファイル") If destPath = False Then Exit Sub End If srcPath = Application.GetOpenFilename("Excel ファイル (*.xlsm), *.xls", , "コピー元ファイル") If srcPath = False Then Exit Sub End If Set destBook = Workbooks.Open(destPath) Set srcBook = Workbooks.Open(srcPath) For Each srcSheet In srcBook.Worksheets For Each destSheet In destBook.Worksheets If srcSheet.Name = destSheet.Name Then Application.DisplayAlerts = False destSheet.Delete Application.DisplayAlerts = True Exit For End If Next srcSheet.Copy Before:=destBook.Worksheets(1) Next srcBook.Close SaveChanges:=False End Sub
お礼
回答ありがとうございます。 質問の仕方が悪くすみません。 早々、実行してみます。