• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExelVBAで参照渡し)

ExelVBAで参照渡し

nishi6の回答

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

Sub Main()   Call subject1(Range("A1:B2")) End Sub Sub subject1(arg As Range)   Range("C1") = Application.Sum(arg) '使用例 End Sub または Sub Main()   subject1 Range("A1:B2") End Sub で動くと思います。 私は http://www.moug.net/tech/index.htm を参考にしています。

noname#209929
質問者

お礼

お早い回答ありがとうございます。 おっしゃられる通りにして動きました。 こんな単純なことを見落としてたとは。お恥ずかしい限りです。(でも一人で考えてても多分気付かなかったと思います) nishi6さんのお陰で大変助かりました。参考URLも参照しながら、分からない所があればまたお知恵を拝借するとおもいます。今回は本当にありがとうございました。

関連するQ&A

  • VBAのオブジェクトブラウザの見方

    VBAのオブジェクトブラウザの見方がよくわからないので教えてください。 たとえば、オブジェクトブラウザから「countif」を見ているのですが、   Function CountIf(Arg1 As Range, Arg2) As Double の部分の見方がよくわかりません。 (1)先頭の「Function」は、ワークシート関数だからFunctionと付いているのでしょうか? (2)「Arg1 As Range, Arg2」となっていますが、なぜ、Arg2の後に「As Range」がつかないのでしょうか? セルの範囲ではなく、VBAで指定できるからですか? (3)「 As Double」は何を指しているのでしょうか? 戻り値ですか? 数値で返ってくるからDoubleなのですか? 以上です。よろしくお願い致します。

  • コードで参照設定をする方法

    VBのコード内で、オブジェクトへの「参照設定」をさせる方法を教えていただけませんでしょうか。 目的は、自分のコンピュータでは参照設定してあるオブジェクトでも、ほかのパソコンではされていると限らないため、アプリ(実際はエクセルブック)の起動時に参照設定を強制したい。参照設定がないと、そのオブジェクト変数の宣言文がコンパイルエラーとなってしまいますよね・・・。 VBAのヘルプによればこちらのメソッド(object.AddFromGuid(guid, major, minor) As Reference)を使うといいような気がするのですが、参照設定したい先(具体的には「Microsoft Scripting Runtime(scrrun.dll)」)の「GUID」がわかりません。レジストリを探さないといけないのでしょうか・・・。探し方がわかりません。

  • アクセス(2003)のVBAでビット演算方法

    エクセルのマクロではビット演算ができましたが、アクセスではどのような方法があるのでしょうか? where in 文で値の自動生成も考えられますが、VBやVCでアドインも可能でしょうか教えてください。 '*********** Excel VBA Bit 演算 ************ Private Sub Boln() Dim MyBln As Boolean Dim Object1 As Range Dim Object2 As Range Set Object1 = Range("B11") Set Object2 = Range("B12") MyBln = Object1 And Object2 MsgBox MyBln End Sub '*********** Excel VBA Bit 演算 ************ 以上、宜しくお願いします。

  • 参照なバリアント

    VB熟達者というよりは、VBマニアな方々に質問です。 Sub Hoge(A) A = 6 End Sub Sub Main() Dim N As Long Hoge N Debug.Print N End Sub このコードを実行して "6" が出力されるのは明白です。 Hogeはバリアントの参照を取るにも関わらず、LongのNを渡してそのNに6を入れてくれました。 これは、VBが引数を渡す時点で変数A用のメモリ領域をかってに確保し、Nという変数の参照型を作ったということの証拠になります。 実際、DLLでAPIを用意して、バリアント構造体のVarTypeを調べたところ、未知の16387という数値が現れました。 これは、MSDNライブラリを見たところ、VT_LONG Or VT_BYREFのようです。 このように、VBでも参照型は存在していますが、隠蔽されています。 そこで、参照型をもっと自由に使いたいと思い、参照型を作るAPIを作ってみました。 しかし、=演算子で代入しようとしたところ、参照が解除されて通常のバリアント型に戻ってしまいます。 ただし、もともとある変数の参照であるバリアント変数を別の変数の参照に変えたもののときは、参照先に代入してくれました。 どうやらVBはケチなようで、VBが内部で引数として作った参照変数以外は、参照している先に代入はしてくれないようです。 この障害を乗り越える方法を思いついた方、ぜひ教えてください。

  • Phonetic[型が一致しません]になる理由

    Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic(Range("A1")) End Sub はうまくいくのに、 Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic("日本") End Sub ********************************************************* は、[型が一致しません]になるのはなぜでしょうか? オブジェクトブラウザを見ると、 Function Phonetic(Arg1 As Range) As String になってることから、rangeを指定しなくていけないからですか?

  • 参照渡しをする時は、渡される側は違う変数を使う?

    参照渡しをする時は、渡される側は違う変数を使うべきなのでしょうか? VBAのお勉強をしているのですが Sub test1() Dim mystr As String mystr = "a" Call test2(mystr) Call test3(mystr) End Sub Sub test2(ByRef mystr As String) MsgBox mystr End Sub Sub test3(ByRef mystr2 As String) MsgBox mystr2 End Sub この場合、test2とtest3ではどちらを使ったほうがいいのでしょうか? test3は、mystr2 というmystrとは違う変数を使っていますが、 test2は、test1のmystrと同じ変数を使っています。 test1と同じ変数を使おうが違う変数を使おうが どちらにしろ (ByRef 変数名 As String) で宣言するから、変わらないのでしょうか?

  • Range.Name プロパティの使い方

    VBAの勉強中のものです。(エクセル) 一つ一つヘルプを見て、検証して勉強していこうと思ってるのですが 使い方がわからないので教えてください。 Range.Value プロパティならうまくいくのですが、 Range.Name プロパティの使い方がわかりません。 ----------------------- Sub test1() MsgBox Range("a1").Name End Sub Sub test2() Dim R As Range Set R = Range("a1") MsgBox R.Name End Sub ----------------------- どちらも、アプリケーション定義またはオブジェクト定義のエラーです。になります。 ----------------------- Sub test1() MsgBox Range("a1").Value End Sub Sub test2() Dim R As Range Set R = Range("a1") MsgBox R.Value End Sub ----------------------- rangeにすればうまくいきます。 Range.Name プロパティの使い方を教えてください。アドバイスよろしくお願いします。

  • VB .NetのDLL参照について

    名前付パイプの処理をしているのですが、DLLが参照できません。 Public Class ClsJi01   Public Declare Function MakePipe Lib "\DLL\Point.DLL" (ByVal pipe_name As String, ByVal buf_size As Integer, ByVal max_instances As Short, ByVal hpipe As Integer, ByVal err_code As Integer) As Integer  Public Sub M_Pipe()   Dim r As Integer   Dim rpipe As Integer   Dim err_code As Integer   r = MakePipe("\\.\pipe\RS04", 255, 16, rpipe, err_code)  End Sub End Class Point.DLLは以前VB6.0の時に使用していたDLLで自作です。 これで実行すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出ます。 どうしたら良いのでしょうか?

  • Objectで宣言するのとObject型で宣言する

    Objectで宣言するのとObject型で宣言するのではどちらがいいでしょうか? エクセルです。 VBAでコードを作るにおいて、どちらのほうがいいのでしょうか? どちらも同じ動きをします。 Sub Sample1() Dim buf As Range Set buf = Range("A1") MsgBox buf.Value End Sub Sub Sample2() Dim buf As Object Set buf = Range("A1") MsgBox buf.Value End Sub ご回答よろしくお願いします。

  • ExcelからMailをしたとき漢字が出ない

    Excel上にあるセルの内容をメールにて送りたくて次のようなマクロでメールしたときに本文(.body)の文字が英数は出るのですが漢字が出ません どこを直せばよいか教えてください Sub Mail_01() Dim OutApp As Object Dim OutMail As Object Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .To = Sheets("MAIN").Range("U32") ’アドレスの入力 .CC = "" .BCC = "" .Subject = Sheets("MAIN").Range("U33") ’題目の入力 .Body = Sheets("MAIN").Range("U34") '.Attachments.Add ActiveWorkbook.FullName .Send End With Set OutMail = Nothing Set OutApp = Nothing 'Application.Quit End Sub それと.sendでダイアログが現れます。これを出なくしてプログラムを続けたいのですかどうすれば良いのでしょうか 2点よろしくお願いします