
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も見ています
-
Functionの戻り値を配列にしたいのですが
Visual Basic(VBA)
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
VBで構造体の配列を関数に渡す方法?
Visual Basic(VBA)
-
-
4
VB.NET2005 TextBox 高さ(Height) 変更
Visual Basic(VBA)
-
5
VBのFunctionで、配列を引数や返却値にできますか?
Visual Basic(VBA)
-
6
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
7
VBでグローバル変数を宣言するには
Visual Basic(VBA)
-
8
配列を関数に渡す方法
Visual Basic(VBA)
-
9
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
10
値を返さないコード パス
Visual Basic(VBA)
-
11
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
12
SPREAD(GrapeCity)のセルにフォーカスを設定するにはどうしたらいいのでしょうか?
Visual Basic(VBA)
-
13
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
14
CloseとDisposeの違い
Visual Basic(VBA)
-
15
2次元動的配列の第一引数のみを可変にする
Visual Basic(VBA)
-
16
VB2008で定数に色の設定をしたいです。(初心者)
Visual Basic(VBA)
-
17
VBのReturnの使い方
Visual Basic(VBA)
-
18
VB.Net Object型 空かどうか
Visual Basic(VBA)
-
19
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
20
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
EXCEL VBA で、0から?1から?
-
【MFC】GetCount()とGetSize()...
-
変数を動的に作るには?
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
遅延バインディングを使用でき...
-
[EXCEL VBA] 配列メモリの動的...
-
VBでbyte配列型のインスタンス...
-
C言語のread関数に関するファイ...
-
配列の要素数を超えた参照のコ...
-
ログデータを表示するグラフに...
-
int型配列の一括初期化
-
System.err. printlnとSystem.o...
-
java キーボード入力された値の...
-
System.out.printlnの出力先
-
オブジェクトの中のプロパティ...
-
javaで質問です。 文字列2023/2...
-
ループ処理の際、最後だけ","を...
-
C言語のポインターに関する警告
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
C言語 重複しない4ケタの乱数...
-
EXCEL VBA で、0から?1から?
-
パソコンキーボードで時分秒を...
-
C#の質問
-
変数を動的に作るには?
-
配列の要素数を超えた参照のコ...
-
VBで作った乱数を一度も重複さ...
-
Excel VBAで配列の途中から(X)M...
-
Visual C++ でコントロールを...
-
VBでbyte配列型のインスタンス...
-
For文と配列
-
複数のテキストボックスに同じ...
-
五目並べのプログラムを配列と...
-
格闘ゲームのコマンド判定について
-
フォームコントロールのチェック
-
遅延バインディングを使用でき...
おすすめ情報