VBAでエクセルのシートを追加する際に、非表示シートを含む場合のシート順の問題とその解決方法

Excel

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を使用してエクセルにシートを追加する際、非表示シートがある場合、シート順が予想と異なることがあります。この問題を解決するためには、シートのインデックスを正確に把握し、非表示シートを適切に扱うことが重要です。上記のコードを参考に、シート順を統一する方法を試してみてください。

コメント

タイトルとURLをコピーしました