ティムは、ユーザーがワークシートタブを右クリックし、[コードの表示]を選択してワークシートのVBAコードシートを開くことができることを正しく指摘しています。彼は、セル、列、および行を自動的に操作するコードを記述しています。このコードは、ユーザーが新しいワークシートを追加した場合でも、ブック内のすべてのワークシートで使用できる必要があります。ティムは、VBAを使用して、1つのワークシートのコードをブック内の新しいワークシートに自動的にコピーする方法があるかどうか疑問に思います。

この問題に取り組む方法はいくつかあります。 1つの方法、そしておそらく最も簡単な方法は、ワークシートのコードシートからマクロを削除し、ThisWorkbookモジュールに移動することです。ワークシートのコードシートは、ワークシートのタブを右クリックしたときに表示されるものです。そのシートのコードは、ワークシートで発生するイベントを処理することを目的としており、そのワークシートでのみ発生します。コードをThisWorkbookモジュールに移動しても、イベントは引き続き処理できますが、それらのイベントはワークブック内のすべてのワークシートに適用されます。

たとえば、ワークシートタブを右クリックしてコードウィンドウを見ると、最初はWorksheet_SelectionChangeイベントで作業しています。このコードをThisWorkbookモジュールに移動する場合は、Workbook_SheetSelectionChangeイベント内に配置できます。

コードのこのような「レベル変更」が何らかの理由で機能しない場合、別のアプローチは、ワークブック内にテンプレートワークシートを作成することです。

「MyMaster」などの名前を付け、新しく作成したワークシートに追加するすべてのコードが含まれていることを確認します。必要に応じて、このワークシートを非表示にすることもできるため、ユーザーの気を散らすことはありません。次に、次のマクロをThisWorkbookモジュールに配置します。

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim tmpName As String

tmpName = Sh.Name     Sheets("MyMaster").Copy Before:=Sheets(Sh.Name)

Application.DisplayAlerts = False     Sheets(Sh.Name).Delete     Application.DisplayAlerts = True     Sheets("MyMaster (2)").Name = tmpName End Sub

このコードは、新しいワークシートがブックに追加されるたびにトリガーされます。新しく追加されたワークシートの名前(「Sheet4」のようなものになります)を調べ、その名前を一時変数に保存します。

次に、コードはMyMasterワークシートをワークブックにコピーし(ワークシート内のマクロもコピーします)、最初に作成されたワークシートを削除し、新しいMyMasterコピーの名前を元のワークシートと同じ名前に変更します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(7884)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。