マクロ講座配列の最も大きい部屋番号を返すUbound
マクロ 84回
ファイルのフルパスからファイル名だけ取り出す
ある配列をアパートに例えると、split関数を使ってたとえ何部屋あっても、部屋ごとに区切ることができますが、 その部屋数がいったい何部屋になるのかわからないということがあります。
配列の部屋番号のうち最大のものを調べるのはUbound関数です。ではその方法を考えていきましょう。
(サンプルファイルは、こちらから
マクロ84回サンプルデータ)
配列の最後のデータだけ取り出す
1. よくファイル一覧の名前を調べるというようなケースがあります。 特定のフォルダの中に入っているファイル名一覧を取得したいなどというときですね。 シートには、ファイルのフルパスが入力されています。そのフルパスから、1番最後にあるファイル名だけを取り出したいというわけです。
2. このような時にはどうすればいいか。
データはA列に入っています。データはFor文で1行づつ処理します。変数iを使いましょう。
もちろんここでA列の値をsplit関数を使って部屋ごとに区切り文字「"\"」で区切ってやって、Variant型の変数に入れます。
次にUBound関数を使って最後の部屋番号を取得します。
3. Split(Cells(i, 1), "\") で配列を受け取るVariant型の変数名を”ぱす”としてVarient型で宣言しましょう。
Dim ぱす As Variant
ぱす = Split(Cells(i, 1), "\")
これでぱすという配列ができました。その配列の中の一番最後のデータがファイル名となります。一番大きなインデックス番号を調べます。
Dim n As Long
n = UBound(ぱす)
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
隣のセルにファイル名だけ取り出すことができました。
ファイル名の他に、フォルダ名も取り出す場合
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
6. このように、UBound関数を使うと配列のデータ数を知ることができ、Split関数を使う時にとても役に立つ関数です。