• 締切済み

ファイルのフルパス splite?InstrRev?

お世話になります。 エクセル2003のVBAについての質問なのですが、 ファイルパスを分割して、変数に格納したいと考えております。 具体的には、現在のワークブックのパスである C:\○○○\○○○\ABC\test1\test2.xls というフルパスを「C:\○○○\○○○\ABC\」と「\test1\test2.xls」 に分割して、「\test1\test2.xls」だけを変数に格納して他の箇所に 利用したいのです。 下記を試してみたのですが、これでは、「test2.xls」のみしか取得することができません…。 Sub Sample1() Dim PathName As String, FileName As String, pos As Long pos = InStrRev(ThisWorkbook.Path, "\") FileName = Mid(ThisWorkbook.Path, pos + 1) End Sub 一つ上のフォルダ名を含む「\test1\test2.xls」を取得するにはどうすればいいでしょうか。

みんなの回答

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.4

Sub Test() Dim str As String Dim kaiso As Long kaiso = 2 str = "C:\○○○\○○○\ABC\test1\test2.xls" str = GetPath(str, kaiso) End Sub Public Function CntStr(s As String, org As String) As Long Dim i As Long Dim j As Long Dim k As Long k = Len(org) i = 1 j = 0 Do i = InStr(i, s, org) If i > 0 Then i = i + k j = j + 1 End If Loop Until i = 0 CntStr = j End Function Public Function GetPath(s As String, kaiso As Long) As String Dim i As Long Dim j As Long Dim k As Long k = CntStr(s, "\") If kaiso = 0 Then GetPath = "" Exit Function ElseIf kaiso > k Then GetPath = "" Exit Function End If j = 0 For i = 0 To k - kaiso j = InStr(j + 1, s, "\") Next i GetPath = "\" & Right(s, Len(s) - j) End Function こんな感じでいかがでしょうか? GetPathにパスと、階層を指定することで、文字列を分割してくれます。

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.3

失礼! '\'は、除去されないみたいですね。 仮に除去される場合は・・・ ? Cutstr("C:\○○○\○○○\ABC\test1\test2.xls", "\" & CutStr("C:\○○○\○○○\ABC\test1\test2.xls", "\", 5) ,1) C:\○○○\○○○\ABC と、区切り文字に含めればよいです。

すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

同じ考え方のままでやるなら、2番目の「¥」を探せばよいのでは? 以下の1行を挿入  If pos > 2 Then pos = InStrRev(ThisWorkbook.Path, "\", pos - 1)

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.1

[イミディエイト] ? CutStr("C:\○○○\○○○\ABC\test1\test2.xls", "\", 1) C: ? CutStr("C:\○○○\○○○\ABC\test1\test2.xls", "\", 2) ○○○ ? Cutstr("C:\○○○\○○○\ABC\test1\test2.xls", CutStr("C:\○○○\○○○\ABC\test1\test2.xls", "\", 5),1) C:\○○○\○○○\ABC\ ? Cutstr("C:\○○○\○○○\ABC\test1\test2.xls", CutStr("C:\○○○\○○○\ABC\test1\test2.xls", "\", 4),2) \test1\test2.xls このように CutStr関数の類を用意すれば簡単に文字列を分割できます。 '\'の処理は必要ですが・・・。 Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function

すると、全ての回答が全文表示されます。

関連するQ&A