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

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

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

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

「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トレーニングのソースです。

このヒント(7880)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。