• ベストアンサー

エクセルVBA:定義された名前を取得

例えば、A1:A5の範囲に「範囲1」という名前が定義されているとします。A1のセルを選択したときに、「範囲1」を返すVBAはどのようなものになりますか。 A1を選んだ時、A1と重複する値を「範囲1」全体から消すようなときに使います。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.1

以下のような感じでいかがですか Sub TEST() Dim mName As Variant For Each mName In ActiveWorkbook.Names If Not Intersect(Range(mName.RefersTo), Selection) Is Nothing Then MsgBox mName.Name Range(mName).Select Exit For End If Next End Sub

ticktak
質問者

お礼

早速の回答ありがとうございます。 大きなヒントになりそうなのですが、今取り組んでいるシートに組み込むと「アプリケーション定義またはオブジェクト定義のエラーです」がでますが、新規シートでやるとうまくいきます。何がいけないのでしょうか。

Powered by GRATICA

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.2

> 今取り組んでいるシートに組み込むと「アプリケーション定義またはオブジェクト定義のエラーです」がでます 定義のあるシートとは別のシートで実行したりとか複数のシートで定義があるとそのエラーになりました。 以下に変更して「標準モジュール」で実行してみてください。 選択したセルの値と重複する値を「範囲」全体から消すのも付け足しています。 Sub Test2() Dim mName As Variant Dim mRng As Range, mArea As Range If Selection.Count <> 1 Then Exit Sub End If For Each mName In ActiveWorkbook.Names If ActiveSheet.Name = Range(mName).Parent.Name Then If Not Intersect(Range(mName.RefersTo), Selection) Is Nothing Then Set mArea = Range(mName) Exit For End If End If Next If Not mArea Is Nothing Then For Each mRng In mArea If mRng.Address <> Selection.Address And Selection.Value = mRng.Value Then mRng.ClearContents End If Next Set mArea = Nothing End If End Sub

ticktak
質問者

お礼

早速修正と重複を消すものまで考えていただき大変ありがとうございます。自分が取り組んでいるVBAに組み込んで活用したいと思います。

関連するQ&A