Kevinは、36のワークシートを含むワークブックを持っています。彼は、そのワークシートのセルにワークシート名を含める必要があります。彼はワークシート名を返すユーザー定義関数を作成しましたが、36のワークシートすべてで同じ名前を返します。つまり、ユーザー定義関数の実行時に表示されるワークシートの名前です。彼は、ユーザー定義関数(UDF)形式で、関数が使用されているシートの名前を常に返すマクロを使用できるかどうか疑問に思います。言い換えると、彼の36ワークシートのワークブックでは、使用されているワークシートに応じて36の異なる結果が返されるはずです。

簡単な答えは「はい」です。方法があります。実際、いくつかの方法があります。そして、興味深いことに、必要がなければマクロや関数を使用する必要はありません。たとえば、ワークシートの任意のセルで機能する通常のワークシート数式を次に示します。

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

この式のCELL関数のインスタンスは、ファイル名とファイルパスを含むワークシートのフルネームを返します。 FIND関数を使用すると、ワークシート名以外のすべてが削除されます。

CELL関数の各インスタンスでセル参照(A1)が使​​用されていることに注意してください。これにより、CELL関数はセル参照を含むワークシートの名前を返すように強制されます。これがないと、数式の各インスタンスで同じ結果(最初のワークシート)が得られます。

また、保存されていない新しいブックで数式を使用すると、数式が有効な結果を返さないことも知っておく必要があります。ブックを保存して、CELL関数が正常に返すことができる名前を実際に付ける必要があります。また、ブックまたはワークシートの名前に右角かっこ( “]”)が含まれている場合も、正しく機能しません。その場合は、このヒントで説明されている他のソリューションの1つを使用することをお勧めします。

ユーザー定義関数を使用したい場合は、次の関数のような単純なものを試すことができます。

Function TabName1() As String     Application.Volatile     TabName1 = ActiveSheet.Name End Function

ただし、この関数は常にアクティブなワークシートの名前を返すため、望ましい結果は得られません。つまり、ブック内の各シートで関数が呼び出されている場合、関数が使用されているシートの名前ではなく、それらの各ワークシートでアクティブなシートの名前が常に返されます。次の関数はより良い結果を提供します:

Function TabName2() As String     Application.Volatile     TabName2 = Application.Caller.Parent.Name End Function

この関数を使用してワークブックの他の場所でワークシート名を参照したい場合は、この関数の方が適しています:

Function TabName3(cell As Range)

TabName3 = cell.Worksheet.Name End Function

このバージョンの関数では、使用する名前のワークシート上のセルへのセル参照(任意のセル参照)を指定する必要があります。

もちろん、ユーザー定義関数を使用したくない場合は、各ワークシートタブの名前を各ワークシートの同じセルに詰め込むマクロを作成するだけで済みます。たとえば、次のマクロは、ブック内の各ワークシートをステップスルーし、各ワークシートの名前をセルA1に配置します。

Sub TabName4()

For J = 1 To ActiveWorkbook.Sheets.Count         Sheets(J).Cells(1, 1).Value = Sheets(J).Name     Next End Sub

このアプローチは動的ではないことに注意してください(ワークシート名を変更したり、新しいワークシートを追加したりするたびに再実行する必要があります)。また、セルA1にあるものはすべて上書きされます。 (ワークシート名を各ワークシートの異なるセルに配置する場合は、Cellsコレクションで使用される値を変更します。)

注:

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

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

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

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

link:/ excel-Getting_the_Name_of_the_Worksheet_Into_a_Cell [ワークシートの名前をセルに取得]