ユーザー定義関数で初期値が空っぽの場合

先日、ワークシート関数:TEXTJOINの存在を知った。複数のセルにある文字列を指定して、任意の文字で文字列を結合させることが出来る。

例えば、こんな感じだ。まず、セルにA,B,C・・・と一文字ずつ入力する。
f:id:Infoment:20190609133517g:plain

次いで、TEXTJOIN関数を用いて、これらを「,」区切りでつないでみる。
f:id:Infoment:20190609133505p:plain

これは、複数とびとびのセルを指定することもできる。
f:id:Infoment:20190609134127g:plain

これをユーザー定義関数で実現する場合、恐らくこんな感じになる。

Function Sample(delimiter As String, _
                ignore_blank As Boolean, _
                rng1 As Range, _
                rng2 As Range, _
                rng3 As Range) As String

※rng4 以降は割愛。

でもこれだと、rng1 ~ rng3・・・ を必ず指定しなければならない。では、rng2 以降を次のように設定するには、どうすればよいだろう。

  • rng2 以降の指定は任意(してもいいし、しなくてもいい)。
  • 指定していない場合、変数の中身は空。

そこで試しに、こんなものを作ってみた。

Function Sample(Optional rng As Range = Nothing)
    If Not rng Is Nothing Then
        MsgBox rng.Address
    Else
        MsgBox "指定なし"
    End If
End Function

テスト1:A1を指定

Sub test1()
    Sample Range("A1")
End Sub

テスト1の結果:
f:id:Infoment:20190609151450p:plain

スト2:何も指定しない

Sub test2()
    Sample
End Sub

スト2の結果:
f:id:Infoment:20190609151648p:plain

ということで今回、初期値が「Nothing」OKということが分かった。
これは使えそうだ。
あとは、rng1, rng2, rng3 ・・・ をループか何かで取り出せると便利なのだけど、これについては調べても答えが出てこない。
不可能なのかもしれないが、気長に調べるとしよう。

参考まで。