
お世話になります。
エクセル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件)
- 最新から表示
- 回答順に表示
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にパスと、階層を指定することで、文字列を分割してくれます。
No.3
- 回答日時:
失礼!
'\'は、除去されないみたいですね。
仮に除去される場合は・・・
? Cutstr("C:\○○○\○○○\ABC\test1\test2.xls", "\" & CutStr("C:\○○○\○○○\ABC\test1\test2.xls", "\", 5) ,1)
C:\○○○\○○○\ABC
と、区切り文字に含めればよいです。
No.2
- 回答日時:
同じ考え方のままでやるなら、2番目の「¥」を探せばよいのでは?
以下の1行を挿入
If pos > 2 Then pos = InStrRev(ThisWorkbook.Path, "\", pos - 1)
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数の入れ子ができない。
-
外部ファイル(テキスト)を取...
-
正規表現 ファイル名の取得
-
number_formatが勝手に四捨五入
-
正規表現に関する質問です。HTM...
-
C++ 共変 戻り値について
-
Let's Encryptで自動更新がされ...
-
どういうプログラムを関数化を...
-
String変数の文字列の検索方法
-
クラス内で上位クラス内メンバ...
-
ユーザー関数の外の変数は呼べ...
-
こういう事できますか?
-
Fatal error: Cannot use []
-
ファイルのフルパス splite?In...
-
.htaccessについて
-
静的多態性と動的多態性の共存...
-
コマンドプロンプト echo onで...
-
日付の比較
-
グーグルページランクの取得方法
-
PHPのプロセス滞留について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP、ヒアドキュメント内でのIF...
-
エラーの理由が分りません。Pri...
-
どういうプログラムを関数化を...
-
可変変数にアロー演算子を使いたい
-
protectedなのにアクセスできな...
-
PHPの名前空間インポートについて
-
ASPのResponse.WriteをPHPでは...
-
[C++]std:mapの扱いを教えて頂...
-
vb作成したらでbeep音が鳴りま...
-
PHPの変数値をリンクさせたい
-
次のhtml・cssでspan内の文字を...
-
既存関数の上書き
-
classの再定義エラーについて
-
[C#]Arraylistに追加した構造体...
-
.htaccessについて
-
共用体のサイズをsizeofで
-
PHPで呼び出し元の関数名の取得...
-
PHPでの画像の形式の変換
おすすめ情報