2016-11-28 12 views
0

ファイルパスを含むExcelの列がある場合、Excelの式はファイル拡張子のみを返しますか?Excel VBA公式:ファイルパスからファイル拡張子を抽出しますか?

src\main\java\com\something\proj\UI.java - >java src\main\java\com\something\proj\Server.scala - >scala src\main\java\com\something\proj\include.h\someinclude.hpp - >hpp

注1:この式は、単一の周期でファイルパスのための素晴らしい作品ではなく、ケース3:
=IF(A1="","",RIGHT(A1,LEN(A1)-FIND(".",A1)))

注2:これらのファイルパスはWindows固有であることを理解していますが、クロスプラットフォームソリューションは必要ありません。

関連:triming extension from filename in ExcelHow to extract file name from path?

答えて

1

これが最後の.後にすべてのものを見つけるでしょう:A1、使用中のデータと

=MID(A1,FIND("{{{",SUBSTITUTE(A1,".","{{{",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))+1,LEN(A1)) 

enter image description here

+0

ありがとう!私はこれがどのように作用するのかを理解しようとしています。アプローチについて説明できますか? –

+0

@ user3633993最初に '.'の数を数え、最後の' .'を '{{{'に置き換えます。それから '{{{'とそれにテキスト文字列を分割します。 –

+2

分割するには '*'のような禁止された文字を使う方が安全かもしれません。これはコーナーケースですが、 '{{{.foo'は有効なファイル名です。 – Comintern

2

=SUBSTITUTE(RIGHT(SUBSTITUTE(A1,".",REPT(".",999)),999),".","") 

enter image description here

から:

Jim Cone's old post

+0

素晴らしいです、ありがとう!このアプローチを理解しようとしています - これがなぜ機能するのか説明できますか? –

+0

@BradWehrweinこれは、最後のピリオドの後の文字を他のすべての文字から999ドット分、または任意の数だけ切り離すために機能します。拡張文字とピリオドを選択するだけで、右端の999文字を選択できます。期間を代用すれば、あなたは行くつもりです。 – u8it

0

ここで素敵な長い答えがあります。私は時々、一般的に解析する文字列を使用:-)

=SUBSTITUTE(A1,LEFT(A1,FIND(CHAR(1),SUBSTITUTE(A1,".",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))),"") 
0

巧妙なトリックはFilterXML()機能(エクセル2013以降)を活用することです。基本的な戦略は、Substitute()を使用して文字列の書式を設定し、xml文字列内の要素を解析してから、xpathの構文を使用して、解析された要素を便利にナビゲートすることができます。

=FILTERXML("<A><p>" & SUBSTITUTE(A1,".","</p><p>.")&"</p></A>","//p[last()]") 

...拡張子は次のようになりますなって、この戦略を使用して、あなたがXMLに慣れていない場合は、これは威圧的に見えるかもしれませんが、あなたは何が起こっているかを把握することができるならば、私はそれがクリーンであることを見つけますlen()、substitute()などを使用する代わりのアプローチよりも覚えやすく、柔軟性があり、覚えやすくなります。なぜなら、1つのセル参照しかないからです。

不正な文字

ありパスで許可されている2つの文字があるではなく、XMLで:これらの文字が存在しない場合&'

上記の式は動作しますが、そうでない場合は、彼らが必要となりますこのように扱われる...

=FILTERXML("<A><p>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J8,"'",""),"&",""),".","</p><p>.")&"</p></A>","//p[last()]")

私たちは、このような厄介なファイルパスがあるとします。

C:\ Folder1に\フォルダ2 \(醜い文字@の#$%^()_ +! = {} ;;、 `)\ two.dots.LongExt Substitution()部分が、このようなXML文字列に変換します

1)...

<A> 
    <p> 
     C:\Folder1\Folder2\(ugly characters [email protected]#$%^()_+={};;,`)\two 
    </p> 
    <p> 
     .dots 
    </p> 
    <p> 
     .txt 
    </p> 
</A> 

2.)このようにフォーマットした後は、xpath構文//p[last()]を使用して最後のp要素を選ぶのは簡単です。

関連する問題