• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vbaについて勉強中です)

VBAでシートをコピーする方法

このQ&Aのポイント
  • VBAでシートをコピーする方法について質問します。Bファイルには指定のシートが挿入されているのですが、Aファイルのシート1がコピーされない問題が発生しています。どこに問題があるのかわかりません。解決策を教えてください。
  • VBAを使用してAファイルのシート1をBファイルにコピーしようとしていますが、うまくいきません。Bファイルには他のシートは挿入されていますが、シート1だけがコピーされません。どのようにすれば解決できるでしょうか?
  • VBAのコードでAファイルのシート1をBファイルにコピーしようとしていますが、うまくいきません。シートが挿入されるのはBファイルですが、シート1がコピーされません。どの部分が間違っているのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • x-1919
  • ベストアンサー率52% (91/173)
回答No.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

taka7110
質問者

お礼

回答ありがとうございます。 質問の仕方が悪くすみません。 早々、実行してみます。

関連するQ&A

専門家に質問してみよう