お世話になっています。
.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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
subの配列引数をoptionalで使う方法
Visual Basic(VBA)
-
VB.net 引数で配列変数を渡す際の要素数
Visual Basic(VBA)
-
-
4
すでにファイルが開かれている時のエラー回避
Visual Basic(VBA)
-
5
VB.NET で 二次元のハッシュはできるのか?
その他(プログラミング・Web制作)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
8
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
9
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
10
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 条件を指定した標準...
-
エクセルでエラーを無視して一...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excel オートフィルタのリスト...
-
Excelのセルの色指定をVBAから...
-
array関数で格納した配列の型を...
-
構造体を使った時刻表(C)
-
[エクセル]連続する指定範囲か...
-
Split関数でLong配列に格納する...
-
VBAでの100万行以上のデータの...
-
【VBA】 動的な変数(定数)の指定
-
VBAで指定期間の範囲を抽出し、...
-
エクセルVBAで変数をセルに一行...
-
表にフィルターをかけ、絞った...
-
Datatableへの代入
-
配列のSession格納、及び取得方...
-
SUMPRODUCT関数を用いた最小値
-
VB6.0 ファイルの一括読込み
-
.NET - 配列変数を省略可能の引...
-
Excelのオートフィルタで抽出し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
Excelのセルの色指定をVBAから...
-
[エクセル]連続する指定範囲か...
-
エクセルで、絶対値の平均を算...
-
VBA listBoxについて
-
表にフィルターをかけ、絞った...
-
VBA 配列に格納した値の平均の...
-
iniファイルのキーと値を取得す...
-
[VBA]改行入りのセルの値を配列...
-
配列がとびとびである場合の書き方
-
エクセルでエラーを無視して一...
-
DataSetから、DataTableを取得...
-
Excel オートフィルタのリスト...
-
Split関数でLong配列に格納する...
-
読み込みで一行おきに配列に格納
-
VB6.0 ファイルの一括読込み
-
SUMPRODUCT関数を用いた最小値
-
INDEX(D:D,L3)の意味は?
-
Dictionaryを使い4つの条件の一...
おすすめ情報