ExcelVBA 定数宣言を外部ファイルで

このQ&Aのポイント
  • ExcelVBAで大量の定数宣言を行う際、外部ファイルを使用する方法について教えてください。
  • プログラミングでは同じ値でも異なる意味を持つ場合があります。Constを多用して意味を明確にしたいのですが、大量のConst宣言行列がプログラムを複雑にしてしまいます。
  • VB初心者のため、外部ファイルからの定数宣言方法がわかりません。どのようにすれば大量のConst宣言を防ぐことができるでしょうか?
回答を見る
  • ベストアンサー

ExcelVBA 定数宣言を外部ファイルで

お世話になります。 当然ながらプログラミングでは同じ値でも全く意味が異なることが殆どです。 同じ「数値1」だからと云って安易に改変すると ご存じの通りとんでもない事になります。 これに泣かされまくった私はconstを多用し 全ての意味に対して定数を宣言したいたちになったのですが 以前作ったものではこれが仇をなしプログラム全体の7割がConst などと云った馬鹿げたことになり 「.INFファイルに纏めたら?」(冷笑) という汚名をきしました。 ところがVBA初心者なせいでしょうか? CVSなど以外の外部ファイルから 定数宣言を行なえるか、どうすれば叶うのか、解りません どの様にすれば大量のConst大行列を防げるのでしょうか? ご教示を頂ければ幸いです。

  • Nouble
  • お礼率91% (1698/1856)

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

  • ベストアンサー
回答No.3

外部ファイルで定数宣言して使いたい場合は、 標準モジュールにconstなりを書いていけば、ご希望の事はできます。 別野Excelでも使いたい場合は、 VBA画面のプロジェクトウィンドウで、他で使いたいファイルを右クリックして ファイルのエクスポートを選べば、ファイルとして出力できます。 参考:http://officetanaka.net/excel/vba/tips/tips112.htm で、前回も書いたenumですが、わかりやすそうな解説をしてくれているHPをあげておきます。 http://www.moug.net/tech/exvba/0150119.html http://excel-ubara.com/excelvba/EXCELVBA409.html 同じくenum関係ですが、元々定義されているenumです。 http://ameblo.jp/make-excel/theme-10038431414.html

Nouble
質問者

お礼

有り難うございます、 ちょっと見てみます。

Nouble
質問者

補足

その他の回答 (3)

回答No.4

補足で書かれたURL(http://d.hatena.ne.jp/language_and_engineering/20090731/p1) (2)便利な方法(テキスト形式) が、使い回しするのには一番良いですね。 そのページにも書いてありますが、テキスト形式で管理できるのでメモ帳でも修正ができますし。

Nouble
質問者

お礼

個々ではオープンイベントで読み込んでいるように思うのですが、 主モジュール処理が開始して後に、その構文内で指定し インクルード(?)することも可能なのでしょうか? あと、 オープンイベントでソースコードをインクルードし そのままセーブすると、 インクルード状態が保存されるのでしょうか? もし仮にそうだとすると条件式でインクルード済みか判定しなければならず、 未インクルード状態を保たせる手間が出ちゃいますよね。 滝汗な感じします。(滝汗) (||| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ー ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄;)アウッ (※:http://www.facemark.jp/f-ase.htm より引用)

回答No.2

たしかに Enum で定義した所で行数は減らないですね(^^; でも、関数の戻り値や変数定義の型として使えるので、Enumの方が便利かな~と あと、DLL化はExcelだけでは無理だから... Visual Studio .NET等でDLLとして作るしかないですね。

Nouble
質問者

お礼

ひょとして構造体って奴ですか? 定数宣言だけでなく 初期値付き変数の宣言も できるみたいな感じですね。 ところで本題の、外部ファイルのお話ですけど 何とか追加アプリケーション無しで 読み込みファイルが作れない物でしょうか? 例えばテキストエディッタなどでできちゃうと 助かるのですが… 後、変数の入れ物を 定数に見せかけて使うのは 出来れば避けたいのですが… VBAの場合は書き換えができちゃいますよね… ? ご教示をお願い致します。

回答No.1

意味づけをするならば Enum で定義した方が良いのでは? さらに それがDLL となっていれば 汎用的に使えるでしょう。 (Excel等からは参照設定で追加できて便利だし)

Nouble
質問者

お礼

お心砕き有り難うございます。 >…らば Enum で定義し… 面白いですねこれ でもこれ言って良いかどうか… 行数減らなくない? (^_^)滝汗 >…れがDLL となっ… 非常に興味深いです、 思わずカプッ と食いついちゃいます。 正に入れ食いです。 (汗) DLL化はどうやるのですか?

関連するQ&A

  • 定数の設定について。

    こんにちは!WIN2000、VB6、SP5で開発しています。 仕事で今プログラミングしてるのですが、定数で困ってます。 悩んでるのは、 定数を宣言する標準モジュールがあって、 そこの定数にINIファイルから読み込んだ値を代入して、 どこからでも読み込めるようにする。 というところなのです。 Public Const gstrMoji = "文字列" このように宣言すると分かったのですが、 例えば下のように、INIファイルから読み込んで文字列を入れようとすると、 Public Const gstrMoji = iniFileLoad("テスト", "答え") iniFileLoadのところで、定数式が必要です。とエラーになってしまいます。 ちなみに、iniFileLoadっていうのは、別のモジュールに書いた関数式?を呼んでます。 登録や編集してるフォームではちゃんと動いてるので、 コード自体に問題があるわけじゃないと思ってます。 ためしに、フォームロードとかで定数を宣言してやろうとしたら、 ここでは宣言出来ません。みたいになって、どうしていいか困ってしまいました。 INIファイルから読み込んだデータを定数に代入する方法、 ご存知の方いらっしゃいましたら、どうぞご教授よろしくお願いしますm(_ _)m

  • oo4o OpenDatabaseの定数について

    下記の定数を宣言しているのですが、意味がさっぱり分からないので、教えて下さい! Public Const ORADB_DBDEFAULT = &H4& Public Const ORADB_DEFERRED = &H8& Public Const ORADB_ENLIST_IN_MTS = &H9& 今まで3という宣言されていない定数を使っていたのですが、 宣言されていない定数を使った場合、デフォルト0を使っていた事になるのでしょうか???

  • Excel VBAでの定数宣言について

    初心者が書籍とにらめっこしながらマクロを書いています。 お助けください。 複数あるラジオボタンをクリックしたら、そのラジオボタンの種類に応じて、特定の行を表示したり、非表示にしたりしたいと考えています。行の追加や削除で行番号が変わってしまった場合に備えて、この行番号を定数として宣言したいと思ったのですが、うまくいきません。 シートモジュールには、以下のように記述しています。 ============================================================== Private Sub OptionButton1_Click() 'ラジオボタン1を選択 Rows(scope1).EntireRow.Hidden = False 'scope範囲行を表示 Rows(scope2).EntireRow.Hidden = True 'scope範囲行を非表示 End Sub Private Sub OptionButton2_Click() 'ラジオボタン1を選択 Rows(scope1).EntireRow.Hidden = True 'scope範囲行を非表示 Rows(scope2).EntireRow.Hidden = False  'scope範囲行を表示 End Sub ============================================================== 以下の記述で定数を宣言したいのですが、 public const scope1 = "38:48" '38行目~48行目 public const scope2 = "49:52" '49行目~52行目 シートモジュールの最初に書くと、 「コンパイルエラー  定数、固定長文字列、配列、ユーザー定義型およびDeclareステートメントは、オブジェクトモジュールのパブリックメンバとしては使用できません」 とエラーメッセージが表示されてしまいます。 エラーの意味がよく分からないのですが、定数宣言は、どこに記述すればよいのでしょうか? お教えください。よろしくお願いします。

  • const outの意味を教えてください。

    英語のユーザーガイドを読んでいたところ、「const out」という言葉が出てきました。画面の値を入力するフィールドの名前として表示されています。constは、constantの略で定数の意味であることがわかったのですが、この場合outはどのような意味になるのでしょうか?const outはプログラミングのスクリプト中で使用されることが多いようですが、日本語に訳すとしたらどのような意味になるのでしょうか?どなたかわかる方がいらっしゃったら教えてください。

  • VBSでファイル作成後、書き込みできない

    ファイルが存在している場合は、ファイルをオープンして書き込み、ファイルが存在していない場合は、ファイルを作成後、オープンして書き込みを行わせたいと考えています。 しかし、ファイルが存在していないとき、ファイルは作成されるのですが、『エラー:800A0046 書き込みできません。VBScript実行時エラー』が出て、書き込みができません。モードをWritingにしても同じでした。 お手数をおかけしますが、ご教示いただけますようお願いいたします。 Option Explicit '■ オブジェクトの宣言 Dim objFSO Dim objFile '■ 定数の宣言 Const strFileName = "C:\VBS\TEST.TXT" '■ 定数の宣言 '// ファイル入出力モード(8:追加書き込み) Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else WScript.Echo "ファイルが見つかりませんでした" Set objFile = objFSO.CreateTextFile(strFileName) If IsObject(objFile) Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If '// ファイルのオープン Set objFile = objFSO.OpenTextFile(strFileName,ForAppending) objFile.WriteLine "2012/12/21,100,ブレーキパッド,35000"

  • 多くのファイルで共通で使う数(C++)

    現在大学の卒業研究でこんな感じのプログラムをC++で作っているのですが ちょっと行き詰っています。 動くには動くのですが、汚いというか。 main.cpp --->実験プログラムのメイン。実験の初期値などが書いてある。 basic.cpp --->基本的な算術計算につかう関数やデータ構造のクラスが書いてある。 sampling.cpp learning.cpp --->実験にいろいろ使うメソッドが書いてある。 これらに加えてbasic.h, sampling.h, learning.hがあり それぞれのcppファイルにインクルードしてあります。 また各cppファイルに共通で使う定数があるのです。たとえば const int DIMENSION = 3; //3というのはたとえばで実験の条件による違う const int ROOP = 20000; などという感じです。これをmain.cppの先頭で宣言して condition.hにextern const int DIMENSION;などと書いて 各cppファイルにこれまたインクルードさせてあります。 今のところこれはこれでプログラムは問題なく動いているのですが 今になって仕様を少し変更する必要が出てきました。 たとえばこのcppファイル群をzikkouという実行ファイルに コンパイルしていたとすると、実行の際に $ zikkou 4 20000 という感じに引数としてDIMENSION,ROOPの値を指定したいのです。 ($はプロンプト画面、ターミナル画面ということです) constのままだとこのように実行の毎にDIMENSION,ROOPを変更するというのは出来ないと思うんですが constを外すと、実行中の安全性が疑問です。 (これらの定数は一回ある値でプログラムが動き出したら絶対に 変わりませんし変わってはいけません) なにか良い方法はございませんでしょうか? よろしくお願いいたします。 なにか情報不足がありましたらおっしゃってください。 すぐに補足いたします(ソースのupは長すぎて難しいです)。 よろしくお願いいたします。

  • Constステートメントの使い方

    Constステートメントの使い方 VBAをはじめて1か月の初心者です。 Constは定数を宣言するステートメントと聞きます。 ある参考書から以下のコードを抜粋しました。 Const シート名 = "商品一覧!" Const リスト先頭 = シート名 & "B4" 1.「シート名」は商品一覧とする。 2.「リストの先頭」は商品一覧のB4セルとする。 ということになると思いますが、ここで質問です。 1."商品一覧!"の「!」はどういう意味でなぜ付いているの でしょうか? 2.例えば上記の宣言を Const シート名1 = "商品一覧!" Const リスト先頭1 = シート名1 & "B4" Const シート名2="顧客一覧!" Const リスト先頭2 = シート名2 & "B4" という記述にしてsheet3の顧客一覧を定数として 宣言することは可能でしょうか? (もちろんsheet3には予め顧客一覧の表を入力し、 当初のコードに合わせた改良コードは用意するつもりです) ※ユーザーフォームから納品書を入力するためのサンプル コードの一部を抜粋しています。sheet1には納品書、sheet2には 商品一覧の表が既に用意されています。 以上、よろしくお願いします。

  • 定数宣言

    定数を宣言時に、 public static final String SQL_QUERY = "select * from table" のように、宣言しているのを書籍やweb上で見ることがよくあります。 上記宣言のstatic修飾子について、なぜ使用するのでしょうか?

    • ベストアンサー
    • Java
  • VBAでフォルダ内の全てのcsvファイルからコピペ

    マクロ超初心者です。 フォルダ内のすべてのcvsファイル(500程度)の5列目(500行程度)を新規ファイルの1列目から順にコピーしていきたいのです。 ちなみに元のcvsファイルのシート数は一つだけでシート名には全てファイル名が付いています。 (つまり全てのファイルのシート名が異なる) 見よう見真似で似たようなマクロから意味もわからないまま つぎはぎして下記作りましたが やっぱり動きません。 どなたか詳しい方どうかよろしくお願いします。 Sub Sample() Const FolderPath As String = "C:\data" Dim objFSO As Object Dim objBook As Object Dim lngRow As Long Application.ScreenUpdating = False Set objFSO = CreateObject("Scripting.FileSystemObject") For Each objBook In objFSO.GetFolder(FolderPath).Files lngcolumn = ThisWorkbook.Sheets("sheet1").Range("A" & Columns.Count).End(xlToRight).Column + 1 Workbooks.Open objBook.Path With ActiveWorkbook .Worksheets(1).Column("5").Copy ThisWorkbook.Sheets("sheet1").End(xlToRight).Offset(0, 1) .Close End With Next Set objFSO = Nothing Application.ScreenUpdating = True End Sub

  • 特定のクラスだけで const 変数を有効にしたい

    円周率のような “意味を持つ定数” を C++ では以下のようにするのをよく見かけます。 const double PI = 3.1415926; これを特定の 1 つのファイル内だけで有効にする方法はありませんか? 例えばあるクラス Hoge.cpp と Hoge.h のみで上記の PI を使う,というように。 Hoge.h をインクルードするファイルにおいては PI を無効にしたいのです。 C++ 超初心者につき,マヌケな質問をしているかもしれないですが,ご教授願えたら幸いです。

専門家に質問してみよう