• ベストアンサー

Optional について

エクセルのvbaエキスパートのスタンダードの問題でわからないのがあります。 Sub M_Proc ()  Dim a As Long  a = F_Proc(3)  MsgBox a End Sub Function F_Proc(Optional x As Long = 5) As Long  F_Proc = x * 2 End Function というコードで 質問1  Optional はどういう意味でしょうか? 質問2 Optional x As Long = 5 となっているのに xには3が代入されています。 この5は意味がないのでしょうか? よろしくお願いします。

  • bmgjtu
  • お礼率99% (478/479)

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

ヘルプをご覧下さい 以下抜粋 Optional 省略可能です。 指定した引数が省略可能であることを示します。 このキーワードを指定した場合、 引数 arglist のそれ以降の引数も省略可能でなければならず、 すべてキーワード Optional を付けて宣言する必要があります。 キーワード ParamArray を使った場合は、 どの引数に対してもキーワード Optional は指定できません。 つまり今回は省略した場合は、5 が適用されて 指定した場合はその値3が渡されるということです。

bmgjtu
質問者

お礼

分かりやすい説明ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

何でも質問せずとも、Googleで「Optionalキーワード」「VBA Optional」]照会すれば解説が沢山出るよ。基礎的な、定義みたいな質問はWEB照会してからにしたほうが良い。 http://officetanaka.net/excel/vba/statement/Function.htm http://www.relief.jp/itnote/archives/001832.php

bmgjtu
質問者

お礼

ありがとうございました。

関連するQ&A

  • ひっかけ問題にするためですか?

    Sub M_Proc() Dim a As Long a = F_Proc(3) MsgBox a End Sub Function F_Proc(Optional x As Long = 5) As Long F_Proc = x * 2 End Function vbaのサンプル問題なのですが、 F_Procの値は6になり、M_Procのaは6と表示されるのですが a= 5は何のためにあるのでしょうか? ひっかけ問題にするためですか? 「= 5」は意味のないコードなのでしょうか?

  • VBAについて質問させて下さい。

    VBAについて質問させて下さい。 Sub Exsample() Dim a As String a = "aaa" MsgBox Ketugou(a) End Sub Function Ketugou(x As String) Ketugou = x End Function このサンプルコードについて質問が2つあります。 【質問1】 なぜ x=a、 と言う式はないのに xにが代入されるのでしょうか? 【質問2】 なぜ MsgBox Ketugou(a) では aaa(aaa) とならないのでしょうか? a = "aaa" Ketugou= "aaa" になってるはずですが。 よろしくお願い致します。

  • As Longって二つ必要ですか?

    Sub test() MsgBox 税込み金額(100) & "円" End Sub Private Function 税込み金額(金額 As Long) As Long 税込み金額 = Int(金額 * 1.05) End Function 公式サイトのマクロなのですが As Longが2つあるのですが、二つ必要な理由を教えてください。 '2個目のAs Longが無くても問題なく動きました。

  • なぜ値が代入されるのかわからない

    Sub Sample1() Dim 文字 As String 文字 = "あああ" Call Sample2(文字) 'プロシージャSample2の引数に変数を渡して呼び出す End Sub Sub Sample2(a As String) MsgBox a End Sub ---------------------------------- をやってみて疑問なのですが、 なぜ a = 文字 がないのに、 aに”あああ”が代入されるのでしょう? aにウォッチ式の追加をあてて、F8で一行ずつステップインしてみると Sub Sample2(a As String) の部分で、 aに””あああ”が代入されています。 a = 文字 と Sub Sample2(a As String) は 同じ意味なのでしょうか?

  • msgboxの表示

    A列の値とC列の値をMsgboxに表示するにはどうしたらいいのでしょうか?C列で一番高い商品とその品名A列を表示させたいのですが・・ Sub hinmei() Dim i As Long For i = 2 To Range("C65535").End(xlUp).Row Dim x As Long Dim a As Long x = Cells(i + 1, 5) If Cells(i, 5).Value < x Then a = x End If Next MsgBox a End Sub

  • VBA 関数(Function) カッコの後のデータ型は必要?

    Function あ() あ = "あああ" End Function Sub test3() MsgBox あ End Sub と、 Function あ() As String あ = "あああ" End Function Sub test3() MsgBox あ End Sub は同じ動作をするのですがやはり「As String」をつけたほうがいいのですか? ウォッチウインドウで確認すると 「As String」がないほうは「Variant/ String」型ですが あるほうは「String」型のみです。

  • VBA関数の使い方がわからないです

    A1にはハイパーリンクとしてhttp://www.yahoo.co.jp/ が入っていて、標準モジュールで Sub Macro1() MsgBox HyperlinkAddress End Sub Function HyperlinkAddress(target As Range) As String HyperlinkAddress = target.Hyperlinks(1).Address End Function としたら、引数は省略できません。になるのですが、 どうすればいいですか? Sub Macro1() MsgBox Selection.Hyperlinks(1).Address End Sub これと同じような事を、関数を使って表現したいです。

  • 違いを教えてください。

    VBAについて質問です。 ///////////////////// Sub sample1(a As String) a = "abc" MsgBox a End Sub --------------------- Sub sample2() Dim a As String a = "abc" MsgBox a End Sub ///////////////////// sample1とsample2の違いは何でしょうか? どちらも標準モジュールに記載しました。 sample2はF5で実行できますが、sample1はF5を押しても何も起きません。 それだけの違いでしょうか? Sample1の使い道がわかりません。 ///////////////////// Option Explicit Sub sample2() Call sample1 End Sub --------------------- Sub sample1(a As String) a = "abc" MsgBox a End Sub ///////////////////// にしたら、 「引数は省略できません。(Error 449)」というコンパイルエラーになりました。

  • mySheet Is Nothing

    以下の処理を実行して、「代入されています。」というメッセージを表示したいのですが、 どのようにすれば良いのでしょうか? Sub 代入の確認() Dim mySheet As Worksheet If mySheet Is Nothing Then MsgBox "代入されていません。" Else MsgBox "代入されています。" End If End Sub

  • プロシージャーの外で宣言した変数の値の破棄の仕

    プロシージャーの外で宣言した変数の値の破棄の仕方について教えてください。 ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i End Sub ++++++++++++++++++ を実行すると、どんどん値が増えていきますが、 回避するには、 ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i i = 0 End Sub ++++++++++++++++++ とするしかないのでしょうか? ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i Set i = Nothing End Sub ++++++++++++++++++ としたら、エラーになりました。

専門家に質問してみよう