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

セルに名前を定義しています。そのセルに書かれた値を取得したいです。その方法として、セルの名前を検索することでセルを特定し、値を取得するマクロを作成したら、できるのでは?と考えたのですが、ヘルプやWebを調べてもこのような方法はありませんでした。こういったことはできないのでしょうか?
私の知識レベルは、C言語はひととおりできる、VBの経験はなし、業務でExcelを使っており基本操作はできるレベルです。
すみませんが、アドバイス、よろしくお願いいたします。

以下やりたいことの補足
具体的には、仕様書の仕様数がかかれたセルがあり、そのセルは”仕様数”として名前を定義している。そのセルの値である仕様数をマクロやVBAなどにより自動集計して、仕様書のボリュームを読みたいと考えています。

A 回答 (5件)

>No2の方により、解決することができました。


解決されたのならよかったです。

ところで、
>ためしに"仕様数"という名前が存在しないSheetでRange("仕様数")を実行しましたら
仮にSheet1のA1:A5を”仕様数”と名前の定義を行なった場合、
Sheets("Sheet2").Range("仕様数")~ってやるとエラーになりますが、
その事とは違いますよね?

この回答への補足

>Sheets("Sheet2").Range("仕様数")~ってやるとエラーになりますが、その事とは違いますよね?

そのことです(と思います)。やりたいこととしては、もしSheet2に"仕様数"がなければ、エラーで停止してしまうのではなく、気にせず何もしないようにできればと考えています。
その背景として、現在、Excelの仕様書が複数存在するのですが、仕様書のSheetごと"仕様数"の定義がある場合とない場合があり、さらに"仕様数"のあるSheetは1つの仕様書ファイルに複数存在しています。このような状況で、各仕様書に存在する全ての"仕様数"の合計を算出できるマクロかVBAを作成したいと考えています。

補足日時:2008/01/15 22:53
    • good
    • 0

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
こうゆう事ですか?
    • good
    • 0
この回答へのお礼

お礼が遅くなりまして、申し訳ありませんでした。
仕様書と名前の定義を設定した範囲を、出すことができるんですね。ひとまず、VBAを駆使してチャレンジしてみます。
大変参考になりました。ありがとうございました。

お礼日時:2008/01/20 20:04

ANo.2さんの回答により、なんか私は勘違いしてたようですね。



>自動集計
が例えば”合計”を出すのであれば、一般関数の
 =SUM(仕様数)
とかって事だったのでしょうか?
    • good
    • 0
この回答へのお礼

質問の仕方があいまいでもうしわけありませんでした。No2の方により、解決することができました。ありがとうございました。

お礼日時:2008/01/14 22:46

>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つにこれが入ってますが、良く気に留めないと本の記述を通りすぎます。
    • good
    • 0
この回答へのお礼

例えば、Range("仕様数")で取得できるのですね。理解できました。ありがとうございます。
なお、作成している仕様書ブックのなかには、"仕様数"という名前が定義されていないSheetが含まれているのですが、このようなSheetがあるなかで、"仕様数"から値を取得するにはどうしたらよいのでしょうか?
ためしに"仕様数"という名前が存在しないSheetでRange("仕様数")を実行しましたら、プロシージャエラーがでてしまいました。
続けてすみませんが、ご教授いただけますと助かります。
よろしくお願いいたします。

お礼日時:2008/01/14 22:58

Sub try()


Dim st As Excel.Name

For Each st In Application.Names
Debug.Print st.Name, st
Next
End Sub
こんな感じの事ですか?
    • good
    • 0

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