
お世話になっています。
.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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- Visual Basic(VBA) Excel VBA ファイル取得について フォルダの中に、ファイル名“会議“を含むファイルが1つまた 9 2022/10/12 01:18
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- 英語 関係副詞の先行詞の省略について質問です 調べたところ、省略可能な先行詞は whereは「the pl 1 2022/12/07 22:00
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- 英語 関係副詞の 先行詞の 省略について質問です 調べたところ、省略可能な先行詞は whereに対して「t 1 2022/12/08 19:31
このQ&Aを見た人はこんなQ&Aも見ています
-
subの配列引数をoptionalで使う方法
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
VB.net 引数で配列変数を渡す際の要素数
Visual Basic(VBA)
-
-
4
【DB】同じトランザクション内でupdateとselectをしたときの結果値
その他(データベース)
-
5
DataGridViewの複数列を連動してソートしたい。
Visual Basic(VBA)
-
6
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
7
Integer変数をカラにしたいのですが
Visual Basic(VBA)
-
8
フォームの再読み込み
Visual Basic(VBA)
-
9
VB.net、テキストボックス入力制限、全角のみ
Visual Basic(VBA)
-
10
値を返さないコード パス
Visual Basic(VBA)
-
11
Validated イベントについて
Visual Basic(VBA)
-
12
VB.NET DateTimeの型について
Visual Basic(VBA)
-
13
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表にフィルターをかけ、絞った...
-
[エクセル]連続する指定範囲か...
-
ExcelのINDEXとMATCH関数でスピ...
-
配列がとびとびである場合の書き方
-
array関数で格納した配列の型を...
-
エクセルで、絶対値の平均を算...
-
VBAでの100万行以上のデータの...
-
EXCEL VBA 2次元配列に格納さ...
-
iniファイルのキーと値を取得す...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
Excelのセルの色指定をVBAから...
-
【VBA】 動的な変数(定数)の指定
-
FileListBoxでの複数ファイル選択
-
【VBA EXCEL2000 グラフ】 月...
-
SUMPRODUCT関数を用いた最小値
-
.NET - 配列変数を省略可能の引...
-
VB6.0 ファイルの一括読込み
-
16進数から2進数へ
-
DataSetから、DataTableを取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、絶対値の平均を算...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
Excel オートフィルタのリスト...
-
DataSetから、DataTableを取得...
-
array関数で格納した配列の型を...
-
読み込みで一行おきに配列に格納
-
.NET - 配列変数を省略可能の引...
-
【VBA】ユーザーフォーム リス...
-
配列がとびとびである場合の書き方
-
SUMPRODUCT関数を用いた最小値
-
iniファイルのキーと値を取得す...
-
VBAでの100万行以上のデータの...
-
エクセルでエラーを無視して一...
-
配列のSession格納、及び取得方...
-
VBA 配列に格納した値の平均の...
-
VB6.0 ファイルの一括読込み
-
Datatableへの代入
おすすめ情報