2012年12月3日月曜日

[ExcelVBA] マクロの登録で引数を渡す方法


アドベントカレンダー 3日目

関数A、関数B、関数Cがあってがあって、
ボタンによって、処理を変えたい時どうしましょう?



こんな状態。

結論からいえば、マクロの登録をする際に、引数を渡して処理を切り替えればよいわけですね。
方法は、関数名と半角スペースと引数をシングルクォートで囲めばOKです。
ただし、文字列の時は引数の部分をダブルクォートで囲みます。
引数同士はコンマで区切ればOKです。

例をあげてみます。
ブック名:test.xls
関数名 :Argument
以下に文末登場する[型]はArgument側で用意する引数の型です

1.引数を設定しない時のマクロの設定
test.xls!Argument

2.引数に一つ数字を指定する時[Integer]
test.xls!'Argument 123'

3.引数に一つ文字列を指定する時[String]
test.xls!'Argument "abc"'

4.引数を複数を指定する時[Double, String]
test.xls!'Argument 123.4, "abc"'

5.引数に日付を指定する時[Date]
test.xls!'Argument "2012/12/3"'

6.引数に計算結果を渡すことも可能です[Integer]
test.xls!'Argument 3*4'

7.引数に文字列の結合を渡すのも可能です[String]
test.xls!'Argument "a" & "b" & "c"'

8.引数に関数を指定することも可能です[Date]
test.xls!'Argument Now'
test.xls!'Argument Date'

9.引数にがっつり関数を使っても問題ありません[String]
test.xls!'Argument Replace(Now(), ":", "-")'


もう、これだけ練習すれば今回の問題は簡単に解決できますね。
では、最初の問題に戻りますよっと。
関数A、関数B、関数Cがあってがあって、
ボタンによって、処理を変えたい時どうしましょう?



答え。
ボタン:関数ABC実行
→test.xls!'SampleCode True, True, True'

ボタン:関数AB実行
→test.xls!'SampleCode True, True, False'
ボタン:関数BC実行
→test.xls!'SampleCode False, True, True'

ボタン:関数A実行
→test.xls!'SampleCode True, False, False'
ボタン:関数B実行
→test.xls!'SampleCode False, True, False'
ボタン:関数C実行
→test.xls!'SampleCode False, False, True'

Option Explicit

Sub SampleCode(ByVal argA As Boolean, ByVal argB As Boolean, ByVal argC As Boolean)

    If argA Then Debug.Print "関数Aを実行"
    If argB Then Debug.Print "関数Bを実行"
    If argC Then Debug.Print "関数Cを実行"
    
    Debug.Print "---"
End Sub

0 件のコメント: