• ベストアンサー

参照なバリアント

msystemの回答

  • msystem
  • ベストアンサー率42% (79/186)
回答No.3

APIを作るということの解決案にはなりませんが、補足から勝手になぜそのようにしたいかを推測しました。 >Dim A As Variant, B As Long >MakeRef A, B とし、Aを変更すればBも勝手に変わる、またはその逆をしたいのでしょうか? もしそうであるなら、やはりクラスを作成しするのがいいように思います。 Dim obj1 as Object Dim obj2 as Object Set obj1 = New ClassA Set obj2 = obj1 とすれば、大丈夫なような気がします。 勝手な予想で、でしゃばって申し訳ありません。

haporun
質問者

お礼

それは一応私も考えてみました。 しかし、やっぱり、LongやDoubleの参照を作りたいわけです。 LongやDoubleのポインタを取得して、参照/代入を行うクラスも作ってみました。 最後にはやっぱりVariant型を懲らしめてやりたい(?)のです。

関連するQ&A

  • Variant型で宣言してるのにEmptyになる

    エクセルVBA2003について質問です。 Sub aaa1() Dim a As Variant Debug.Print TypeName(a) End Sub を実行してイミディエイトウインドウで確認すると Emptyが返ってきます。 Variantが返ってこない理由は何でしょうか? また、変数の方の宣言をしない場合は Variant型になるはずなのに Sub aaa2() Dim a Debug.Print TypeName(a) End Sub を実行すると、同じくEmptyが返ってきます。 Variantが返らない理由を教えてください。よろしくお願いします。

  • 別のSubで宣言されている変数を別のSubで参照

    よろしくお願いいたします。 環境:Excel2003 以下のようなイメージで別Sub内で宣言された変数を同じ変数名で別のSub内で参照したいです。 Sub hoge() nn As Integer nn = 1 End Sub Sub hogehoge() MsgBox (nn) End Sub Sub hogehogehoge() Call hoge Call hogehoge End Sub エラーが発生する為、typeについて検索をかけてみました所、以下のような変数参照方法は出てきましたが、別のSubで宣言されている変数を同じ変数名で別のSub内で参照する方法はないでしょうか? Type PData    hoge As String    hogehoge As Long End Type Sub Sample1()    Dim Pppp(5) As PData End Sub よろしくお願いいたします。

  • EXCELVBA Variantとobject

    毎度 お世話に、なります。 3つ、程 お伺いしたい の、です 先ず、1つ目 Variant型に、Set で 代入、したら 駄目 みたい、ですけど 昔から でしたで、しょうか? 後、2つ目 objectは 複数値を、持つ ポインタに、よる 実態参照の、変数 と、思っていた の、ですが Variantも 此の、意味では objectの 気が、します で、ですね objectは、set必須 と、 持って、いましたが variantは objectでは、無い の、ですか? そう、決めた 奴が、いる の、だから 仕方ない とか、 付けなくて、いい と、覚えれば 其れで、良いじゃん とか、 等と、いえば 身も、蓋も、 ない、ですが… 最後に、 以下の、コーディングで 前者を、後者に、 変えると Application.WorksheetFunction.SumProduct( の、所で 転けます 要因と、して 考えられる、もの には どの様な、ものが 挙げられる で、しょうか? お教え下さい 宜しくお願いします。 Sub test() Dim 合否行列1 As Variant, 演算式1 As String, 合格件数 As Long  Let 演算式1 = "(sheet1!" & Range(Cells(1, 3), Cells(1, 200)).Address & "=Sheet2!" & Range("A1:A100").Address & ")+0"  Let 合格件数 = CLng(Application.WorksheetFunction.SumProduct(Evaluate(演算式1)))  合格行列1 = Evaluate(演算式1) End Sub Sub test() Dim 合否行列1 As Variant, 演算式1 As String, 合格件数 As Long  Let 演算式1 = "(sheet1!" & Range(Cells(1, 3), Cells(1, 200)).Address & "=Sheet2!" & Range("A:A").Address & ")+0"  Let 合格件数 = CLng(Application.WorksheetFunction.SumProduct(Evaluate(演算式1)))  Set 合格行列1 = Evaluate(演算式1) End Sub

  • InputBox  String型・Variant

    VBAです。 InputBox  String型・Variant型がエラーにならない理由がわかりません。 Sub 日付型() Dim 日 As Date 日 = InputBox("値をいれてください") End Sub Sub 数値型() Dim i As Long i = InputBox("値をいれてください") End Sub Sub 通貨型() Dim 円 As Currency 円 = InputBox("値をいれてください") End Sub Sub String型() Dim a As String a = InputBox("値をいれてください") End Sub Sub Variant型() Dim v As Variant v = InputBox("値をいれてください") End Sub String型・Variant型以外は、 「実行時エラー '13'; 型が一致しません。」になります。 String型・Variant型はならない理由を教えてください。ご回答よろしくお願いします。

  • 変数に入っている変数の値を参照したい場合には

    var a1="123"; var a2="789"; と 変数に文字が登録されている場合、 引数として、1又は2を渡し、 1の場合にはa1を 2の場合にはa2の値を 参照することは可能ですか? switchやif文を使わずに、 別の変数に、"a"+引数を代入し、 その変数に代入されている変数を参照する というようなことは可能ですか? 意味わかりますか? すみません。 よろしくお願い致します。

  • ActiveX EXEのオブジェクトに渡したオブジェクトが微妙

    またまた微妙な質問ですみません。 ------- ActiveX EXEプロジェクト Class Hoge Public Sub Moge(lst) Dim Cast As ListBox MsgBox TypeName(lst) 'ListBoxと表示される Set Cast = lst 'ここがエラー Cast.List(2) = "hogehoge" 'キャストはできないがVariant型のままのアクセスは可能 End Sub ------- 標準EXE Class Form1 (List1を配置) Dim X As New Hoge Private Sub Form_Load() X.Moge List1 End Sub ----- このように、アウトプロセスのオブジェクトにフォームのコントロールを渡しました。 引数の型をAs ListBoxにしたかったのですが、それだとまずそこで型が一致しないといわれます。 しようがないのでVariantで引数を宣言し、渡した後にキャストしようと思ったのですが、そこでも型が一致しないといわれます。 TypeName関数は "ListBox" を返すし、Variant型のままメンバにアクセスすることはできるのですが、ListBox型の変数に代入することだけできないのです。 別プロセスのオブジェクトには、オブジェクトの参照は渡せないのでしょうか?

  • 自作ファンクションの引数の参照

    エクセルでオリジナルの関数を作るとき Public Sub abc(a as Range) ~ End Sub というようにレンジ型を引数にとった場合、例えばaにB5:E10を代入した時、各セル(aの中身)に入っている値を参照するにはどういう風に書いたらよいでしょうか?  ちなみにバージョンはEXCEL2000です。 よろしくお願いします。

  • 配列変数を引数として(参照)値渡しをしたいのですが

    プロシージャ間で配列変数を引数として(参照)値渡ししたいのですが、例えば以下のような場合、2箇所のXXX部分はどのように記述したらよいのでしょうか。 よろしくお願いします(Excel2000使用) Public Sub give()   Dim a(2) As Byte   a(0) = 3   a(1) = 15   take XXX End Sub Public Sub take(XXX)   (処理省略。受け取り側でも配列変数で処理したい) End Sub ※上記の例では配列の要素数が2ですが、実際はもっと多いので、例えば「take a(0),a(1),・・・」というふうな記述は(仮に適切なものであったとしても)記述しきれません。

  • VC6.0で作成したDLLでVBからの配列を受け取る方法

    VC++でDLLを作成しています。 VBから呼び出しで、配列を渡し、その配列の値を VCで使用したいのです。 通常変数でテストして、うまくいっているのですが、 配列に変更したところ、値がうまく渡りません。 どなたかお分かりになられる方いらっしゃいましたら お力をお貸し願えないでしょうか? 変数で成功しているプログラム VB6.0 標準モジュール Declare Function fncTest Lib "fncTest.dll" (a As Long) As Long フォーム Private Sub Test_Click() dim i as integer i = fncTest(1) End Sub VC++6.0 fncTest.h fncTest_API int _stdcall fncTest(int); fncTest.cpp fncTest_API int _stdcall fncTest(int a) { a = a+1; return a; } fncTest.def     省略 変数aを配列に変更して作ってみたもの(配列bにVBからの配列aの値を入れようとしていますが、 うまくいっていません。) VB6.0 標準モジュール Declare Function fncTest Lib "fncTest.dll" (ByRef a() As Long) As Long フォーム Private Sub Test_Click() Dim i As Integer Dim hairetu(7) As Long Dim values As Variant For i = 0 To 7 hairetu(i) = i Next i values = fncTest(hairetu()) End Sub VC++6.0 fncTest.h fncTest_API int _stdcall fncTest(int*); fncTest.cpp fncTest_API int _stdcall fncTest(int* a) { int b[7]; int i; for (i = 0;i <= 7;i++){ b[i] = a[i]; } return 0; } 以上よろしくお願いします。

  • [VB6/VBA] Variant型配列リテラルの書き方

    http://oshiete1.goo.ne.jp/qa4043791.html の#1のURIに http://exceler.blog68.fc2.com/blog-entry-20.html Dim a() As Variant // As Variant追加。As Integerとかは無理っぽい a = [{32,5,0}] //これ というような表記があるのですが,msdn.comもしくはmicrosoft.comのどこかに,この書き方に関する解説はありますか? VB.NETで Option Explicit On Option Compare Binary Option Strict On Option Infer Off Module Program Sub Main() Dim a() As Integer a = new integer(){1,2,3} End Sub End Module というような書き方が出来るのは知っているのですが。