
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も見ています
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
Functionの戻り値を配列にしたいのですが
Visual Basic(VBA)
-
VB.NET2005 TextBox 高さ(Height) 変更
Visual Basic(VBA)
-
-
4
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
5
VBで構造体の配列を関数に渡す方法?
Visual Basic(VBA)
-
6
VBのReturnの使い方
Visual Basic(VBA)
-
7
VB.Net Object型 空かどうか
Visual Basic(VBA)
-
8
VBのFunctionで、配列を引数や返却値にできますか?
Visual Basic(VBA)
-
9
Functionで戻り値を複数返す方法
Visual Basic(VBA)
-
10
CloseとDisposeの違い
Visual Basic(VBA)
-
11
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
12
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
13
フォームの再読み込み
Visual Basic(VBA)
-
14
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
15
【VB.NET】App.configにファイルパスを設定して読み込みたい
Microsoft ASP
-
16
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
17
.NET - 配列変数を省略可能の引数にする方法
Visual Basic(VBA)
-
18
VBでC言語のポインタみたいな使い方?
Visual Basic(VBA)
-
19
Visual Basic.NETの、Form 間での引数の引渡し方法を教えてください。
Visual Basic(VBA)
-
20
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
変数を動的に作るには?
-
パソコンキーボードで時分秒を...
-
EXCEL VBA で、0から?1から?
-
キーボード
-
【MFC】GetCount()とGetSize()...
-
C# での文字列パディング
-
オブジェクトの中のプロパティ...
-
ダブルクォーテーションを含む...
-
ORA-01858: 数値を指定する箇所...
-
Javaで改行などが出来ないのです。
-
java 拡張for map
-
JSPでImportエラーになります
-
全角英数字とハイフンを半角に...
-
Path型をString型へ変換する(Java)
-
BufferedReaderでのエラー
-
カタカナの小文字を大文字に変...
-
JSPやサーブレットでSystem.out...
-
getStringの値がNULLの時の処理
-
クエリの結果とレコードセット...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
動的配列が存在(要素が有る)か...
-
変数を動的に作るには?
-
パソコンキーボードで時分秒を...
-
EXCEL VBA で、0から?1から?
-
VB.net 引数で配列変数を渡す際...
-
C言語 重複しない4ケタの乱数...
-
VBAで配列の計算
-
C#の質問
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
VBで作った乱数を一度も重複さ...
-
Excel VBAで配列の途中から(X)M...
-
VBでbyte配列型のインスタンス...
-
遅延バインディングを使用でき...
-
【MFC】GetCount()とGetSize()...
-
10進数を4桁のバイト配列に格納...
-
ジャグ配列とは
-
空き番号探し
-
排列と配列の漢字の使い分けは
おすすめ情報