セル に、区切り文字としてバックスラッシュを使用し、バックスラッシュで終わるパス名がありますB5
(例: ) \\stack\over\flow\
。これを に短縮したいと思います\\stack\over\
。完全なパスから最後のパス コンポーネントと子パス コンポーネントを削除する数式が必要です\
。
答え1
C5に次の数式を入力します。
=REPLACE(B5,FIND("@",SUBSTITUTE(B5,"\","@",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1))+1,99,"")
答え2
構築するbosco_yip の回答それを簡略化して説明します。
=LEFT(B5,FIND("|",SUBSTITUTE(B5,"\","|",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1)))
SUBSTITUTE(B5,"\","")
内のすべてのバックスラッシュを削除しますB5
(空の文字列に置き換えます)。たとえば、B5
が の場合\\stack\over\flow\
、 になりますstackoverflow
。LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))
は、 内のバックスラッシュの数を数えるための一般的なトリックですB5
。そこから 1 を引くと、最後から 2 番目のバックスラッシュの数が得られます。SUBSTITUTE(B5,"\","|", <the above> )
最後から 2 番目のバックスラッシュを|
(縦棒) に置き換えます。FIND("|", <the above> )
見つける位置の|
最後から2番目のバックスラッシュです。当然、B5
に縦棒が含まれている場合はここで問題が発生しますが、 は|
Windowsのパス名では許可されていないことに注意してください。(対照的に、@
は有効な Windows ファイル名文字。LEFT(B5, <the above> )
B5
最後から 2 番目のバックスラッシュまでの値を取得します。
B5
に 1 つしか含まれていない 場合 \
(例: \
、foo\bar
または \Program Files
)、上記はエラーになることに注意してください。 が または の場合 B5
、 \\
結果 \\stack
は になります \
。
bosco_yip の回答同じように動作します。