配列を返す関数で、配列を返せない時の処理
昨日は、指定パス直下のフォルダ名を、配列として返す関数を作成した。
infoment.hatenablog.com
この関数では指定パス下にフォルダが無い場合、配列として返す値の数が0であるため、とりあえず数値「-1」を返す仕様とした。ただ何となく。
すると、羽毛田さんから以下のコメントが寄せられた。
(いつもありがとうございます)。
VBAだと「空配列」が作れるんですよね。
※空配列=デバッガで表示したときに「Array(0 to -1)」という感じで表示されるもの。正式用語ではないと思います。
これを返り値にしておくと、何かと便利だったような記憶が。
確かに、戻り値が配列の関数で、数値が戻るのは気持ちが悪い。
ということで、空配列の作り方を色々と調べてみた。
すると、直ぐに見つかった。
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)になっている。
これを利用すると、昨日のテスト用モジュールは、例えばこのようになる。
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
また一つ、レベルが上がった(まだ下の上ぐらいだけど)。
参考まで。