マクロ講座配列の最も大きい部屋番号を返すUbound

配列の最も大きい部屋番号を返すUbound
配列の最も大きい部屋番号を返すUbound

マクロ 84回

ファイルのフルパスからファイル名だけ取り出す

ある配列をアパートに例えると、split関数を使ってたとえ何部屋あっても、部屋ごとに区切ることができますが、 その部屋数がいったい何部屋になるのかわからないということがあります。
配列の部屋番号のうち最大のものを調べるのはUbound関数です。ではその方法を考えていきましょう。

(サンプルファイルは、こちらから マクロ84回サンプルデータ

UBound

配列の最後のデータだけ取り出す

1. よくファイル一覧の名前を調べるというようなケースがあります。 特定のフォルダの中に入っているファイル名一覧を取得したいなどというときですね。 シートには、ファイルのフルパスが入力されています。そのフルパスから、1番最後にあるファイル名だけを取り出したいというわけです。


配列の最も大きい部屋番号を返すUbound1

2. このような時にはどうすればいいか。
データはA列に入っています。データはFor文で1行づつ処理します。変数iを使いましょう。
もちろんここでA列の値をsplit関数を使って部屋ごとに区切り文字「"\"」で区切ってやって、Variant型の変数に入れます。
次にUBound関数を使って最後の部屋番号を取得します。


配列の最も大きい部屋番号を返すUbound2

3. Split(Cells(i, 1), "\") で配列を受け取るVariant型の変数名を”ぱす”としてVarient型で宣言しましょう。 Dim ぱす As Variant
ぱす = Split(Cells(i, 1), "\")
 
これでぱすという配列ができました。その配列の中の一番最後のデータがファイル名となります。一番大きなインデックス番号を調べます。
Dim n As Long
n = UBound(ぱす)


配列の最も大きい部屋番号を返すUbound3

4. 一番大きなインデックス番号のなかにファイル名があります。
Cells(i, 2) = ぱす(n)
プロシージャにまとめてみましょう。

Sub ファイル名()
    Dim ぱす As Variant
    Dim i As Long, n As Long
    For i = 2 To 12
        ぱす = Split(Cells(i, 1), "\")
        n = UBound(ぱす)
        Cells(i, 2) = ぱす(n)
    Next
 End Sub

隣のセルにファイル名だけ取り出すことができました。


配列の最も大きい部屋番号を返すUbound4

ファイル名の他に、フォルダ名も取り出す場合

5. フォルダ名を取り出したいときは、配列のうしろから2番目(n-1)にある値を Cells(i, 2)に入れてやります。

Sub ファイル名とフォルダ名()
    Dim ぱす As Variant
    Dim i As Long, n As Long
    For i = 2 To 12
        ぱす = Split(Cells(i, 1), "\")
        n = UBound(ぱす)
        Cells(i, 3) = ぱす(n)
        Cells(i, 2) = ぱす(n - 1)
    Next
 End Sub

配列の最も大きい部屋番号を返すUbound5

6. このように、UBound関数を使うと配列のデータ数を知ることができ、Split関数を使う時にとても役に立つ関数です。


配列の最も大きい部屋番号を返すUbound6