編集: わかりやすくするためにタイトルを変更しました。
簡単な要約:ワークブック スコープのワークシート依存の名前付き数式 (以下で説明します) の動作が Excel の文書化された機能であるかどうかを知りたいです。もしそうなら、どこかのドキュメントの方向性を教えてください - 私はこれについてオンラインで何も見つけられないようです (おそらく私は悪い検索用語を使用しています..?) そして実際に何かを使用したくありません.バグであり、後のバージョンで消える可能性があります!
厳密に言えば、これは実際には VBA に関する問題ではありません。ただし、名前付きの数式は、私や他の人が VBA コードで常に使用するものであるため、私が考える主題にはまだ適用できます。
編集: 以下の VBA コードは正確に正しくない可能性があることに注意してください。テストしていません。
通常の方法
工学/科学計算では、同じ名前の数式/範囲を同じワークブックで複数回使用する必要がありましたが、ワークシートは異なります。簡単な例として、円の領域に次のようなものを実装します。
Dim sht as Worksheet
For Each sht In ThisWorkbook
Call sht.Names.Add(Name:="AreaCircle",RefersTo:="=PI()*'" & _
sht.Name & "'!Radius^2")
Next sht
次の名前付き範囲/数式のセットが得られます (各ワークシートにスコープが設定されています)。
=PI()*Sheet1!Radius^2 <--- scoped to Sheet1
=PI()*Sheet2!Radius^2 <--- scoped to Sheet2
etc. etc.
これはもちろん問題なく機能しますが、将来の変更が難しいという大きな欠点があります。したがって、たとえば、数式が変更された場合 (もちろん、円の面積は変更されません! しかし、AASHTO LRFD 高速道路設計コードの数式は、たとえば、ほぼすべてのエディションを変更します!)、すべてのインスタンスを編集する必要があります。すべての名前式の。これは、VBA プロシージャを作成しても面倒です。
代替方法
先日、Excel 2013 で偶然に以下を発見しましたが、オンラインのどこにもそれについて何も見つけることができませんでした。これは私がそれを使い始めるのをためらわせます。
代わりに、次の 1 行のコードを実行するとします。
Call ThisWorkbook.Names.Add(Name:="AreaCircle",RefersTo:="=PI()*!Radius^2")
これにより、次の単一の名前付き範囲/式が生成されます (ワークブックにスコープが設定されています)。
=PI()*!Radius^2
<--- 数式は Workbook にスコープされます。注!Radius
、ありませんRadius
。
これは次のものと同じではないことに注意してください (感嘆符はありません)。
=PI()*Radius^2
<--- ここでRadius
は、スコープが Workbook であることに注意してください。
これで、AreaCircle
上記の最初のメソッドとまったく同じ動作が生成されます。ローカルのワークシートで定義された Radius の値に基づいて結果が生成されます。したがって、名前付き範囲が 2 つある場合Radius
(1 つは 用Sheet1
、もう 1 つは 用Sheet2
) は、それが使用されているシートAreaCircle
の の値に応じて計算されます。Radius
さらに、新しいワークシートを追加するたびに、この (および他のすべての) 数式の新しいバージョンを追加する必要がなくなるという追加の利点もあります (これは非常に大きいです!)。
これは説明が難しい動作です。私の説明に混乱している場合は、次の手順を実行してこの動作を再現できます。
- ワークブックで複数のワークシートを作成し、 のセルに「1」、シート 2 のセル
A1
にSheet1
「2」、シートA1
3 のセルに「3」A1
などを入力します。 - 名前付き範囲
CellA1
(Workbook スコープを使用) を作成し、式に次のように入力します。=!$A$1
=CellA1
任意のセルに入力すると、 では「1」Sheet1
、 では「2」Sheet2
などになります。
ドキュメンテーション?
やあ、あなたはそれを作りました - ここで私に固執してくれてありがとう!
それで、私が上で言ったように、誰かがこの「機能」のドキュメントを教えてもらえますか? もっと複雑なプロジェクトでこれを実装したいと思っています。他に何もないとしても、Name Manager のナビゲートが約 20 倍簡単になります (すべての重複した名前はありません)。