- ベストアンサー
Excel セルの名前を検索できますか?
セルに名前を定義しています。そのセルに書かれた値を取得したいです。その方法として、セルの名前を検索することでセルを特定し、値を取得するマクロを作成したら、できるのでは?と考えたのですが、ヘルプやWebを調べてもこのような方法はありませんでした。こういったことはできないのでしょうか? 私の知識レベルは、C言語はひととおりできる、VBの経験はなし、業務でExcelを使っており基本操作はできるレベルです。 すみませんが、アドバイス、よろしくお願いいたします。 以下やりたいことの補足 具体的には、仕様書の仕様数がかかれたセルがあり、そのセルは”仕様数”として名前を定義している。そのセルの値である仕様数をマクロやVBAなどにより自動集計して、仕様書のボリュームを読みたいと考えています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>No2の方により、解決することができました。 解決されたのならよかったです。 ところで、 >ためしに"仕様数"という名前が存在しないSheetでRange("仕様数")を実行しましたら 仮にSheet1のA1:A5を”仕様数”と名前の定義を行なった場合、 Sheets("Sheet2").Range("仕様数")~ってやるとエラーになりますが、 その事とは違いますよね?
その他の回答 (4)
- n-jun
- ベストアンサー率33% (959/2873)
ANo.1での回答の方法だと、登録されている名前の定義名とその範囲が イミディエイトウインドウに表示されるはずですが。。。 別々のシートで同じ名前を使う http://www2.odn.ne.jp/excel/waza/name.html#SEC8 この事だったのでしょうか? 単純にBook内の”仕様書”と名前の定義を設定した範囲の合計なら、 Sub try2() Dim st As Excel.Name Dim g_kei As Double For Each st In Application.Names g_kei = g_kei + WorksheetFunction.Sum(Range(Replace(st, "=", ""))) Next MsgBox g_kei End Sub こうゆう事ですか?
お礼
お礼が遅くなりまして、申し訳ありませんでした。 仕様書と名前の定義を設定した範囲を、出すことができるんですね。ひとまず、VBAを駆使してチャレンジしてみます。 大変参考になりました。ありがとうございました。
- n-jun
- ベストアンサー率33% (959/2873)
ANo.2さんの回答により、なんか私は勘違いしてたようですね。 >自動集計 が例えば”合計”を出すのであれば、一般関数の =SUM(仕様数) とかって事だったのでしょうか?
お礼
質問の仕方があいまいでもうしわけありませんでした。No2の方により、解決することができました。ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
>C言語はひととおりできる 関係ないです。エクセルVBAはエクセルの操作レベルの熟練とメソッドプロパティをどれだけ知っているかであって、言語仕様の知識やプログラムロジックの経験とも関係ない。 VBの熟達者であっても、エクセルVBAの0前では、勉強してなければ 手も足も出ないはず。VBAのAはエクセルの操作をスクリプト化してあるイメージで、VBAの1行でエクセルに即して、中身が詰まっている物が多い。 常識的なロジックで総なめに聞いたりすると複雑だが、エクセルVBAのことを知っていると、短い1行で済むものも多い。 ーー 本件は Sub test01() Range("範囲1").Select MsgBox Selection.Cells(1) End Sub を参考に。 本例ではC2:D3に範囲1と名前をつけています。 Ceセルの値を取り出した例です。D2ならMsgBox Selection.Cells(2) です。 1セルごとに名前をつけているなら Sub test02() MsgBox Range("セル1") End Sub で一発です。 セルを表現する仕方の1つにこれが入ってますが、良く気に留めないと本の記述を通りすぎます。
お礼
例えば、Range("仕様数")で取得できるのですね。理解できました。ありがとうございます。 なお、作成している仕様書ブックのなかには、"仕様数"という名前が定義されていないSheetが含まれているのですが、このようなSheetがあるなかで、"仕様数"から値を取得するにはどうしたらよいのでしょうか? ためしに"仕様数"という名前が存在しないSheetでRange("仕様数")を実行しましたら、プロシージャエラーがでてしまいました。 続けてすみませんが、ご教授いただけますと助かります。 よろしくお願いいたします。
- n-jun
- ベストアンサー率33% (959/2873)
Sub try() Dim st As Excel.Name For Each st In Application.Names Debug.Print st.Name, st Next End Sub こんな感じの事ですか?
補足
>Sheets("Sheet2").Range("仕様数")~ってやるとエラーになりますが、その事とは違いますよね? そのことです(と思います)。やりたいこととしては、もしSheet2に"仕様数"がなければ、エラーで停止してしまうのではなく、気にせず何もしないようにできればと考えています。 その背景として、現在、Excelの仕様書が複数存在するのですが、仕様書のSheetごと"仕様数"の定義がある場合とない場合があり、さらに"仕様数"のあるSheetは1つの仕様書ファイルに複数存在しています。このような状況で、各仕様書に存在する全ての"仕様数"の合計を算出できるマクロかVBAを作成したいと考えています。