配列を返す関数で、配列を返せない時の処理

昨日は、指定パス直下のフォルダ名を、配列として返す関数を作成した。
infoment.hatenablog.com

この関数では指定パス下にフォルダが無い場合、配列として返す値の数が0であるため、とりあえず数値「-1」を返す仕様とした。ただ何となく。
すると、羽毛田さんから以下のコメントが寄せられた。
(いつもありがとうございます)。

VBAだと「空配列」が作れるんですよね。
※空配列=デバッガで表示したときに「Array(0 to -1)」という感じで表示されるもの。正式用語ではないと思います。
これを返り値にしておくと、何かと便利だったような記憶が。

確かに、戻り値が配列の関数で、数値が戻るのは気持ちが悪い。
ということで、空配列の作り方を色々と調べてみた。
f:id:Infoment:20181028115305p:plain

すると、直ぐに見つかった。

Public Function GetSubFoldersSeq(folder_path As String) As Variant
    Dim TempCol As Collection
    Set TempCol = GetSubFoldersCol(folder_path)
    If TempCol.Count >= 1 Then
        GetSubFoldersSeq = ToArray(GetSubFoldersCol(folder_path))
    Else
        ' 今回の修正箇所。
        GetSubFoldersSeq = Array()
    End If
End Function

「-1」ではなく、Array()を充てるだけで良いらしい。
確かに、この通り(0 to -1)になっている。
f:id:Infoment:20181028115746p:plain

これを利用すると、昨日のテスト用モジュールは、例えばこのようになる。

Sub test()
    Dim SQC As New SequenceClass
    Dim seq As Variant
        seq = SQC.GetSubFoldersSeq("C:\Temp")
        If UBound(seq) <> -1 Then
            SQC.PasteArray Range("A1"), seq
        Else
            Range("A1") = "指定パス下にフォルダが存在しません。"
        End If
End Sub

また一つ、レベルが上がった(まだ下の上ぐらいだけど)。

参考まで。