
お世話になっています。
.NETでのコーディングを行っています。
標記の件ですが、初めてなので
.NETからなのか、もともとそうなのかは不明なのですが、
プロシージャの引数をOptionalで宣言すると、
省略された時の値を設定する必要がありますよね。
省略可能の引数を配列変数にしたい場合、どのように宣言したら良いのでしょうか?
初期値って言っても、今回省略可能にしたい変数は、
検索結果を格納するための変数ですので、
省略されたときには何の値も入っていなくて良いんです。
宣言部分は以下のとおりです。
Public Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _
ByRef Wstr_WeekNm() As String, _
ByRef Wstr_WeekNmR() As String) As Boolean
この、Wstr_WeekNmR()を省略可能にしたいのです。
このような場合、どうやって宣言するべきなのでしょうか?
ヘルプを見たのですが、よくわからなくて・・・(;_;)
念のため、省略された時に、何らかの値を設定する方法も知りたいです。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
>ByRefは、呼び出された関数内で値を変えるための変数という認識でよいのでしょうか?
そうですね、呼び出し元のコピー(ByVal)でなく、呼び出し元で渡した変数自身を直接変更するということです。
>取得したい検索結果が3個あり、2つだけ取得したい場合と、3つ全部取得したい場合があります。
そういう場合は、
引数が3つある関数と2つある関数と2つ作っておけば、いいような気がします。
あるいは、
#3の方の言われる様に(註:ByRefでいいです)
Optional ByRef Wstr_WeekNmR() As String = Nothing
optional指定をした場合は、配列の場合nothingしか指定できません。
(なので、質問文で言われるような「省略された時に、何らかの値を設定する方法」(定数の配列?)はありません)
そして、Wstr_WeekNmR is Nothingで省略されたかどうか調べればいいですね。
>(なので、質問文で言われるような「省略された時に、何らかの値を設定する方法」(定数の配列?)はありません)
なるほどです(笑)
今回はNothingでOKですので、希望どおりのことが出来ました。
とても勉強になりました。ありがとうございました。
No.5
- 回答日時:
#1です
下記の方法ではいけないのですか?
コーディング上でインテリセンスも出てきますのでスマートだと思いますが...
<既存のメソッドに「Overloads」を加える>
Public Overloads Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _
ByRef Wstr_WeekNm() As String, _
ByRef Wstr_WeekNmR() As String) As Boolean
<新規メソッドを追加する。既存のメソッドにスルーするように作成する>
Public Overloads Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _
ByRef Wstr_WeekNm() As String) As Boolean
Return CM_fun_b_Get_WeekdayNm(Wstr_WeekKb, Wstr_WeekNm, Nothing)
End Function
すみません!!
お礼をしたつもりがすっかり抜けてしまっていました(T.T)
Overloadsをヘルプで読んだのですが、あんまりよくわからなくて・・・_(^^;)ゞ
教えてもらったソースを読んで、しっかり理解したいと思います。ありがとうございました。
No.3
- 回答日時:
省略したい引数のところだけ
Optional ByVal 引数() As String = Nothing
> 検索結果を格納するための変数ですので、
> 省略されたときには何の値も入っていなくて良いんです。
結果を返す必要がないときがあるというなら、上記の方法でOK。
配列のdefaultvalueはnothingしか指定できない
ただし、配列の要素に値が入っていなくてもかまわないという理由で「省略可能」といっているなら、それは不可です
有り難うございました。
おかげさまでエラーが出なくなりました。
なるほど。Nothingを指定するのですね。
一生懸命Nullを指定しようとしてました(^_^;)
エラーになりますが・・・。
>配列のdefaultvalueはnothingしか指定できない
なるほど。
・・・まだまだVBの常識というものが
覚えきれていないことを認識しました。
とても勉強になりました。
有り難うございました。
No.2
- 回答日時:
>初期値って言っても、今回省略可能にしたい変数は、
>検索結果を格納するための変数ですので、
>省略されたときには何の値も入っていなくて良いんです。
配列変数は、参照型(ByRef)でないといけなくて、
しかも、それが、省略されることがある?
そんなことありえないのでは?(<勘違いだったらすみません)
参照されるべきものが、省略されているとしたら、その参照されるべき実体は、どこにあるのか?
仮に、実体を呼び出された側で作ったとして
省略されているのに、呼び出し元では、どうやって格納される検索結果を呼び出すのか?
とか、納得いきません。
少なくとも検索結果を格納すべき変数なら、省略できないと思います。
説明不足で申し訳ありません。
ByRef、ByValの違いがあんまり理解できていませんので、もしかしたらこれは逆かもしれないです。(ByRefは、呼び出された関数内で値を変えるための変数という認識でよいのでしょうか?)
そして検索結果を格納する変数についてですが、取得したい検索結果が3個あり、2つだけ取得したい場合と、3つ全部取得したい場合があります。
なので、最後の1個だけ省略可能にしたいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
エクセルで、絶対値の平均を算...
-
5
VBA 配列に格納した値の平均の...
-
6
構造体を使った時刻表(C)
-
7
Excelのオートフィルタで抽出し...
-
8
Excel オートフィルタのリスト...
-
9
16進数から2進数へ
-
10
ExcelのINDEXとMATCH関数でスピ...
-
11
EXCEL VBA 2次元配列に格納さ...
-
12
エクセルの行の削除を配列で高...
-
13
iniファイルのキーと値を取得す...
-
14
エクセルVBA コンボボックスの...
-
15
Dictionaryを使い4つの条件の一...
-
16
DataSetから、DataTableを取得...
-
17
エクセルVBAで変数をセルに一行...
-
18
配列がとびとびである場合の書き方
-
19
.NET - 配列変数を省略可能の引...
-
20
【VBA】配列に数式を仕込む方法...
おすすめ情報
公式facebook
公式twitter