- 締切済み
エクセルVBAの定数
こんにちは! 定数について質問です。 VBAのユーザー定義定数ってVBEに記述する以外に宣言する方法はありませんでしょうか?詳しくないですがC言語のようにヘッダーファイルにリンクするように手軽でやりたいのですが無理でしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 あまり、ここの掲示板では、深い話をする機会はありませんが、もう少し書かせていただきます。あくまでも個人的な意見で、違うという人もいるとは思います。 >dllとかいうライブラリファイルを作らなきゃいけない感じなことはわかりました 基本的には、Excelでは、アドインです。他には、タイプライブラリやActiveX コントロールということになりますが。 まず、VBAに使用する dll の作成のツールは、全部で三種類あります。 1. C言語で作るもの 2. VBで作るもの 3. Developer で作るもの 番外としては、VSTA または、VSTO で作るものになると思います。 マイクロソフトでは、MS-Office は、VSTAに移行しようとしているのはご存知だと思います。言い換えれば、.Net です。VSTA/VSTOは、VB.Net と C#の選択になります。 以前、Developer は、Developer Toolsがあったので、ある程度安価で手に入りましたが、VS2005 では、上位機種でなければダメで、その代わりにVSTOを買えというのでは、とても一介のプログラマでは、単にそのために購入するようなことは出来ません。(MSに付き合っていたら、いくらお金があっても足りません。BASIC系は、今のところMSが中心ですが、何も、BASIC系だけが、プログラミング言語ではありません。)もちろん、VB6の場合は、Professional 以上だったはずで、これも安価ではありません。おまけに、この方面の資料が極端に少ないような気がします。今は、過渡期ですから、次のものにターゲットを置いたほうがよいと思います。資料が極端に減っていますし、あっても、プレミアがついています。仮に手に入れても、有効な範囲が狭まっています。仕事で収入の見込みでもなければ、今更、Developer やVB(非.Net)などには手は出さないほうがよいです。お金が有り余って、達成の目的がない趣味なら別ですが。 たかが、MS-Office のVBAで、そんな専門的なことはしなくてよい、というのが私の思いです。某氏のように、一回の仕事で、何百万円も稼ぐ身ならともかく、私などは、せいぜい、知り合いから頼まれて、貰っても数千円で、中には、トンデモナイ内容で、お断りもありました。 >DLLファイルが簡単に作れる感じでが、言語の選択とかってのがあるのですが 深読みすると、一種のVBAプログラマの足きりです。「Dll のCOMアドインを作りましょう」といっても、本格的な言語を扱えなければ、歯が立ちません。今までの、VBAとは段違いにハードルは高いです。仮に、VB.Netになっただけで、オブジェクト指向が入ってくるので、完全に、今までのものとは違ってしまいます。将来、.Net FrameWorkは使わないとは言っても、おそらく、Vista以上で使うようになっていくと思います。 余談にはなりますが、こちらが私の専門に近いのですが、 >英語で書かれたものを翻訳機械にかけただけで人的な加工はしてないですぜ! あまり詳しくは書きませんが、こちらの内情も知っています。大元凶は元の英文が悪いのです。おそらく、ネイティブでも、そう簡単に読める人は少ないと思います。それでも、もし、分かりにくいと思ったら、英文を読まないといけません。Excelのヘルプの文章がどことなくヘンだと感じるのは、英文自体をそのまま逐語訳したのが原因なのです。残念ながら、どう読んでもプロの仕事ではありません。 >グローバルでの宣言は、気分的にメモリいっぱい使いそうだなあってのでちょっと避けたい 広範囲のセルを参照するようなコードを書かない限りは問題ないはずです。常識的な範囲なら、グローバル変数でも、問題が発生したという話は聞きません。グローバル変数は、ほとんど文字列で、String型です。ただ、あまりグローバル変数が大量のものは、どこかに、改良点があるはずです。 >VBEへの記述ってマクロでは出来ない(?)感じと思いますが、 今は、してはいけないことになっています。そういうコードを書く方法もありますが、それ自体が、ひどく特殊です。 なお、Class は、Classオフジェクトを作って、そこにプロパティを書いていくという感覚ですが、それほど多くは使われません。コードが倍々になっていくので、なかなかややこしいです。 >宣言したものを一個のファイルでまとまとめて見ることができるようにしておきたい感じな感じ Variant 型でなければよいと考えてよいと思います。それと、私が見ている限りでは、名の知れた方でも、非表示のワークシートのひとつを使いますね。VBE側に書いたら、大変な量ですから、やむを得ないのだと思います。 ただし、グローバル変数の代わりに、ワークシートの名前-登録を使う人がいます。いかにも素人くさいし、VBA では、使用しないほうが良いようです。Namesオブジェクトは、その親オブジェクトが曖昧に感じます。 ここらは、実務上では上級の話になるので、かなり経験をつまないと、制作上では、初歩的な部分や基礎的な部分で逆に集中力を欠いて、コケてしまうことが往々にしてあります。 VBAはあくまでも、スクリプト言語ですから、コンパイルしていません。常に、コードはExcel.Applicationが、メモリ上で、監視状態になっていますが、他の言語のようにしたいと思っても、そこには限界があります。別のご質問で、日本地図の上でマウス・クリックした位置の情報を出したいというのを読みましたが、そういう動作を望むのは、言語そのものが違いますから、VBAでは実現は可能・不可能かは分かりませんが、メインはあくまでも、Excel ワークシート本体なので、仮に出来ても、そうした旨味が少ないのではないかと思います。それに対してアイデアとしては持っていますが、それこそ集中力が必要になってしまいます。 Excelは、Excelに向いた仕事があり、そうでないものは別のプログラム言語を使うほうがよいと思うのです。Excelは、その表計算の特性を活かせば、他のプログラム言語では比べ物にならないくらいの力を発揮します。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >C言語のようにヘッダーファイルにリンク Cの定数は、VBE の定数の考え方と、基本的には変わらないはずですね。ヘッダファイルは、VB系で言えば、参照設定と同じものだと思います。手続きは、VB系は、非常にややこしいのですが。 ですから、別のプロジェクトを作っておいて、アドイン型にするか、そのまま参照設定で呼び出すか、後は、Class を作っておくぐらいではないでしょうか? 他には、VBAやVBでは、グローバル文字列定数(通常は、そのブックのプロジェクト内)を置いておいて、それを、後で、配列に置き換えるということはします。それらは状況によります。 時々、多言語に慣れている人は、外部ファイルにするという人もいますが、私は、なんとなく、VBAには向かない気がします。なんとか、一つのブックでまとめようとするのに、それを外部に置くのは、「VBAらしく」ありません。それをするなら、非表示シートに定数としておいておくほうがよいです。Excelには、いろんな置き場所があります。
お礼
こんにちは! いつも回答いただいちゃいまして、本当ありがとうございます!! 回答をいただくたび、そのぶんだけお馬鹿な私が少しだけ賢くなっちゃう感じです。本当に大感謝! >手続きは、VB系は、非常にややこしいのですが マイクロソフトのページで最初調べていたのですが、いくつかこれかしらんと思ったものがありまして、dllとかいうライブラリファイルを作らなきゃいけない感じなことはわかりましたが、かなり難解で、中にはこれまでに読んできた日本語の中でもトップクラスに迷走した文章で書かれているものもあり、理解することを放棄しました(冒頭に、このページの内容は英語で書かれたものを翻訳機械にかけただけで人的な加工はしてないですぜ!保障の限りではない!みたいな記述があったりする感じ)。 なんか複雑なことだけは分かっちゃいました。 >別のプロジェクトを作っておいて、アドイン型にするか、そのまま参照設定で呼び出すか、後は、Class を作っておくぐらいではないでしょうか? これはどういう感じでしょうか?凄くなんか良い感じな印象がします。いままでアドインとかいうのを使ったことがないのですが、結構ムツカシイのでしょうか? なんでCのようにヘッダーファイルで定数宣言を行うようなことがしたいかというと、まずグローバルでの宣言は、気分的にメモリいっぱい使いそうだなあってのでちょっと避けたいのと、VBEへの記述ってマクロでは出来ない(?)感じと思いますが、定数化したいものはシェイプやグラフのの名前とか、表の名前、なんかのパラメーターとかってもので、こういうのはいちいち記述するのが面倒なので、対象のもを生成すると同時に勝手にヘッダーファイルみたいなのに宣言を追加するようなマクロを組んでしまいたいのと、セルとかテキストを検索するという操作なしに手軽に使用したい感じで、あとは宣言したものを一個のファイルでまとまとめて見ることができるようにしておきたい感じな感じです。 今マイクロソフトのページを読んでいたら、アドインなんとかを使うと(マイクロソフト曰く)DLLファイルが簡単に作れる感じでが、言語の選択とかってのがあるのですが、こここれ以外に何か方法はありませんでしょうか?ないですよね?