2018年5月28日シートWorksheet.Move、Chart.Move、DialogSheet.Move、Worksheets.Moveメソッドシートの移動を行うにはMoveメソッドを使います。移動を行うとその移動先でそのシートがアクティブになります。同じブックだけでなく別のブックや新規ブックに移動させることも可能です。その際も別ブックや新規ブックがアクティブになり、移動したシートもアクティブになります。別ブックに移動させる場合はそのブックが開いていなければなりません。Array関数を使うと複数のシートを一度にまとめて移動させることが可能です。Worksheet])BeforeとAfterの型は実際には未定義によるVariant型ですが、わかりやすいようにWorksheet型としています。親オブジェクトとしてWorksheetオブジェクト、Chartオブジェクト、DialogSheetオブジェクト、Worksheetsコレクションのいずれかを指定します。グラフシート用のChartオブジェクトやダイアログシート用のDialogSheetオブジェクトを使うことはまずないと思います。Worksheetsコレクションを指定する場合にワークシートしかない場合は全シートを移動させることになるためエラーになります。Worksheetsコレクション対象外であるグラフシート等がある場合はエラーになりません。Beforeでシートを指定すると、その左に対象シートが移動します。BeforeとAfterを同時に設定することは出来ません。設定した場合はエラーになります。Afterでシートを指定すると、その右に対象シートが移動します。BeforeとAfterを同時に設定することは出来ません。設定した場合はエラーになります。BeforeとAfterの両方を省略した場合は、対象シートを新規ブックに移動します。別ブックにシートを移動する場合に、同じ名前のシートが存在することがあります。その場合はエラーにはならず、移動したシートのシート名が「元のシート名」+「半角スペース」+「(連番)」になります。連番は2から始まります。上の構文には書いていませんが、実はMoveメソッドには以下も存在します。Worksheet])また、上の構文にはありますが、こちらも注意が必要です。Worksheet])SheetsコレクションとWorksheetsコレクションが親オブジェクトになっている構文で、実際に定義として存在します。これらはエラーになります。Sheetsコレクションは全シートが対象になり、Worksheetsコレクションはワークシートが対象になります。ほとんどのブックはワークシートのみで構成されており、マクロシートやグラフシートやダイアログシートはまず無いと思います。そのため、多くの場合はWorksheetsコレクションも全シートが対象になります。その全シートをMoveメソッドで移動させると移動元のブックにはシートが存在しなくなってしまい、移動元のブックにシートが無くなってしまうことからエラーになります。Sheets.Moveの構文は考慮漏れによるバグと思われます。コーディングとしては間違っていないため構文エラーにはならず、以下のようなコードもOKですが全シート移動は無理なため実行時エラーになります。Subサンプルコード新規ブックに移動Moveメソッドの引数を省略しているため、新規ブックにシートを移動します。未保存のBook7というブックにシートを移動させるサンプルです。引数BeforeによりBook7の左から2番目のシートの左に移動します。開いていない別ブックに移動させるサンプルです。開いていないブックにはシートの移動はできないため一度開きます。その後、シートの移動を行います。ブックのOpenメソッドを実行するとアクティブブックが開いたブックに変更されるため、事前にコピー元のアクティブブックとコピー先の開くブックのWorkbookオブジェクトを保持しています。12行目のMoveメソッドでは、コピー元のWorkbookオブジェクトとコピー先のWorkbookオブジェクト+シートを指定しています。Subブックが開いているかどうか不明の場合ブックが開いているかどうか不明な場合は「ブックが開かれているかチェックする」のサンプルコードをご参照ください。ブックが開いているかどうかの分岐の条件文をそのまま使えます。あとはIfとElseの処理以降にシート移動の処理を書くだけです。IsBookOpened関数とGetFileName関数は上記リンク先をご参照ください。複数のシートを一度に移動させる場合はWorksheetsコレクションやSheetsコレクションの引数にArray関数で移動したいシートを全て指定して、Moveメソッドを行います。Array関数の引数にはシート名を指定します。Excel作業をVBAで効率化シェアお問合わせTOPへ。