• 締切済み

変数について

お世話になります。 VBAにてプログラムを作成しています。 本コードで得た変数をCALLのサブルーチン先 でもその変数を生かしたいのですが、empty空 になってしまいます。 変数宣言はPublicにしているのですが。 そう言うものなのでしょうか。 お教え頂きたく宜しくお願い申し上げます。

みんなの回答

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

>empty空になってしまいます。  どの時点で「empty空」だと気付かれたのでしょうか?  「CALLのサブルーチン先」に変数が渡る前に、すでに「empty空」になっているということはありませんか?  VBE でステップ イン デバッグ なさって、その変数の動向を ウォッチ ウィンドウ で確認なさってみてください。  なお、「本コード」内での変数と、「CALLのサブルーチン先」内での変数と、両方ともウォッチ式を追加なさってください。 ※変数の適用範囲(スコープ)については、下記をご覧ください。 http://www.google.com/search?q=call+VBA+%E5%A4%89%E6%95%B0+%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97+&rls=com.microsoft:ja:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7ADBS

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Visual C++とVisual Fortranの変数を共用したい

    FORTRANで作成したサブルーチンを活用し、C++からコールする形でコードを再利用しようと考えています。 C++からFORTRANを呼び出すのはすぐに出来たのですが、データの引渡しで困っています。 FORTRAN側ではグローバルな変数を多数(100個以上)宣言しており、引数としては渡せないのでC++側でも同名の変数を宣言して共用し、データのアクセスをしようと目論んでいます。FORTRAN側のコードは極力触りたくありません。 しかし、FORTRANでexternに相当する宣言の仕方が分からず、うまく同じ領域を共用できるようになっていません。 具体的にどんなことをすれば良いのかご存知の方がいらっしゃいましたら、ぜひご教授願います。 宜しくお願いします。

  • VC++ 高速演算コードの沢山の変数の宣言方法

     【VC++ 高速演算コードの沢山の変数を、どのように宣言すべきでしょうか?】  今日は、質問させていただきます。 もしお詳しい方がいらっしゃいましたら、 どうぞよろしくお願いいたします。  Fortranのコード(歴10年程度)を、VC++2010(歴3ヶ月程度)になおそうとしております。  ボリュームのある数値解析のコード(3000行程度ございます)を、見やすくするために、 数百行ずつでサブルーチン化したい次第でございます。    例)int main(){                ←変数の宣言場所         definition()         calculation1()         calculation2()         calculation3()         conclusion()      }  しかしmainの最初(上記「変数の宣言場所」)にまとめて宣言しております変数が200個以上ございまして、これらの半分近くを各々のサブルーチンに毎回渡そうといたしますと、引数の量が膨大になってしまいますし、 またサブルーチン内で何か追記する度に引数を追加・削除せねばなりませんので、出来れば避けたい次第でございます。  そこで「全てPublicで宣言してしまおうかな?」などと考えて検索しておりましたが、「できる限りPublic変数を宣言すべきでない」といったような記事もございましたので、悩んでおります。 (Fortran環境下では、ヘッダファイル内のPublic変数を、全サブルーチンで毎回呼び出しておりましたが、それも良くないのかな、と迷っております。)  あと、上記のような宣言方法や参照方法が計算速度に影響するものなのかどうか分からないのでございますが、 平均で10日間程度まわし続けるプログラムになりますので、出来る限り「高速化」を優先したい次第でございます。  変なご質問かもしれませんので大変恐縮でございますが、 是非アドバイスいただけないでしょうか。(書物やサイトをご紹介いただけるのでも結構でございます)  何卒よろしくお願いいたします。

  • エクセルVBAでサブルーチンへの変数の配列渡し

    エクセルVBAで、メインで使用してる配列変数(の値)をサブルーチンに渡したいが、どうすればよいでしょうか。(なお、メインプログラムは大きいためこれ以上は書けないのでサブルーチンを使用) よろしくお願いいたします。

  • グローバル変数

    VBAにおいて「グローバル変数」と言うのは パブリックで宣言された変数を言うのでしょうか?

  • Delphiの変数について

    Delphiでプログラムを作成しています。 現状はとりあえずうまく動作しているようですが、グローバル変数、ローカル変数、クラス内のpublic、private内の変数?とかの宣言が整理できていません。 ほとんどがローカル変数とグローバル変数として宣言してしまっています。 今、整理している最中ですが、変数の宣言の場所を移動しても、コンパイルでエラーが出なければ、OKと考えてもいいのでしょうか? (動作中にエラーがでることはないと考えていいものでしょうか?)

  • 副プログラムの変数について

    Fortranなのですが、以下のようなプログラムがあります。 call sub1 call sub1 end subroutine sub1 !save a write(*,*) a a=1.0 return end sub1というサブルーチンをメインから2回呼び出すだけです。そのサブルーチンの中の変数aですが、2回目に呼び出されたときに1回目に設定したa=1が保持されているようです。2回目の呼び出しで1回目に設定したa=1に対応した出力になっています。 Fortranはこのような動作をするのでしょうか。save aをコメントアウトしているのです。save aを指定したときだけそうなると思っていたのですが。cなどは細々とした設定ができるだろうと思います。このサンプルコードは実際にそうなっているという実験なのですが、どういう風に解釈したらいいでしょうか。〇〇保存属性とかです。昔からこうだったのでしょうか。使用したのはgfortran ver.9.3ですが。 

  • VBAの変数宣言について

    VBAの変数宣言について サイトを調べながら仕事で色々と自動化しています。VBAを学び始めてまだ日が浅いので疑問は尽きないのですが、一番気になるところを一つ。 変数宣言の As ~ ってのがどうも苦手です。 とりあえず変数として使いたいけど、As ~ の ~ でなにを入れたらいいか分からず、入れないまま使っています。やはり、良くないのでしょうか? 上手に覚えるコツはありますか?

  • エクセルVBAでの変数のスコープ

    基本的なことなのですが、教えて下さい。 当方、PHPやjavascriptを中心にプログラムしてきたのですが、 今回、エクセル+VBAでプログラムすることになり、VBAを勉強しているところなのですが、ちょっと戸惑っています。 いままでは、グローバル変数をなるべく使わないように、プログラミングをしてきたのですが、 VBAの勉強で、参考にしている本のコードは、全てグローバル変数を使っています。 そもそも、エクセルのシート・セルがグローバル変数のようなもの(?)なので、変数のスコープにこだわってもあまり意味がないのかな?とも思います。 エクセル+VBAである程度の規模のプログラムを作る際、 変数のスコープはどのように使い分けるのが良いのでしょうか? すみませんが、ご教授の程、よろしくお願いします。

  • フォートランのサブルーチンの内部変数

    すみません。科学技術系の人間でして、フォートランが現役なのです。 あるプログラムのことですが、サブルーチンの内部の変数についてサブルーチンを呼び出すごとに加算していくようなことを行っています。 do i=1,100 call abc(i)   ← サブルーチンabcを100回呼び出す enddo end subroutine abc(i) n=n+1        ←呼び出されるたびに和をとる。 write(*,*) n return end このようなシンプルなプログラムは問題ないのですが、少し複雑になるとどういうわけか、呼び出される度にnが初期化され、writeさせた結果常に1が表示されるという現象に会いました。 昔のコンパックフォートラン(MS-Fortran, DEC Fortranを継承)と、最近のIntel Fortran(最新版)で動作が異なります。前者では和を取ってくれますが、後者では初期化されて常に1が出力されます。(上記のプログラムは問題なしです。もう少し長いプログラムでの問題です。) 言語仕様の問題(すなわちフォートランのバージョン)なのか、コンパイラ仕様の問題なのか、C言語のように宣言の仕方で変ったりするようになったというようなことはないでしょうか。 以下に示すように和をとる変数をメインプログラム側に一旦見えるようにすると、インテル版でも思ったとおりの動作をします。 call abc(i,n) suboroutine abc(i,n) としてnをメイン側に露出する。 よろしくお願いします。

  • VBIDEで未使用の変数の抽出

    VBIDEでプログラム(VBA)をどんどん書き込んで行き、ある程度の大きさになったので、モジュールを分けたり、ブック(エクセルの場合)した場合にDIMで宣言した変数で、ゴミが生じてしまいました。 無計画に、進めてしまった結果であることは重々承知していますが、どなたか、宣言のみして未使用となっている変数、定数を抽出するユーティリティーをご存じなかたいらっしゃいませんか? 宜しくお願いいたします。