![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
エクセル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でループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
-
4
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
5
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
6
String だと「 ByRef引数の型が一致しません 」というエラーが出ます。なぜ?
Visual Basic(VBA)
-
7
エクセルでエラーが出て困っています。
Excel(エクセル)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
10
【Excel VBA】指定行以降をクリアするには?
Visual Basic(VBA)
-
11
VBA たまに変数がempty値になるエラー
Excel(エクセル)
-
12
エクセルエラー13型が一致しませんの直し方教えて下さい。
その他(Microsoft Office)
-
13
なぜこんな初歩的なVBAのIf文でエラーか発生して使えないのか、全く理解出来ません。誰か助けてくださ
Visual Basic(VBA)
-
14
VBA:日付を配列に入れ別セルに転記するとデータ型が変わる
Visual Basic(VBA)
-
15
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
16
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
17
Filter関数を用いた結果、何も検索されなかった場合
Visual Basic(VBA)
-
18
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
19
マクロの「SaveAs」でエラーが出るのを解消したいです(再)
Visual Basic(VBA)
-
20
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列で格納したものをmsgboxで...
-
配列を含む構造体の初期値について
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
VBでC言語のポインタみたい...
-
メモリの初期値
-
C言語で特定列だけを抽出して配...
-
先頭アドレスとは何ですか?
-
データベースの値を構造体へ代入
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
VBで構造体の配列を関数に渡す...
-
複数の選択範囲の行番号を個別...
-
【速いブラインドタッチ】手を...
-
VB.NET 構造体の配列の検索機能...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
defineを使った配列
-
4勤2休のシフト作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
配列の参照渡しで型が一致しま...
-
パイソンの
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
【C言語】配列の中に配列を入れ...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
2次元配列を戻り値とする関数?
-
【速いブラインドタッチ】手を...
おすすめ情報