アプリ版:「スタンプのみでお礼する」機能のリリースについて

原因がどうしてもわからず質問させていただきます。

シートのあるセルの名前定義をしているのですが、その名前定義している部分でこまっています。
名前定義は確実にしてあるのですが
ActiveWorkbook.Names("名前定義名称").RefersToRange.Address
で取得すると結果は得られます。
しかし、
ActiveWorkbook.Worksheets("シート名称").Names("名前定義名称").RefersToRange.Address
とすると取得ができません。

よく見ると、結果が得られるほうのNamesプロパティにはCountが0ではないですが、ActiveSheetで見るとCountが0になっているんのです。

どうしてこうなってしまうのかわからず、お分かりになられる方がいましたら教えていほしいです。

A 回答 (2件)

メニューの「挿入」-「名前」-「定義」


名前の定義の参照範囲を見て貰えば解ると思いますが、必ずシート名が入っています

例えば
Book名が"abc.xls"の、シート名が"Sheet1"のセル"A1:B5"に"あいう"と言う名前を定義した時、それぞれを実行してみると

ActiveWorkbook.Names("あいう").RefersToRange.Address
の場合は
ActiveWorkbook="abc.xls"
Names("あいう")="Sheet1!A1:B5"
RefersToRange.Address=Namesで定義されてい名称の参照先をAddressで返す
即ち、"abc.xls"の"Sheet1!A1:B5"のAddressを返す
で、"A1:B5"が帰ってきます

ActiveWorkbook.Worksheets("Sheet1").Names("あいう").RefersToRange.Address
の場合は
"abc.xls"の"Sheet1"の"Sheet1!A1:B5"のAddressを返すに
なってしまいエラーとなります

こんな説明で解るかな?
    • good
    • 0

名前定義には2種類ありますよ


Book全体で定義する場合と各シートで定義する場合

Excelのメニューの 挿入 > 名前 > 定義 を実行した場合は
Book全体で使う名前 つまり WorkbookオブジェクトのNamesコレクションに登録されます

VBAコードで
ActiveSheet.Names.Add などで追加すると シートにおいてのみ有効な名前の定義が出来ます

Sub Test()
  ActiveSheet.Names.Add "BBB", "=$B1:$B10"
End Sub
などを実行したあとで 挿入 > 名前 > 定義 を実行して見ましょう
BBBがリストアップされていてその右側に『Sheet1』などのシート名があると思います

単純に他のセルを選択して 挿入 > 名前 > 定義 > 名前の入力 > OK を実行した際には リストアップされた名前に右側には何も無いと思います
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!