- ベストアンサー
LBoundでフォルダ名を取得したい。
マクロで、フォルダ名を取得したいのですが、 どのように取得すればよいでしょうか? ThisWorkbook.Pathでパスを取得して \C:\***\△△△\○○○\XXX.xls だとすると、「△△△」だけを入力したいのです。 「△△△」は必ずCドライブから2階層下に あります。 パス名 = ThisWorkbook.Path tmp = Split(パス名, "\") MsgBox tmp(LBound(tmp)) としたところ「D」とうドライブ名が取得できたので MsgBox tmp(LBound(tmp,2))としてみたのですが、うまく 「△△△」の部分が取得できません。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
パス名 = ThisWorkbook.Path tmp = Split(パス名, "\") MsgBox tmp(2) こうゆう事では?
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
#2 は、読み間違えました。#2の内容は、無視してください。 パス名 = "\C:\***\△△△\○○○\XXX.xls" というなら、 MsgBox tmp(3) 最初に、\ がなければ、tmp(2)です。
- NYAx2
- ベストアンサー率27% (3/11)
LBound(tmp,2)はtmpが二次元の時つまり、tmp(n,0)、tmp(n,1)のように、n×2の構造のときに、要素の下限を調べる場合に用いるものです。 従ってANO.1の回答のようになりますが、多分tmp(3)になると思われます。 自分はANO.2の回答を支持します。
お礼
LBoundの使い方もありがとうございます!
- xls88
- ベストアンサー率56% (669/1189)
MsgBox ThisWorkbook.Path & vbCrLf & Split(ThisWorkbook.Path, "\")(2) tmp = Split(パス名, "\") 配列tmpのインデックスは、0からになります。 \で区切った3番目(インデックスは2)を取り出せば良いです。
お礼
なるほど、このやり方もあるのですね。 ありがとうございました!
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 初歩的なことですが、LBound ではなくて、UBound です。 でも、私なら、以下のように書きますね。 Split 関数を使う以上は、受ける変数 tmp は、Variant ですが、以下なら、tmp は、String型で済みます。 パス名 = ThisWorkbook.Path tmp = Mid(パス名, InStrRev(パス名, "\") + 1) MsgBox tmp
お礼
InStrRevも解説本に載っていたのですが 素人なので使い方が分からず、途方に くれておりました。勉強になります。 ありがとうございました!
お礼
おっしゃるとおりです。出来ました! LBoundは不要だったのですね! ありがとうございました。