マクロの中で、非表示のワークシートを作成し、そこで何かの処理をすることがあります。そんなとき、多くの人が冗長な書き方をしていますね。まずは、冗長バージョンから。
Sub Sample1() Dim NowSheet As Worksheet, NewSheet As Worksheet Set NowSheet = ActiveSheet Sheets.Add Set NewSheet = ActiveSheet NewSheet.Visible = False NowSheet.Select NewSheet.Range("A1") = 100 End Sub
思いっきり冗長にしてみましたw
さて、これはどう考えるのかというと。まず、Sheets.Addの「Addメソッド」は、挿入したシートを返します。
ここで重要なことは、Excelは新しいシートを挿入すると必ずそれは、アクティブシートの左側に挿入されるということです。これ重要ですから、よく覚えておいてください。
さて、挿入したあと、次にやりたいのは、この挿入したシートを非表示にすることです。非表示状態のシートをいきなり挿入することはできませんから、挿入する→非表示にする という2ステップが必要です。シートを非表示にするには、シートのVisibleプロパティにFalseを指定します。
いま非表示にしたいシートとは何ですか?さっきの Sheets.Add で挿入したシートでしょ。
で、Sheets.Add が、その挿入したシートを返すんでしたよね。
だから、これでいけます。
シートを非表示にするとどうなりますか?シートを非表示にすると、必ず非表示になったシートの右側にあるシートがアクティブシートになります。よろしいですか?先ほど"覚えておいてください"と言った重要なExcelの挙動がありましたね。そう、新しく挿入したシート(非表示にするシート)は、必ず Sheets.Add を実行する前のアクティブシートから見て左側に挿入されるんです。で、その挿入したシートを非表示にすると、右側のシートがアクティブシートになるんでしょ。それって、Sheets.Add する前のアクティブシートですよね。ですから、シートを挿入して非表示にした後で「前のアクティブシートに戻る」という動作は不要なんです。自動的に戻りますから。当然、前のアクティブシートをオブジェクト変数に入れて覚えておく、なんて必要はありません。
したがって先のコードのうち、非表示のシートを挿入して、前のアクティブシートに戻る部分
Sub Sample1() Dim NowSheet As Worksheet, NewSheet As Worksheet ''---ここから--- Set NowSheet = ActiveSheet Sheets.Add Set NewSheet = ActiveSheet NewSheet.Visible = False NowSheet.Select ''---ここまで--- NewSheet.Range("A1") = 100 End Sub
は、次の1行で済みます。
Sub Sample1() Sheets.Add.Visible = False NewSheet.Range("A1") = 100 End Sub
では、挿入した非表示シートを操作するには、どうしたらいいでしょう。でも、その挿入した非表示シートって、必ずアクティブシートの左側にあるんですよね。だったら、それを表す Previous というプロパティがあります。Previous プロパティは、指定したシートの左側にあるシートを返します。ちなみに右側にあるシートを表すときは Next プロパティを使います。したがって、
Sub Sample1() Sheets.Add.Visible = False ActiveSheet.Previous.Range("A1") = 100 End Sub
となります。
Previous プロパティや Next プロパティに関しては
をご覧ください。