名前付き範囲の名前を動的にすることはできますか?

名前付き範囲の名前を動的にすることはできますか?

Excel の名前付き範囲の名前を動的にしたいです (範囲自体ではなく)。参照セルの内容が変更されると名前も変更されるように、数式または参照セルを使用して範囲名を定義できるかどうか、またその方法を知りたいです。

例えば列にリストを書き込み、列の上部にリストのタイトルを次のように記述します。

     A
1 *Colours*
2  Red
3  Yellow
4  Blue

そして、リストのセル範囲 (A2:A4) にリストのタイトル (A1) にちなんで名前を付けます。リストのタイトルが変更されると、範囲名が自動的に変更されるようにします (つまり、範囲名 = A1 で、A1 の内容が変更されると名前が変更されます)。

追加情報私の具体的なケースについて: 名前付き範囲を使用して、他のユーザーが使用する Excel スプレッドシートに、従属的で動的なドロップダウン リストをいくつか作成しています。ユーザーが既存のリスト (サポート リスト ワークシート内) に項目を追加すると、ドロップダウン リスト (メイン テーブル ワークシート内) が自動的に変更されるように設定されています。ただし、次の課題は、ユーザーが新しいリストを簡単に追加できるようにすることです。計画としては、(サポート リスト ワークシート内の) 予備のリスト列を既に設定しておき、入力すると自動的にドロップダウン リスト (メイン テーブル ワークシート内) に変わるようにすることです。すべてのデータ検証式 (名前付き範囲を使用) は、メイン テーブル ワークシートにドロップダウン リストを作成するように設定されていますが、ユーザーが新しいリスト タイトルを入力すると、リスト範囲に自動的に名前を付けるという手順が欠けています。メイン テーブルに表示されるドロップダウン リストはユーザーの以前の選択に依存するため、データ検証式では名前付き範囲を使用する必要があります。

何かヒントがあれば、とてもありがたいです!

答え1

これは、A1 の値が数式によって設定されるのではなく、入力されることを前提としています。ワークシート コード領域に次のイベント マクロを入力します。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim str As String
    str = Range("A1").Text
    If Intersect(Range("A1"), Target) Is Nothing Then Exit Sub
    Dim n As Name
    For Each n In ActiveWorkbook.Names
        If n.RefersTo = "=Sheet1!$A$2:$A$4" Then
            n.Delete
        End If
    Next n
    ActiveWorkbook.Names.Add Name:=str, RefersTo:="=Sheet1!$A$2:$A$4"
End Sub

ワークシート コードなので、インストールが非常に簡単で、自動的に使用できます。

  1. Excelウィンドウの下部にあるタブ名を右クリックします
  2. 「コードの表示」を選択すると、VBEウィンドウが表示されます。
  3. 内容を貼り付けてVBEウィンドウを閉じます

不安な点があれば、まずはトライアルシートで試してみてください。

ワークブックを保存すると、マクロも一緒に保存されます。2003 以降のバージョンの Excel を使用している場合は、ファイルを .xlsx ではなく .xlsm として保存する必要があります。

マクロを削除するには:

  1. 上記のようにVBEウィンドウを表示します
  2. コードを消去する
  3. VBEウィンドウを閉じる

マクロ全般の詳細については、以下を参照してください。

http://www.mvps.org/dmcritchie/excel/getstarted.htm

そして

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

イベント マクロ (ワークシート コード) の詳細については、以下を参照してください。

http://www.mvps.org/dmcritchie/excel/event.htm

これを機能させるにはマクロを有効にする必要があります

編集#1:

A1 と B1 を名前として使用するには、次のように置き換えます。

str = Range("A1").Text

と:

str = Range("A1").Text & Range("B1").Text

関連情報