
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
ワークシート コードなので、インストールが非常に簡単で、自動的に使用できます。
- Excelウィンドウの下部にあるタブ名を右クリックします
- 「コードの表示」を選択すると、VBEウィンドウが表示されます。
- 内容を貼り付けてVBEウィンドウを閉じます
不安な点があれば、まずはトライアルシートで試してみてください。
ワークブックを保存すると、マクロも一緒に保存されます。2003 以降のバージョンの Excel を使用している場合は、ファイルを .xlsx ではなく .xlsm として保存する必要があります。
マクロを削除するには:
- 上記のようにVBEウィンドウを表示します
- コードを消去する
- 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