一回も披露したことのない豆知識

エクセル2003です。
いつもお世話になります。
以下のコードを実行すると「配列の型が一致しません。」というエラーが出ます。
typeNameで確認しても配列の型はvariant()で正しいと思うのですが。。。
皆様のお知恵を拝借させていただけないでしょうか。

--------------------------------------
Sub main()
Dim e As Variant
e = fuN()
Call pRo(e)  '←ここでエラーになる。
End Sub

Function fuN() As Variant
Dim a(0) As Variant
a(0) = "zero"
fuN = a
End Function

Sub pRo(ByRef c() As Variant)
'処理っす
End Sub
--------------------------------------

A 回答 (4件)

簡単にいっていまうと、Variantは小難しい事を考えなくてもそういう風に使えるよ、っていうことです。


イメージ的にはVriant型のでっかい変数の中にVariantの配列が入ってるみたいな感じですかね。

参考URL:http://pc.nikkeibp.co.jp/article/NPC/20070803/27 …
    • good
    • 0
この回答へのお礼

なるほど。わりました。
これはVriant型だから成り立つようですね。
その辺が混乱してたみたいです。
どうもありがとうござました。

お礼日時:2009/03/12 15:07

エラーが出るのは、mainで


Dim e As Variantと、eを配列で宣言してないのに
Sub pRo(ByRef c() As Variant) の引数を c() と配列にしてるからです。

  e = fuN()
これで初めて、eは配列になりますが、eに()を付けることができるのは
  A=e(0)
  e(0)=100
のように、eの配列要素に値を代入したり取り出したりするときだけで
今回のように、eの配列全体を表すときなどは、()を付けることはできません。

よって、

'-----------------------------------------
Sub pRo(c As Variant)  '●c()の()を外す
  MsgBox c(0)
End Sub
'---------------------------------------

のように、c()の()を外さなければいけません。
 
    • good
    • 2
この回答へのお礼

ありがとうござます。

>のように、eの配列要素に値を代入したり取り出したりするときだけで
>今回のように、eの配列全体を表すときなどは、()を付けることはできません。

ただhimajin100000様のおっしゃるように、配列を定義する際に、()をつけることでも
OKのようです。結局どちらがいいのか良く分かりません。

引き続きよろしくお願いします。

お礼日時:2009/03/12 10:40

Sub main()


Dim e() As Variant
e = fuN()
Call pRo(e) '←ここでエラーになる。
End Sub

Function fuN() As Variant()
Dim a(0) As Variant
a(0) = "zero"
fuN = a
End Function

Sub pRo(ByRef c() As Variant)
'処理っす
End Sub


'コレでも通るっぽい
'質問文が何故通らないのかは解らん。
    • good
    • 0
この回答へのお礼

ああ神様!
動きました。どうもありがとうございました。
ただ配列の()が必要なときと必要ないときが違いが
分からないので、質問は継続します。

お礼日時:2009/03/11 18:33

多分


Sub pRo(ByRef c As Variant)
で動くと思いますよ
そのまま配列として使えるはずです。

ちょっと自信がありませんが…
    • good
    • 0
この回答へのお礼

おお神様!
動きました。どうもありがとうございました。
ただ配列の()が必要なときと必要ないときが違いが
分からないので、質問は継続します。

お礼日時:2009/03/11 18:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A