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

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

ファイル名がすべて同じ長さの場合は、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回使用することに注意してください。いずれの場合も、円記号(\)を別のものに置き換えます。最初はすべてをASCII値1に置き換え、2回目はそれらを何も(空の文字列)に置き換えて、元のパスにあったバックスラッシュの数を判別できるようにします。 MID関数は、(FIND関数とSUBSTITUTE関数を使用して)パスの最後の円記号の位置を特定し、それ以降のすべてを返すために使用されます。

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

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

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

マクロを使用する場合は、最後の円記号が見つかるまでパスを逆方向に進むマクロを作成できます。次に、円記号の後にすべてを返します。次の例は、セルB1で開始し、セル(セルA1)の右側にあるすべてのものを調べてから、ファイル名の抽出を開始します。列Aのすべてのセルをステップスルーし、ファイル名がある場合は列Bに入力します。

Sub GetFileName1()

Dim Delimiter As String     Dim Target As String     Dim sFile As String     Dim J As Integer     Dim iDataLen As Integer

Delimiter = "\"

Range("B1").Select     Do While ActiveCell.Offset(0, -1).Value <> ""

Target = ActiveCell.Offset(0, -1).Value         iDataLen = Len(Target)

sFile = "Delimiter Not Found"

For J = iDataLen To 2 Step -1             If Mid(Target, J, 1) = Delimiter Then                 sFile = Right(Target, iDataLen - J)

Exit For             End If         Next J         ActiveCell.Formula = sFile         ActiveCell.Offset(1, 0).Select     Loop End Sub

分割機能を使用できる場合は、はるかに短いバージョンのマクロを使用することもできます。この関数は、Excel 2000で提供されるバージョンのVBAで導入され、指定した区切り文字に基づいて文字列を引き離し、パーツを配列に詰め込みます。この例は、ユーザー定義関数として実装されたソリューションを示しています。

Function GetFileName2(File_Path) As String     Dim Parts

Parts = Split(File_Path, Application.PathSeparator)

GetFileName2 = Parts(UBound(Parts))

End Function

この使用法では、分割関数は、Excelが実行されているシステムに適切なパス区切り文字を区切り文字として使用します。結果の配列の最後の要素(UBound関数で決定)には、最後のパス区切り文字の右側にある元のパスの部分(ファイル名)が含まれます。この関数を使用するには、次のような数式をセルに入力します。

=GetFileName2(A1)

注:

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

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

このヒント(7333)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。