パス(文字列)からファイル名を抽出する必要があります。
例:"C:\ folder\folder\folder\file.txt" = "file"(または、 "file.txt"でも開始できます)
基本的に最後の\を含むすべての前
正規表現の代わりにワイルドカードを使用することを聞いたことがあります(VBAでの奇妙な実装ですか?)。
事前に乾杯。
助けてくれて kaveman に感謝します。パスと拡張子の両方を削除するために使用した完全なコードは次のとおりです(完全な証明ではなく、小数点以下2桁以上を含むファイルは考慮されません。例:* .tar.gz)。
sFullPath = "C:\dir\dir\dir\file.txt"
sFullFilename = Right(sFullPath, Len(sFullPath) - InStrRev(sFullPath, "\"))
sFilename = Left(sFullFilename, (InStr(sFullFilename, ".") - 1))
sFilename = "ファイル"
私はこれがVBAを使用して機能すると信じています:
Dim strPath As String
strPath = "C:\folder\folder\folder\file.txt"
Dim strFile As String
strFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
InStrRev
は、「\」の最初のインスタンスを最後から探し、位置を返します。 Right
は、指定された長さの右からで始まる部分文字列を作成するため、Len - InStrRev
を使用して必要な長さを計算します
コードのない解決策を探していました。このVBAはExcel数式バーで機能します。
ファイル名を抽出するには:
=RIGHT(A1,LEN(A1)-FIND("~",SUBSTITUTE(A1,"\","~",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))
ファイルパスを抽出するには:
=MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))))
より簡単な方法は次のとおりです。a1行の関数で名前を抽出only—ファイル拡張子なし— your example で指定したとおり:
_Function getName(pf):getName=Split(Mid(pf,InStrRev(pf,"\")+1),".")(0):End Function
_
...だから、あなたの例を使って、これ:
MsgBox getName("C:\folder\folder\folder\file.txt")
戻り値:
ファイル拡張子を保持しながらファイル名を抽出する場合、またはのみを抽出する場合パス、ここにさらに2つ単一行関数があります:
_
x:\path\filename
_からファイル名を抽出:_Function getFName(pf)As String:getFName=Mid(pf,InStrRev(pf,"\")+1):End Function
__
x:\path\filename
_からパスを抽出:_Function getPath(pf)As String: getPath=Left(pf,InStrRev(pf,"\")): End Function
_例:
( ソース )
Javaの使用:
String myPath="C:\folder\folder\folder\file.txt";
System.out.println("filename " + myPath.lastIndexOf('\\'));
`あなたも試すことができます:
Sub filen() Dim parts() As String Dim Inputfolder As String, a As String 'Takes input as any file on disk Inputfolder = Application.GetOpenFilename("Folder, *") parts = Split(Inputfolder, "\") a = parts(UBound(parts())) MsgBox ("File is: " & a) End Sub
このサブは、任意のファイルのフォルダ名を表示できます
そのためにFileSystemObjectを使用できます。
まず、de Microsoft Scripting Runtime(VB Editor Menu Bar> Tools> References))の参照を含めます。
その後、次のような関数を使用できます。
Function Get_FileName_fromPath(myPath as string) as string
Dim FSO as New Scripting.FileSystemObject
'Check if File Exists before getting the name
iF FSO.FileExists(myPath) then
Get_FileName_fromPath = FSO.GetFileName(myPath)
Else
Get_FileName_fromPath = "File not found!"
End if
End Function
ファイルシステムオブジェクトは、ファイルの操作、特にその存在を確認して移動する場合に非常に役立ちます。私はアーリーバインド(Dimステートメント)を使用するのが好きですが、必要に応じてレイトバインド(CreateObjectステートメント)を使用できます。
フルファイル名を取得するためにkavemanの提案もうまく使用しましたが、フルファイル名に多数のドットがある場合は、次を使用して.txtビットを削除しました。
FileName = Left(FullFileName, (InStrRev(FullFileName, ".") - 1))