• ベストアンサー

VBAで

VBAで モジュールAで定義された変数を、モジュールBに引継ぐ事はできますか? モジュールAである値の入っているセルを検索し、その行番号を変数 HitRowNo に入れます。 この変数 HitRowNo をモジュールBでも使いたいんですが、変数(の値?)を引継ぐことは可能ですか? 質問の意味がわかりずらいかもしれませんが、よろしくお願いします。

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

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.1

Public宣言すれば良いだけの話なんじゃ? http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html Public宣言をした変数は、そのプロジェクトが実行中はサブルーチンの状態に関係なく保持されますので。

apl_150
質問者

お礼

DimをPublicに変えたら出来ました! ありがとうございます。

関連するQ&A

  • エクセルVBA MATCHをユーザー定義関数で使う

    ユーザー定義関数の質問です。 ある値をB列で探し、見つけたセルの行番号を取得したいのですが分かりません。 条件が一つあってそれはAの値が10以下のものは検索から除外するということです。 例 A  B 6  50 5  45 7  2 12 45 11 9 例えばBが45かつAの値が10以上であるセルの行番号はこの例だと4になります。 ワークシート関数を使うと{=MATCH(45,(A1:A5>=10)*(B1:B5),0)}でできました。しかしユーザー定義関数で.Match(45, Worksheets("Sheet1").Range("A1:A5>=10") * Worksheets("Sheet1").Range("B1:B5"), 0)とやっても#VALUE!となってしまいました。何がおかしいのでしょうか。

  • Excel VBA 初心者です。 作成中のマクロわからないところ

    VBA初心者です。もしセルA1の値がAでセルB1の値がGでセルC1の値にJを含むなら、 セルD1の値を変数i に入れる。 上記を10行目まで繰り返す。 というマクロを作りたいのですが、行き詰ってます。 よろしくお願いします。

  • VBA 固定セルから可変セルへのハイパーリンク

    VBA、マクロの記述方法を教えてください ハイパーリンク元:ワークシート1のA1セル ハイパーリンク先:ワークシート2のcells(リンク先セルの行番号,リンク先セルの列番号) リンク先セルの行番号、リンク先セルの列番号はいずれもINTEGERの変数名、でハイパーリンクを張ろうとする時点(段階)でマクロによって値が定義(付与)されているもの、とします

  • エクセル VBA find は別シートを検索できますでしょうか?

    こんばんわ。マクロ初心者です。 皆さんいつも親切なご回答ありがとうございます。 早速ですが質問内容を記入いたします。 ・ブックA を開いています。 選択している行のC列セルの値を検索キーワードにして、 ブックB 内を検索し、検索結果のセルの3つ左のセルの値を、 ブックA で選択していたセルの同じ行のO列(15列目)に入力したいです。 ※ブックBをアクティベートする事無く行えますでしょうか? (他の処理と組合わせて行い、回数も多いので、  ブックA⇔ブックB アクティベートの往復は避けたいです。) 下のようなマクロを作成してみましたがうまくいきません。 どうかご指導よろしくお願いいたします。 --------------------------------------------------------------- dim 検索品目 as string dim fcell as object dim i as integer i = Selection.Row '選択行の3列目セルの値を変数『検索品目』に格納 検索品目 = Cells(i, 3).Value 'オブジェクト変数『fcell』に検索したセルを格納 Set fcell = Cells.Find(What:=検索品目, After:=Workbooks("ブックB.xls").Worksheets("sheet1").Range("G2"), LookAt:=xlWhole, searchorder:=xlByColumns) '検索したセルの3行左のセルの値を変数『オーダ番号』に格納 オーダ番号 = fcell.Offset(, -3).Value 'ブック A の選択行の15列(O列)にデータ入力 Cells(i, 15) = オーダ番号

  • ExcelのVBAにおけるLastRowという言葉

     ExcelのVBAにおいて、「最終行」即ち「(その列において)データが存在しているセルの中で最も下にあるセルの行番号」を取得する必要が生じる事が良くあります。  その様な場合には、Cells(Rows.Count,列番号).End(xlUp).Row か Range(列番号 & Rows.Count).End(xlUp).Row を用いて取得するのが主流ですが、多くの場合、最終行の行番号のデータが必要になるたびに取得しなおすのではなく、最初に取得した最終行の行番号を変数に格納しておき、最終行の行番号のデータが必要な場合はその変数を使って最終行の行番号を指定するのが普通です。  その様な最終行の値を格納する変数を使用する場合、私個人の場合は「何に使用するための変数であるのかという事を解りやすい変数名を用いる」という観点から、「LastRow」という変数名を好んで用いております。  この「LastRow」という変数名はあくまでそのVBAマクロ内だけで使用されるその場限りのものに過ぎない筈です。  しかし、このサイトのExcelのVBAに関する質問を眺めていると、例えば Range(”○○")からLastRowまで ○○セルからLastRowまで といった具合に、「LastRow」という言葉があたかも「『最終行の行番号』や『最終行のセル』を表す"一般名詞"」であるかの様に使用されている質問を時々見かける事があります。  これが「last row」であれば「最後の行」という意味の英語の言葉になりますから間違いとは言えません。  それに対し「LastRow」という単語は少なくとも英語には存在しません。  それにもかかわらず、「LastRow」という言葉が前述の様な一般名詞として使われているという事は、ExcelのVBAにおいて「LastRow」という言葉は、Excelのワークシートを使った処理における「作業列」などと同様のテクニカルタームになっているという事なのでしょうか?

  • VBA教えて下さい

    for nextの使い方がわかりません 変数を使用し条件に当てはまる数値だけ 処理するといった内容です 考えたコード sub test() dim a as variant dim b as variant dim i as variant with workbooks("book1").activesheet set a =.range("A5") set b =.range("B5") end with with workbooks("book2").activesheet for i = 80 to 110 if a = cells(i,1) then b.value = cells(i,2) end if next i end sub このコードにてやりたい事は まず、book1の今開いてるシートを参照し A5セル、B5セルをセットし (例えばA5は2と入力している B5セルは10000と入力している) 次に、book2の今開いてるシートを参照し もし、1行目の80~110どれかのセルの数字が 変数aと同じ値ならば (A行80~110行のセルの数字2があれば 例えば85列) 変数bの数字を2行目の80~110に条件に当てはまるセルに移す (B行85列にB5セルの値10000を移す) ()の部分は例えで書いてます 読みにくかったら無視でお願いしますm(__)m 指定の仕方など間違ってると思うので コードを書いてくれると助かります 回答お願いしますm(__)m

  • ExcelのVBA。public変数の値が消える

    VBAについて。Excelの2003や2007を使っています。標準モジュールで public 変数を定義しました。 ユーザーformを使い、パブリック変数に値を入れたり変更し、標準モジュールに戻ったとき、そのpabulic変数が resetされてしまっている事があります。全く同じマクロで、この現象が起こることと、起こらないことがあります。excelの2003でも2007でも、同じ現象が起こります。簡単なマクロで再現性のある具体的なものを示したいと思い、試しましたが、できませんでした。簡単なマクロでは、きちんとパブリック変数は保持されています。問題のあるマクロはかなり長いものなので、とても示せません。問題がどこにあるのかわかりません。このマクロで不都合があるという具体的なマクロを示すことができない状態での質問で、申し訳ありません。 また、このようなプログラミングをしていて思ったのですが、ユーザーフォームに対してユーザーが任意の引数を渡す方法あるいは、ユーザーフォームから引数を受け取る方法はあるのですか?今は、pubulic変数を用いたり、具体的なセルに値を代入したりしていますが、どう考えてもそれはエレガントではないし、汎用性もないと思います。引数で引き渡すのが一番綺麗でいいとは思うのですが、それが可能かどうかわかりません。

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

  • VBAでセルに値が入ったときにイベントを起こしたい

    VBAでタイトルのことをやりたいのですがどうやったらいいのか全く思いつきません。どなたかヒントをいただけないでしょうか? B列の10行目から2000行までの間限定で、5行ごとのセルに値を入れたときに動くようにしたいんです。 例としてB10に値が入ったらA10から下に連番をふります。(1から5) B15に値が入ったらその続きを入れたいんです(6から10) どのようにしたらいいでしょうか?

  • エクセルマクロを使用して異なるセルの重複データを探したい

    エクセルに以下のような値が入力されています。 A~Bは列番号 1~100は行番号 1 A B 2 11 14 3 12 15 4 13 13 . 100行まで続く A1からB100までに入力された値の中で、重複している値のセルを探して、セルの色を変えたいと考えています。 VBAを使って処理したいのですが、どなたかご教授頂けないでしょうか。宜しくお願いいたします。

専門家に質問してみよう