プロが教えるわが家の防犯対策術!

パスの処理についてご教授下さい。
最後から3番目の¥マークから最後までを残して、それ以外は削除する方法を教えて頂けないでしょうか。マクロ、関数にて処理できる方法を希望します。

処理前
\aaa\bbb\ccc
\aaa\bbb\ccc\ddd
\aaa\bbb\ccc\ddd\eee

処理後
\aaa\bbb\ccc
\bbb\ccc\ddd
\ccc\ddd\eee

A 回答 (2件)

リアクションがないけれど・・・


コードのみで意味がわからず雑な回答と解釈されたのでしょうか・・
夜間に急いでいるとの事でしたのでマクロ、関数で使えるように
#1のようにFunctionとしましたが
関数として使うなら汎用性を持たせた方が良いのかも知れません
一応、改修コードと 使い方を示します
(コードは標準モジュールにコピペ)
"Function名は変更してください(変更せずに説明)

Public Function Example(strPath As String, symbol As String, n As Integer)
Dim buf, tmp As String, i As Integer
buf = Split(strPath, symbol)
On Error Resume Next
For i = UBound(buf) + 1 - n To UBound(buf)
If UBound(buf) >= n Then
tmp = tmp & symbol & buf(i)
Else
tmp = "#NUSymbol!"
End If
Next
Example = tmp
End Function

シート関数で使う場合
=Example(値のあるセル, 区切る文字, 右からの取得数)
A1に\aaa\bbb\ccc\ddd\eee ある場合
出力したいセルに =Example(A1,"\",3)  
ちなみに 3を2すると\ddd\eee

VBAから使う場合
A1セルからA3までをループ B列の同じ行に出力
Sub test()
Dim r As Range
Const symbol As String = "\"
For Each r In Range("A1:A3")
r.Offset(, 1) = Example(r.Text, symbol, 3)
Next
End Sub
"\"を変更で違う文字でも分ける事が出来ます
"#NUSymbol!"についてはシンボルの個数が満たない場合のエラー表示ですが仕様に合わせて変更してください
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。
補足説明までご提示頂きありがとうございます。
想定した結果通りに動作しました。

お礼日時:2022/12/26 20:24

Public Function Example(strPath As String)


Const n As Integer = 2
Dim buf, tmp As String, i As Integer
Dim ps As String
ps = Application.PathSeparator
buf = Split(strPath, ps)
On Error Resume Next
For i = UBound(buf) - n To UBound(buf)
tmp = tmp & ps & buf(i)
Next
Example = tmp
End Function
    • good
    • 0

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