• ベストアンサー

エクセルVBA サブルーチンの使い方

下記コードにて、MSGBOXで88を表示するには、どう変更すればよいですか? Sub aaa() bbb MsgBox b End Sub Sub bbb() b = 88 End Sub

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 (1)bbbプロシージャに引数を付ける Sub aaa() Dim b bbb b MsgBox b End Sub Sub bbb(ByRef a) 'ByRefキーワードは省略可 a = 88 End Sub (2)bbbをFunctionプロシージャにする Sub aaa() Dim b b = bbb MsgBox b End Sub Function bbb() bbb = 88 End Function (3)変数をモジュールレベルで宣言する Dim b Sub aaa() bbb MsgBox b End Sub Sub bbb() b = 88 End Sub

VitaminBB
質問者

お礼

回答ありがとうございます。 いろいろな方法があるのですね。 今後は教えていただいた方法を基本として、使っていきたいと思います。

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

その他の回答 (2)

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

・#2のお答えにも出ていますが、引数は値を渡すのに多く使われると思いますが、値を受け取って、乗せて戻る(この説明はイメージだけです)にも使えるようです。 しかし「通常呼び出される側での引数の値の変更はあまり行いません」と、ある解説書にありました。 Msgboxはabcが表示される。 Sub aaa() bbb b MsgBox b End Sub Sub bbb(c) c = "abc" End Sub ・普通はFunctionにして値を返す。 ・またはモジュール内で使えるモジュール変数、他のモジュールからも使えるパブリック変数を使えます。 http://www.moug.net/skillup/pmm/dn05-3.htm?PRINT http://www.moug.net/skillup/pmm/dn05-4.htm?PRINT

VitaminBB
質問者

お礼

回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
noname#7749
noname#7749
回答No.1

品質を下げることに最大限配慮しています。(毒) 'Option explicit ← 担当者が意味を理解できないのでコメントアウト。 Sub aaa() ' ← 他人に解読できないように意味がなるべくわかりにくい命名を採用。 'bbb MsgBox 88 ' ← 暗黙の型変換に期待。省略可能な引数は省略。 End Sub 'Sub bbb() 'b = 88 'End Sub

VitaminBB
質問者

お礼

回答ありがとうございます。 ”88”がbbb()内にて決定される場合はどうすればいいのでしょうか?

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

関連するQ&A

  • VBA コードを中断するには?

    下記コードにて、 aaaを実行し、Exit Subのところで実行そのものを終了させたいのですが、このままだとcccのコードが実行されてしまいます。 Exit Subのところをどう変更すればよいのでしょうか? Sub aaa() bbb ccc End Sub Sub bbb()  略  Exit Sub  ←ここをどう書けば良いですか?  略 End Sub Sub ccc()  略 End Sub

  • 【VB.NET】複数のサブルーチンをすべて一気に抜ける方法?

    【VB.NET】複数のサブルーチンをすべて一気に抜ける方法?  今晩は,いつも勉強させていただいております. 質問させていただきます.どうぞよろしくお願いいたします.  環境:Vista+VB2008 でございます。 例えば下のようなコードがあったといたしまして、  Sub AAA    Call BBB  End Sub  Sub BBB    Call CCC  End Sub  Sub CCC    '★  End Sub 特定の条件の時のみ、★マークのところで、動作を終了したい (Sub AAAのEnd Subに移動したい)場合、どのようにすべきでございましょうか?? Exit SubだとSub CCCしか抜けてくれませんし(Sub BBBから実行を続行してしまう)、 フラグ立てだと  Public フラグ as string =""  Sub AAA    Call BBB    If フラグ = "抜ける" then Exit Sub     End Sub  Sub BBB    Call CCC    If フラグ = "抜ける" then Exit Sub     End Sub  Sub CCC    If (抜けたい時)then     フラグ = "抜ける"     Exit Sub    End If     End Sub のように、コードが少し見にくくなってしまいます。。。 何か他のスマートな方法などございましたら、是非ともご紹介いただきたくお願いいたします。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • エクセルVBAでお願いします。

    エクセル2002使用です。 セルA1に 日付型で2004/9/25と間違いなく入っています。 その条件で下記のようにコードを打ちました。 Sub test() If Day(Range("A1")) = 30 Then MsgBox "yes" End If End Sub 25=30ならばmsgboxを表示なので、上記の例では表示してはいけないのに表示されます。 ちなみに=を<>不等号にしてもMsgboxが開きます。 おそらく型の問題だと思ったのですが、DAY関数はVariant型のintergerなので問題ないと思うのですが、理由がわかりません。 よろしくお願いします。

  • VBA 加算演算時のトラブル

    事務処理用に準備したVBA処理の数値合計チェックにて本来イコールとなるべきところ、ノットイコールと判定されてしまいます。当該部分を抜き出し、わかりやすくしたものが下記のロジックですが、ここで、test2,test4は結果がイコールとなるものの、test3の場合、ノットイコールとなってしまいます。どなたか、原因につき教えていただけませんか? Dim aaa As Double Dim bbb As Double sub test2() bbb = 16.67 + 16.67 aaa = 33.34 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End Sub Sub test3() bbb = 16.67 + 16.67 + 16.67 aaa = 50.01 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End Sub Sub test4() bbb = 16.67 + 16.67 + 16.67 + 16.67 aaa = 66.68 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End sub

  • エクセル2010のvbaについて

    Sub abc() Dim a Set a = Selection If a.Width * 4 / 3 <> 90 And a.Height * 4 / 3 - 1 <> 120 Then MsgBox ("120x90px以外の画像以外は挿入できません") End If End Sub 上のコードを実行するとなぜか120×90以外でも メッセージが表示されなくなります (Msgbox a.Width * 4 / 3は90 Msgbox a.Height * 4 / 3は120と正しく表示されます) 更に高さが1px多くなってしまいます(-1) (高さを調べても121pxではなく120pxでした) たまにvbaをしている時にあるので 回答と原因もお願いします

  • Excel VBA について教えて下さい

    Excel VBA でAccess接続します 今までは Sub aaa() Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub のように使っていましたが(単一プロシージャ) Set cn = CreateObject("ADODB.Connection") の部分をパブリックにして Sub bbb() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい

  • 別ブックのFunctionを呼び出し戻り値を取得

    こちらの識者の方々にはいつもお世話になっています。 関数の質問です。 タイトルが分かりづらくて申し訳ありませんが、詳細は下記ご参照ください。 環境は下記になります。 OS=windows7 pro 64bit Office=Excel2010(14.0.7128.5000) ・やりたいこと 別のBookのFunctionを呼び出し、戻り値を取得したい。 同一Book内であれば Module1: Sub aaa()  MsgBox bbb End Sub Module2: Function bbb() As String  If Date Mod 2 = 0 Then   bbb = "余り0"  Else   bbb = "余り1"  End If End Function というような書き方で、"余り0"か"余り1"のメッセージボックスが表示されますが、 Function bbbを別のブックに書き、同じく"余り0"か"余り1"のメッセージボックスが表示させるには、どのようなコードが適していますでしょうか? 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • エクセル:セルの検索

    Sheet1のC~G列を検索し、 [AAA]が見つかれば「成功」、見つからなければ「失敗」と表示するコードを作りました。 (実際のコードでは、AAAが見つかったセルBBBの.Addressや.Valueを使いたいので「Set BBB」などという書き方をしています)   Dim AAA As String Dim BBB As Range Set BBB = Worksheets("Sheet1").Range("C:G").CurrentRegion.Find(What:=AAA, LookAt:=xlWhole) If BBB Is Nothing Then MsgBox "検索に失敗" Else MsgBox "検索に成功" End If このコードで、C~D列にAAAがある場合は見つかるのですが、 E~G列にAAAがある場合は見つからず「検索に失敗」とメッセージが出ます。 また、 別のシートでも全く同じコードを使っているのですが、こちらは正常に動作します。 上に挙げたコードと違うところは検索範囲がE~I列だというだけです。 上記コードでとあるシートにおいてのみE~G列にある値が検索に引っかからない理由として、 どのようなことが考えられるでしょうか。 保護はかかっていません。 値が微妙に違うということもありません。 大文字小文字、半角全角の指定はしておりませんが、 C列で検索に引っかかった値をそのままG列に移動しただけで見つからなくなります。 なお、AAAに入れているデータは、 Private Sub Worksheet_Change(ByVal Target As Range) End Sub のTarget.Addressで、「$A$20」のような形で入っています。 Sheet1のC~G列に用意している値も「$A$20」のような形で直接書き込んでいます。

  • Excel VBAで検索(Win2000 Excel2000)

    現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub

  • 参照渡し(ByRef)

    参照渡しについてわからないのですが Option Explicit Dim buf As String Sub Sample1() buf = "aaa" Call Sample2("bbb") MsgBox buf End Sub Sub Sample2(ByRef a As String) a = "ccc" End Sub を実行すると、msgboxには、aaaが表示されますが、 途中のbbb,cccはどんな意味があるのでしょうか? また、 Sub Sample2(ByRef a As String) を Sub Sample2(a As String) にしてもコードは問題なく動きますが、 ByRefは役に立ってるのですか?

このQ&Aのポイント
  • 充電中に時間がしばらくすると、powerが赤点滅、statusがオレンジ点滅、bluetoothが青点灯になる現象について解決方法を知りたいです。
  • お使いのパソコンはWindows10で接続はbluetoothまたは無線LANです。
  • 関連するソフト・アプリや電話回線の情報は特にありません。
回答を見る