• ベストアンサー

マクロ教えてください

マクロについての質問です。 サブルーチン間ですべての変数を共有する方法ってありませんか。 Call Prg(A,B,C) というやり方は知ってますが、サブルーチンの数が結構ありますし変数も多いため、 もっとスマート?にできないかなと思いまして。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >サブルーチン間ですべての変数を共有する方法ってありませんか。 通常、モジュールレベルの変数を使用しますね。 つまり、モジュールの先頭のプロシージャーの外で、変数を宣言します。しかし、Publicにするかどうかは、よく考えたほうがよいです。通常は、必要ありません。 Publicステートメントは、思わぬトラブルに発展することがありますので、私は、めったに使いません。せいぜい、プロジェクト・グループ内で、1つぐらいです。モジュールは、モジュール内で、ユーティリティを別にして、完結型にすれば、必要ありません。 それから、共有変数は、参照渡しになりますから、共有してよいものと、そうでないものは、十分に気をつけて区分けしたほうがよいです。そういうのは、スマートさとは別問題です。1つずつ丹念に、変数をつけておいたほうが、無難だと思います。

tarobei
質問者

お礼

御礼が遅くなり申し訳ありません。アドバイスありがとうございます。 参考にさせて頂きます。

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

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

モジュールの先頭で Public A As Long などとPublic 宣言してください。 Private C As Integer とPrivate 宣言すると、モジュール内でのみ共用可能になります。

tarobei
質問者

お礼

お礼が遅くなり申し訳ありません。参考にさせて頂きます。 ありがとうございました。

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

関連するQ&A

  • 隔絶されているサブルーチン間の通信の方法

    以下のようなFortranのサブルーチンとモジュールがあります。これを見ると、サブルーチンA,Bはモジュールa,bが別なのでデータ的に隔絶されていることになります。もし、このような場合、サブルーチンA,Bの間で何らかの変数を共有するようなことをしたい場合、どのような方法があるでしょうか。サブルーチンの引数を使うのは混乱の原因になりそうなので、できればmoduleの方で処理できないかと思うのですが。 混乱しそうなところなので、やり方をいろいろ比較して見てみたいと思います。Cではグローバル変数のように全体で共有する変数を用意するのかなと思いますが。 module a end module module b end module subroutine A use a end subroutin B use b end Fortranについてはここでは特設会議室はありませんが、どこかいいところがあるでしょうか。Cの専門家はいろんなことに通じていると思うのでここにお尋ねしました。よろしくお願いします。

  • マクロの作り方

    以下の様な処理をするマクロを作成したいのですが、マクロがなんなのか自体よく分かっておりません。 何点か質問があるのですが、どなたか教えていただけないでしょうか。 言語はC++です [質問] 1.マクロの引数にstring型の文字列は渡せるのでしょうか? 2.マクロ内の処理は、通常のプログラミングと同様の処理が可能なのですか?それともマクロ特有の記述形式が存在するのでしょうか?行末に\が必要という点は認識しています。 3.マクロ内で、マクロを呼び出すことはできるのですか? 4.__FILE__と__LINE__でファイル名、行番号を取得できるとおもうのですが、これを変数に代入することはできますか?(string a=__LINE__等) 5.以下の処理をマクロで行うことはできますか? [処理内容] A=タイトル B=詳細 C=ソースファイル名 とした場合、マクロにこれらの変数を渡し、それぞれ以下の処理を行いたいです。 1)Aが10文字以上の場合、11文字目以降を切捨て 2)Bが10文字以上の場合、11文字目以降を切捨て 3)Cに行番号を付加 4)A,B,Cを連結し、Dというマクロの引数に渡す

  • エクセルマクロのサブルーチン引数で配列を使用したい

    VBA初心者です。 エクセルのマクロを組んでいるですが、サブルーチンの引数を配列にしたいのですが、どうすればよろしいでしょうか? 下記に例を示します。 呼び出し(Call)とサブルーチンの配列変数の記載方法がわかりません。 特に気になるのは、サブルーチンの配列に配列数(下記であれば10)を記入する必要があるのか? 必要な場合、元の配列数を変更した場合、どうすればミスなく、漏れなく修正できるか、良い方法はありまんせんか? (例) (呼び出し側) Dim AA(10) As Integer Call Test(AA)     ← 引数はAAでよい?それともAA() Sub Test(ByRef AA As Integer) ← AA or AA() or AA(10) ? AA(3) = AA(2) + AA(1) 以上、お手数をおかけしますが、よろしくお願いします。

  • <文字列マクロについて>

    <文字列マクロについて> 皆さま お力を貸して下さい。 初心者で、何もわからず書いておりますがすみません。 下記の2つのマクロを教えて下さい。 ?横に並んだ「ある行」に在るデータを「列」に変換し、  指定した数だけ並べる    あいうえお    ←A1セルからE1まで5列(これは状況により変わる)       ↓(マクロ実行:3行同じ数だけ並べるという指定)  あ        →A1セルから下にひたすら、同じ文字が続き順に並ぶ  あ  あ  い  い  い  う  う        →A1セルから下に並べる(3行は指定できれば別の数字にも変えたい  う  え  え  え  お  お  お ?規則的に並んだデータのまとまりをセットで移動する。  例だと5つの塊(これは変数とおきたい)    あ A              a  い B              b  う C               c   え D               d  お E              e    ↓(マクロ実行)  あ  い  う  え  お  A  B  C  D  E      ・  ・  ・  ・    a b c d e    

  • マクロ記述の簡略化

    以前 教えていただいた式コピーの マクロについてなのですが A1にデータがあり B1に式があって その式をA列のデータがある部分までBにコピーするという 内容で教えていただきました。 これで同様にC1にも式があり その式をA列のデータがある部分までCにコピーするという 内容を付け加えたのですが とりあえずまったく同じマクロを記入して 変数を変えてB1部分の記述をCIに置き換えて ・・・という方法でしましたところ 当然ばっちり動くのですが なんせ同じ記述を2回しているので 見にくくなっていたり動作が遅くなりそうで もっとすっきりした記述があればと思っています。 なにか良い方法ありましたら御教授願います。 私に応用力がないものでお手数おかけいたします。 参照URLのfreezemoon様から教えていただいた マクロについてです。 http://okweb.jp/kotaeru.php3?q=936658

  • すべてのセルを乗じるマクロ

    すべてのセルを乗じる簡単なマクロなどの方法はありますか。 A1|B1|C1|D1 12|20|10|★ 普通ならA1からC1を乗ずるには D1に「=A1*B1*C1」に入れると思いますが、もっと簡単な方法はないのかなと。 とにかくセルに並んだものを乗じて計算するだけ。 足し算なら =SUM(A1:C1) ですが、掛け算でこのような方法がないかと。 =★(A1:C1)

  • VBAマクロ作成について

      A  B  C -------------- 1 ○○ 123 456 --------------- 2 □□ 789 123 --------------- 3 △△ 456 789 -------------- 上記のような表でInputBoxを使い「○○」と入力すると同じ行のB列「123」とC列「456」 「□□」なら「789」「123」のように値を取得し、変数に代入するような マクロを作成したいのですが、どのように記述すれば良いでしょうか。 初歩的な質問ですが、宜しくお願いいたします。

  • エクセル 行挿入のマクロについて

    こんばんは、エクセルのマクロについてお伺いします。 現在 A1:支店名 B1:連番 C1:在庫数 全部で1000行位入力があります。 ・A列には支店名 ・B列には連番は1・2・3~と1000件位 ・c列には在個数にはそれぞれ1桁から2桁の数字 【質問】 在庫数の数だけその連番の行を増やしたい。 例えば、 A2:東京支店 B2連番:1 C2在庫数:3 だとすると2行目のあとに2行挿入し在庫数が3なので下記のように3行にしたい。 A2 東京支店 B2連番 1 C2 在庫数 1 A3 東京支店 B3連番 1 C3 在庫数 空欄 A4 東京支店 B4連番 1 C4 在庫数 空欄 何せ数が多いのでマクロをお教え頂ければ助かります。 ※その際、支店名と連番は同じ物がはいるとありがたいです。 ※在庫数は空欄で構いません。 マクロでなくても方法があればお教え下さい。 よろしくお願い致します。

  • エクセルマクロで、他ブックのプログラムを実行する方法

    よろしくお願いします。 A.xlsとB.xlsがあるとします。 A.xlsの中にaというマクロプログラムがあるとしまして、 この中で色々と処理をするとします。そしてその処理結果(例えばxという変数)をB.xlsの中にあるbというマクロプログラムに渡してbを実行させたいのです。 aの中で、   Application.Run "B.xls!b" と書けば、bは走ってくれるのですが、xをbに渡す方法がわかりません。   Call b(x) のような感じでできないものでしょうか? 何卒よろしくお願いします。

  • マクロについて教えてください

    マクロ初心者です。 1日の各人の売り上げ数をシート1に入力しており、マクロのボタンを押すと シート2の同じ日の所に売り上げ数を飛ばそうと作っているんですが どうしてもうまくいきません。 シート1     5/25←日付     名前    売上個数     A君      59個     B君      60個     C君      67個 シート2             名前         A君  B君  C君   5月   25 水  59   60    67   ←25日の所にシート1の日付をみて、同じ日付の所に   26 木                  売上個数を飛ばしたい   27 金    どういうマクロを組んだらいいか教えてください。 よろしくお願いします。

専門家に質問してみよう