• ベストアンサー

変数から命令?

例えば dim a as String a="dim b as Long" という風にしてみて aの値に入ってるやつを実行(?)するようなことができますか? つまり、ここでいうなら aに"dim b as Long"をいれて なんらかの処理を行って 変数bを作成することはできますか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

VBでは無理でしょう。色々な言語がありますが。「数」と言うことは考えられないので、文字列になりますが、文字列を定義して、文字列で意図している(多分プログラムソース)内容を実行して欲しいと思うことは、私も時々夢想します。これと一脈つうずるように思います。 その中にも(1)インタプリタ・コンパイラ側への指示する内容のもの(2)オブジェクト・プログラムの内容を指示するものが考えられるが、本件は(1)なんでしょう。 一脈通ずるものに条件付きコンパイルがあると思う。 しかしこれは実行途中時の指示ではない。 (2)に関して、その部分だけ、実行時のある時点で、プログラムソースとしてインタープリタやコンパイラが働いて、機械語に変えて、実行権をそこに移し、終われば実行権を奪いたいと言うことは、特別にそのように言語仕様として、設計し実現せねばならないと思います。そんなことが出きる設計にするのは、複雑になるので避けるか一部分に留めるでしょう。またウイルスのことを考えると、非常に危険性を孕んでいると思います。 いま、たまたまSQL文のことを考えていたのですが、このSQL文などは、世の中に流布した機能なので、文字列でありながら、実行中にSQL文文字列を入力すると実行してくれる仕組みは作られていると思う。 結論として、自分でプログラムの中に分岐出来る、区別するルーチンを2つ作って、決定要因を自分のプログラムで見て判別し、適当なルーチンへ飛ばすより他ないでしょう。

dinowave
質問者

お礼

回答ありがとうございます かなり色々と書いてくださって、本当にありがとうございます そうですか...、自分でそういう仕組みのやつを作らなくてはならないのですか.. わかりました、なんとかがんばってみます

その他の回答 (2)

noname#4564
noname#4564
回答No.3

どんな機能を実現したいのかよくわかりませんが、例えば、文字列で指定した 内容をファイルに出力してコンパイルし、実行ファイルを動的に生成すること ならできなくはありません。 (実行環境にVBのIDEが必要になりますが) あまりVB向きの内容ではないと思います。

dinowave
質問者

お礼

回答ありがとうございます ..、なんか難しそうですね なんとかがんばってみます

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

できない、と思います。 変数宣言チェック(OptionExplicit)を行なってたらプロシージャに入る時点でチェックされてますから。 (ステップ実行時には追加で宣言できるんですけどね。) なぜ、後からの変数宣言が必要なんでしょうか? Variant型ではだめなんですか?

dinowave
質問者

お礼

回答ありがとうございます できませんか...、しかたがありませんね >なぜ、後からの変数宣言が必要なんでしょうか? HSPの変数の宣言の仕組みがしりたかったんです だからこのような風にできるかな~、と思ってみたんですが...

関連するQ&A

  • 変数にnullを代入するには

    諸事情で、変数の値をNullにしたいのですが、 Sub a() Dim mystr As String mystr = "moji" '他の処理 mystr = Null End Sub だと、実行時エラー94になります。 多分、NULLは値じゃないから代入できないんだと思いますが、どうすれば変数をnullにできるのでしょうか? String型が問題であれば、何にすればいいですか?

  • 変数の配列の使い方教えてください。(初心者)

    VBで関数を作ってるのですが、 Function kansuu as Long Dim a(50) as Long Do (処理) Loop End Function ↑こんな形になってまして、変数a(0)~a(50)にはそれぞれ値が入ってます。{a(50)まで全部使うとは限りません。} Do文を抜ける条件として、途中に「もしa(0)~a(50)の値が全て"0"ならDo文を抜ける」という処理を入れたいのですが、変数aの"配列要素全て"という文の記述方法が分かりません。どなたか教えてください

  • 変数を動的に作るには?

    変数を作成する際には必要な分だけ一つずつ宣言する必要があるのでしょうか? 例えば、連番を格納する文字列型変数を一時的に100個必要だとすると Dim textdat1 As String = "Number1" Dim textdat2 as String = "Number2" Dim textdat3 as String = "Number3"      ・      ・      ・ と100個宣言しないといけないと思うのですがこれを For i As Integer = 1 To 100 Dim textdat(i) As String = "Number" & i Next i という様な形で変数を作成することは出来ないのでしょうか。 初歩的な質問かもしれませんが、よろしくお願いします。

  • 別々の変数なのに同じ内容がセットされてしまう

    OS:Win7 Pro(32bit) VB.net:Visual Studio 2010 現在、vb.net2010を使用して、あるアプリケーションの改造を行っておりますが、 二つの別々の変数にもかかわらず、一方の変数に値をセットすると もう一方の変数にも値がセットされるという現象が発生しています。 APの構造は以下の通り(概略) Dim 変数A as list(Of cSubStr_A)(パブリック変数) Private Sub ルーチンA Dim  変数B as cSubStr_B 変数B.SubString. = 変数A.SubString(インデックス) 変数B.SubString.left = 123 End Sub 変数Aについては、他のサブルーチンなどで値がセットされています。 変数A、変数Bの配下には、leftという変数があります。 現在、変数B.SubString.left = 123が実行されたときに、 変数A.SubString.leftに対しても同じ値がセットされてしまいます。 (ステップ実行で確認) 他のプログラマが作成したものなので、 詳細は現在不明なのですが、変数Aと変数Bは別の変数なのに、 どうして変数B配下の変数に値がセットされると、変数Aに 反映されてしまうのかがわかりません。 別の人に聞いてみたのですが、変数名は違うけれど、 アドレスが同じところを見ているので、こういう現象になるのでは? という指摘がありました。 今までこういう現象にで合ったことがないので、 手がかりがつかめない状態です。 なにかヒントがあれば、お教え願えればと 思います。 以上、よろしくお願い申し上げます。

  • 2つ以上の変数を比較して最大数を求めたい

    Sub 最大数() Dim a As Long Dim b As Long Dim c As Long a = 10 b = 20 c = 30 ここで変数を比較するコード MsgBox "a,b,cの中で一番大きな数は です" End Sub のように変数を比較して、最大数を求めたいのです。 2つなら If a > b Then で結果を取得すればいいですが、 3つや4つやそれ以上になった時に、応用を利かせるため質問しました。 よろしくお願いします。

  • VBSで変数の宣言はできないのですか?

    VBSで、 Dim a As String a = InputBox("MsgBoxに表示する値を入れてください。", , "test") MsgBox a と文章を作って、test.vbsで保存しました。 するとエラーになります。 Dim a As Stringの部分を消すと、問題なく作動します。 もしくは、 Dim a a = InputBox("MsgBoxに表示する値を入れてください。", , "test") MsgBox a でも正常に動きます。 VBSで変数の宣言はできないのでしょうか?

  •  日付型なら変数の先頭になんてつけてますか?

    変数名で、 文字列型なら Dim str組織名 As String 数値型なら Dim intNo As Long としてるのですが、 日付型なら変数の先頭になんてつけてますか? Dim date月日 As Date にしようかなと思ったのですが なんかくどいかなって感じます。

  • エクセルマクロ配列で変数は使えますか

    エクセル2013です。 初めて配列を使います。 以下のように作成し思ったようにできました。 Sub 計算() '成功 Dim a As Integer Dim c As Integer Dim b(5) As Integer Dim 最終行 Dim 値列  値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To 5 b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub ただ計算する列の範囲をインプットボックスで入力した値 にしたい為以下のように改造しました。 Dim b(対象列) As Integerでエラーになります 配列には変数は使用できないのでしょうか? よろしくお願いします。 Sub 計算() '失敗 Dim a As Integer Dim c As Integer Dim b(対象列) As Integer’★ここでERRになる Dim 最終行 Dim 対象列 Dim 値列  対象列 = 22'インプットボックスで入力した値 値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To (対象列 - 17) b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub

  • グローバル変数などについて

    Option Explicit Dim str1 As String '・・・(1) Sub テスト() Dim str2 As String '・・・(2) str1 = "テスト1" str2 = "テスト2" MsgBox str1 MsgBox str2 End Sub (1)はグローバル変数と言うとの事ですが (2)は何変数と言うのでしょうか? ローカル変数ですか? また、(1)がdimではなく、 Public str1 As String となった場合でも、 プロシージャーの外にあれば、グローバル変数と言うのでしょうか?

  • バイト型のデータをLong型に変換

    初歩的なことですみません。 Dim a(0 to 3) as Byte Dim b as Long と宣言します。 この変数aをLong型のbに変換するにはどのように したらよいのでしょうか? 逆にbの値をaに変換する方法もできましたらお願いします。

専門家に質問してみよう