VB.net 2010 の質問です。
配列変数を他のプロシージャに引数で渡す際の、配列変数の要素数をあらかじめ宣言していないとエラーになります。
Dim Hairetsu() As String ' ←エラー
Dim Hairetsu(100) As String ' ←正常
Public Sub aaa(ByRef Hairetsu() As String)
Hairetsu(0) = "Test" '←正常の場合と、エラーの場合
End Sub
Hairetsu(100) のように、要素数を宣言していると、エラーにならないのですが、
プログラム中、要素数がどこまで増加するか、分かりません。
Hairetsu()のように、要素数未確定の配列変数を渡すことは出来ないのでしょうか。
ご存知の方がいらっしゃいましたら、なにとぞアドバイスの程、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
まずは、VB.NETでの配列の正体を知っておいた方がよいでしょう。
http://msdn.microsoft.com/ja-jp/library/dd314345 …
特に
> 3-3-3 参照型としての配列変数
から下をよく読んで理解してください。
> Dim Hairetsu() As String
は、Stringの配列を覚えることができる変数Hairetsuを用意するだけで、配列の実体は用意されません。
上記URLの「図 3-11 Nothing が代入されるのは、あくまで配列変数 D 自体」が近い状態です。
この図の「配列の実体」が最初から存在しない、というものです。
> Public Sub aaa(ByRef a() As String)
> a(0) = "Test" '←正常の場合と、エラーの場合
※ 念の為、仮引数の名前を変えました。
このsubを aaa(Hairetsu) と呼び出した場合、 Hairetsu() しただけの場合は、a = Nothing となっています。
よって、 a(0) は Nothing(0) ということになり、そんなものは無いのでエラーになります。
※ エラーメッセージはちゃんと読みましょう。
※ 質問するなら、ただ「エラーになります」では対処しようがありません。
※ 正確なエラーメッセージを記載るようにしましょう。
※ 例えば、そのエラーは
※ 「 NullReferenceException "オブジェクトのインスタンスを指定する必要がある部分に null 値が指定されています" 」
※ とか表示されていませんでしたか?
対策ですが、いくつもあるので、目的によって選択することになります。
○ aaa内で Nothingだったら処理を中止するようなコードにする
例) if a is Nothing then exit sub
○呼び出し元で、Hairetuをredimしてからaaaを呼び出す。
○aaa内でredim する。仮引数aはByRefになっているので、呼び出し元の変数が変更される。
※ なお、参照型の特性として「a(0) = "Test" 」だけなら、ByVal a でも同じ「配列の実体」にアクセスすることになります。
○ sub aaaではなく、 function aaa() as String() 等といった配列も返す関数にする
○ List(of T) 等の可変長で配列っぽく使えるクラスを使う
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
つい集めてしまうものはなんですか?
人間誰もは1つ「やたらこればかり集めてしまう」というものがあるもの。 あなたにとって、つい集めてしまうものはなんですか?
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
VBのFunctionで、配列を引数や返却値にできますか?
Visual Basic(VBA)
-
-
4
Functionの戻り値を配列にしたいのですが
Visual Basic(VBA)
-
5
CloseとDisposeの違い
Visual Basic(VBA)
-
6
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
7
2次元動的配列の第一引数のみを可変にする
Visual Basic(VBA)
-
8
VB.NETで他のプロジェクトで作成したフォームを使う方法
Visual Basic(VBA)
-
9
配列を関数に渡す方法
Visual Basic(VBA)
-
10
VBで構造体の配列を関数に渡す方法?
Visual Basic(VBA)
-
11
Functionの戻り値を2次元配列にする方法
Visual Basic(VBA)
-
12
VBでグローバル変数を宣言するには
Visual Basic(VBA)
-
13
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
14
VB.NETで他のEXEを実行させる
Visual Basic(VBA)
-
15
VBのReturnの使い方
Visual Basic(VBA)
-
16
[VBA] Classから他のClassを呼び出す場合
Visual Basic(VBA)
-
17
VB.netでメソッドからコントロールを取得
Visual Basic(VBA)
-
18
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
19
文字数に合わせて、コントロールの幅を設定する方法
Visual Basic(VBA)
-
20
VB.NETでのイベントの途中終了
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
VBAで配列の計算
-
パソコンキーボードで時分秒を...
-
EXCEL VBA で、0から?1から?
-
遅延バインディングを使用でき...
-
C言語 重複しない4ケタの乱数...
-
変数を動的に作るには?
-
VBで作った乱数を一度も重複さ...
-
VB.net 引数で配列変数を渡す際...
-
動的配列が存在(要素が有る)か...
-
複数のテキストボックスに同じ...
-
配列の要素数を超えた参照のコ...
-
ジャグ配列とは
-
C#での画像送信プログラム(ネ...
-
javaで質問です。 文字列2023/2...
-
ダブルクォーテーションを含む...
-
1~100までの数字を表示し、か...
-
C言語のポインターに関する警告
-
【Ajax通信&Java】配列の受け取...
-
ORA-01858: 数値を指定する箇所...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンキーボードで時分秒を...
-
IF関数でEmpty値を設定する方法。
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
VB.net 引数で配列変数を渡す際...
-
変数を動的に作るには?
-
動的配列が存在(要素が有る)か...
-
C言語 重複しない4ケタの乱数...
-
VBで作った乱数を一度も重複さ...
-
配列の要素数を超えた参照のコ...
-
Excel VBAで配列の途中から(X)M...
-
【MFC】GetCount()とGetSize()...
-
For文と配列
-
複数のテキストボックスに同じ...
-
VBでbyte配列型のインスタンス...
-
遅延バインディングを使用でき...
-
格闘ゲームのコマンド判定について
-
ラジオボタンのチェックをEnter...
-
Visual C++ でコントロールを...
-
マップチップの当たり判定の出し方
おすすめ情報