VBAでエクセルのシートを追加する際に、非表示のシートが含まれている場合、シートの順番が予想と異なることがあります。この問題について、特に非表示シートを含むブックで、シートを追加した際に発生するシート順の問題について説明します。
1. VBAでシートを追加する際の基本的なコード
まず、シートを追加する基本的なVBAのコードを紹介します。シートを最後尾に追加するためには、以下のコードを使用します。
Worksheets.Add After:=Worksheets(Worksheets.Count)
これで、現在のシートの最後尾に新しいシートが追加されます。しかし、非表示シートがある場合、意図した位置にシートが追加されないことがあります。
2. 非表示シートが影響を与える原因
VBAでシートを追加する際、非表示のシートが影響を与える原因は、シートのインデックスが非表示シートも含んでカウントされるためです。このため、実際には非表示シートが「最後尾」ではなく、1つ手前に追加されることがあります。
たとえば、Worksheets(1).Copy After:=Worksheets(Worksheets.Count)のコードを使うと、非表示シートのインデックスが影響し、シートのコピーが予期せぬ位置に追加される場合があります。
3. 非表示シートを含めたシート順を統一する方法
非表示シートを含むシートの順番を統一するためには、非表示シートを無視してシートを追加する方法を考慮する必要があります。これを解決するための方法として、次のようにすることができます。
Dim lastSheet As WorksheetSet lastSheet = Worksheets(Worksheets.Count)If lastSheet.Visible = xlSheetHidden Then Set lastSheet = Worksheets(Worksheets.Count - 1)End IfWorksheets.Add After:=lastSheet
このコードは、最後尾のシートが非表示であれば、その1つ前のシートを最後尾として扱い、新しいシートを追加します。これにより、非表示シートが影響を与えないようになります。
4. 最後に
VBAを使用してエクセルにシートを追加する際、非表示シートがある場合、シート順が予想と異なることがあります。この問題を解決するためには、シートのインデックスを正確に把握し、非表示シートを適切に扱うことが重要です。上記のコードを参考に、シート順を統一する方法を試してみてください。


コメント