• ベストアンサー

エクセルの名前の定義をマクロ機能(VB)でするにはどうしたらいいですか?

現在、エクセルの理解度チェックテストを作っています。 エクセルの操作で、範囲に名前を定義する機能がありますよね? 例えば、A1~E5の範囲を”商品リスト”という名前に設定してくださいという問題があったとします。 採点機能をマクロ(VB)で作り、ちゃんと名前を定義できていれば○ 定義できていなければ×を表示するというものを作ろうと思っています。 IF群を使って作ろうと思ってるのですが、なかなか上手くできません。 どなたか助けてください>< ちなみに、エクセルのバージョンは2007です。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

ひねった問題ですね。 例 名前 aa  $A$1:$A$5 名前 bb $A$2:$C$4 を定義しました。 Sub test01() Dim nm As Variant For Each nm In Names MsgBox nm.Name MsgBox nm Next End Sub これで名前一覧が順次捉えられるので、「商品リスト」が有るか(出てくるか)どうかIF文で聞いてください。 名前集合を一体で捉えて、それを対象にFind的に一発では聞くことは出来ないと思います。FSOのDictionaryを使うなどは別です。 ーーーーー Sub test02() MsgBox ActiveSheet.Range("aa").Address MsgBox ActiveSheet.Range("bb").Address End Sub これで名前aaがあるとして、そのアドレス番地が、絶対番地で、文字列で捉えられます。それで商品リストの場合、$A$1:$E$5と一致するか チェックして一致すれば正解。 ーー もし必要なら MsgBox ActiveSheet.Range("aa").Address(False, False) とすれば A1:A5といった文字列で範囲が返ります。

tbmh_aaa
質問者

補足

まだうまくいきません>< 一応やろうとしてることというのは、 IF (名前が定義されているかどうかの記述) Then Range("H16") = "○" Else Range("H16") = "×" End If こんな感じで、名前の定義が成されていれば○違ったら×をエクセルの セルH16に表示する式を作りたいと思っています。 何とかIFの条件式のところに上手く記述できないでしょうか?

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

2003ですが… >エクセルの名前の定義をマクロ機能(VB)でするにはどうしたらいいですか? そのまま、自動記録にとってみれば、 Range("A1:E5").Select ActiveWorkbook.Names.Add Name:="商品リスト", RefersToR1C1:="=Sheet1!R1C1:R5C5" みたいになります。 でも、手動操作の結果をチェックしたいのであると↑では役に立たないのではないでしょうか? 以下、参考までに。(VBAのヘルプからのコピペです) こちらの方が、チェックには役に立つと思いますが?? ------- 以下引用 ------ 次の使用例は、新しいワークシートを作成し、作業中のブックに含まれているすべての名前と、名前の参照先を示す数式のリストを挿入します。数式は A1 形式で、コード記述時の言語で表示されます。 Set newSheet = Worksheets.Add i = 1 For Each nm In ActiveWorkbook.Names newSheet.Cells(i, 1).Value = nm.Name newSheet.Cells(i, 2).Value = "'" & nm.RefersTo i = i + 1 Next