エクセル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
--------------------------------------
No.4ベストアンサー
- 回答日時:
簡単にいっていまうと、Variantは小難しい事を考えなくてもそういう風に使えるよ、っていうことです。
イメージ的にはVriant型のでっかい変数の中にVariantの配列が入ってるみたいな感じですかね。
参考URL:http://pc.nikkeibp.co.jp/article/NPC/20070803/27 …
なるほど。わりました。
これはVriant型だから成り立つようですね。
その辺が混乱してたみたいです。
どうもありがとうござました。
No.3
- 回答日時:
エラーが出るのは、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()の()を外さなければいけません。
ありがとうござます。
>のように、eの配列要素に値を代入したり取り出したりするときだけで
>今回のように、eの配列全体を表すときなどは、()を付けることはできません。
ただhimajin100000様のおっしゃるように、配列を定義する際に、()をつけることでも
OKのようです。結局どちらがいいのか良く分かりません。
引き続きよろしくお願いします。
No.2
- 回答日時:
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
'コレでも通るっぽい
'質問文が何故通らないのかは解らん。
ああ神様!
動きました。どうもありがとうございました。
ただ配列の()が必要なときと必要ないときが違いが
分からないので、質問は継続します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
エクセルエラー13型が一致しませんの直し方教えて下さい。
その他(Microsoft Office)
-
-
4
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
5
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
6
String だと「 ByRef引数の型が一致しません 」というエラーが出ます。なぜ?
Visual Basic(VBA)
-
7
VBAで配列引数を値渡しできない理由
Visual Basic(VBA)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
10
VBA たまに変数がempty値になるエラー
Excel(エクセル)
-
11
Filter関数を用いた結果、何も検索されなかった場合
Visual Basic(VBA)
-
12
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
13
VBAで配列のNULL判定
その他(プログラミング・Web制作)
-
14
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
15
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
16
配列の値を置換するにはどうすればいいでしょう?
Excel(エクセル)
-
17
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
18
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
19
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
20
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# 配列の変数宣言について。
-
配列の参照渡しで型が一致しま...
-
配列を含む構造体の初期値について
-
配列で格納したものをmsgboxで...
-
メモリの初期値
-
C# Listを使わずに2次元配列の...
-
C言語 変換指定%sについてです。
-
C言語で特定列だけを抽出して配...
-
【C言語】配列の中に配列を入れ...
-
テキストファイルから文字列を...
-
配列をEraseしてもメモリが開放...
-
Excel、VBAのユーザーフォーム...
-
配列の重複削除について
-
RGB値を画像(PNG・BMPJPEGなど)...
-
【速いブラインドタッチ】手を...
-
Dimとは・・・
-
2次元配列を戻り値とする関数?
-
メモリーの確保について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
先頭アドレスとは何ですか?
-
C言語で特定列だけを抽出して配...
-
配列の参照渡しで型が一致しま...
-
VBで構造体の配列を関数に渡す...
-
C++ vectorに配列をプッシュしたい
-
【速いブラインドタッチ】手を...
-
unsigned char配列への入力の仕方
-
配列をEraseしてもメモリが開放...
-
【C言語】配列の中に配列を入れ...
-
ExcelVBAで質問です。離れた二...
-
4勤2休のシフト作成
-
Functionの戻り値を2次元配列...
-
Redimした動的配列はEraseする...
-
配列を含む構造体の初期値について
-
複数の選択範囲の行番号を個別...
おすすめ情報