エクセル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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) IBM Notes9のメールをExcelVBAにて送信するコードについての質問です。 以下のコードを 3 2023/06/21 17:58
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 配列にしたセル範囲でのコメントがあるかどうかを取得するコードの書き方 2 2022/09/17 05:09
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
VBAで配列引数を値渡しできない理由
Visual Basic(VBA)
-
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
-
4
String だと「 ByRef引数の型が一致しません 」というエラーが出ます。なぜ?
Visual Basic(VBA)
-
5
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
6
エクセルでエラーが出て困っています。
Excel(エクセル)
-
7
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
8
エクセルエラー13型が一致しませんの直し方教えて下さい。
その他(Microsoft Office)
-
9
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
10
VBA たまに変数がempty値になるエラー
Excel(エクセル)
-
11
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
12
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
13
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
14
VBのFunctionで、配列を引数や返却値にできますか?
Visual Basic(VBA)
-
15
VBで構造体の配列を関数に渡す方法?
Visual Basic(VBA)
-
16
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
17
split関数で区切り文字がない場合
Visual Basic(VBA)
-
18
VBA アクティブでないシートのセルを選択したり、クリアしたり
Excel(エクセル)
-
19
Variant型で宣言してるのにEmptyになる
Visual Basic(VBA)
-
20
エクセルVBAのIF文の否定の複数条件
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C言語初心者 構造体 課題について
-
ExcelVBAで質問です。離れた二...
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
配列を含む構造体の初期値について
-
unsigned char配列への入力の仕方
-
C言語で特定列だけを抽出して配...
-
配列の参照渡しで型が一致しま...
-
複数の選択範囲の行番号を個別...
-
パイソンの
-
スマホの数字キーをISOの配置に...
-
VBでC言語のポインタみたい...
-
C言語初心者 ポインタについて...
-
配列をEraseしてもメモリが開放...
-
C言語 配列の再初期化
-
VB.NET 構造体の配列の検索機能...
-
擬似コード 長さがmの配列でな...
-
【速いブラインドタッチ】手を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列の参照渡しで型が一致しま...
-
配列を使わずに、変数名を動的...
-
VBで構造体の配列を関数に渡す...
-
配列で格納したものをmsgboxで...
-
unsigned char配列への入力の仕方
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
擬似コード 長さがmの配列でな...
-
【速いブラインドタッチ】手を...
-
パイソンの
-
C言語初心者 ポインタについて...
-
ExcelVBAで質問です。離れた二...
-
配列を含む構造体の初期値について
-
複数の選択範囲の行番号を個別...
-
Functionの戻り値を2次元配列...
-
C++ vectorに配列をプッシュしたい
-
先頭アドレスとは何ですか?
-
テキストファイルから文字列を...
-
Redimした動的配列はEraseする...
おすすめ情報