質問: excel 名前の定義 vba参照の方法 excelの名前の定義を、vbaから参照する方法を教えていただきたいのですが 名前を定義する シートa 名前:test 範囲:シートa シートb 名前:test 範囲:シートb シートc 名前:pass 範囲:ブック それぞれをvbaから参照する場合 range("test").value: シートa内のvba range("pass").value では、参照できず。 worksheets("シートa").range("test").value worksheets("シートc").range("pass").value にて、参照できました。 明示的なシート名入力が必要なのでしょうか? よろしくお願いいたします。
回答: おはようございます。 シートモジュールにマクロを記載しているのが,悪さの直接の原因です。 シートモジュールから修飾無しにrangeを参照した場合,必ず当該シートのrangeを呼びます。これに伴い,ご質問のマクロはいずれも当該シートのシートレベルの名前を参照するため,名前定義されているシート以外のシートからでは失敗します。 理由があってシートモジュールを用いているなら,必ずシートを指定して名前を参照します。 標準モジュールにマクロを書いておけば,アクティブシートに名前があればそちらを優先し,無ければブックレベルの名前が参照されます。