重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。

エクセル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」を取得するにはどうすればいいでしょうか。

A 回答 (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にパスと、階層を指定することで、文字列を分割してくれます。
    • good
    • 0

失礼!


'\'は、除去されないみたいですね。

仮に除去される場合は・・・

? Cutstr("C:\○○○\○○○\ABC\test1\test2.xls", "\" & CutStr("C:\○○○\○○○\ABC\test1\test2.xls", "\", 5) ,1)
C:\○○○\○○○\ABC

と、区切り文字に含めればよいです。
    • good
    • 0

同じ考え方のままでやるなら、2番目の「¥」を探せばよいのでは?



以下の1行を挿入
 If pos > 2 Then pos = InStrRev(ThisWorkbook.Path, "\", pos - 1)
    • good
    • 0

[イミディエイト]


? 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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!