バリーには、列に多くのファイルパスが含まれているワークシートがあります。彼は、各パスからファイル名(最後の円記号の右側の部分)だけを抽出する方法を望んでいます。彼は、テキストから列への機能を使用せずにこれを行う簡単な方法があるかどうか疑問に思います。

マクロを使用するかどうかに応じて、いくつかの異なる方法があります。

ファイル名がすべて同じ長さの場合は、RIGHT関数を使用して最後の文字を引き出すことができます。 (この数式は、フルパスとファイル名がセルA1にあることを前提としています。)

=RIGHT(A1,11)

これは、ファイル名が「text001.txt」のように常に11文字の長さであることを前提としています。ファイル名がインスタンスごとに異なる長さである場合、このアプローチは機能しません。代わりに、次の式を試すことができます:

=MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1), LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))

式はSUBSTITUTE関数を2回使用することに注意してください。いずれの場合も、円記号(\)を別のものに置き換えます。 1回目はすべてをASCII値1に置き換え、2回目は何も(空の文字列)に置き換えないため、元のパスに含まれていたバックスラッシュの数を判別できます。 MID関数は、(FIND関数とSUBSTITUTE関数を使用して)パスの最後の円記号の位置を特定し、それ以降のすべてを返すために使用されます。

ファイル名の長さが99文字を超えないことが確実な場合は、より短い式を使用できます。

=TRIM(RIGHT(SUBSTITUTE(A2,"\",REPT(" ",100)),99))

この数式は、すべての円記号を100個のスペースに置き換え、結果の文字列から右端の99文字を取得し(ファイル名の前にスペースがたくさんある)、すべてのスペースを削除します。

マクロを使用する場合は、区切り文字に基づいて文字列(この場合はフルパス)を分解する非常に短い関数を作成できます。

Function GetFileName(File_Path) As String     Dim Parts

Parts = Split(File_Path, Application.PathSeparator)

GetFileName = Parts(UBound(Parts))

End Function

短かったと言った!重い作業を行う関数は、指定した区切り文字に基づいて文字列を引き離し、パーツを配列に詰め込むSplit関数です。この例では、Split関数は、Excelが実行されているシステムに適切なパス区切り文字を区切り文字として使用します。

結果の配列の最後の要素(UBound関数で決定)には、最後のパス区切り文字の右側にある元のパスの部分(ファイル名)が含まれます。

あなたは仕事をするためにさらに短い関数を開発することができます:

Function GetFileName(File_Path) As String     GetFileName=Mid(File_Path,InStrRev(File_Path,"\")+1 End Function

いずれかの関数を使用するには、次のような数式をセルに入力します。

=GetFileName(A1)

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(12903)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。