VBAでmyfile.pdf
からファイル名C:\Documents\myfile.pdf
を抽出するにはどうすればよいですか?
これは snippets.dzone.com から取得されます。
Function GetFilenameFromPath(ByVal strPath As String) As String
' Returns the rightmost characters of a string upto but not including the rightmost '\'
' e.g. 'c:\winnt\win.ini' returns 'win.ini'
If Right$(strPath, 1) <> "\" And Len(strPath) > 0 Then
GetFilenameFromPath = GetFilenameFromPath(Left$(strPath, Len(strPath) - 1)) + Right$(strPath, 1)
End If
End Function
Office 2000/2003のVBAでファイルとディレクトリを操作する最良の方法は、スクリプトライブラリを使用することです。 Microsoft Scripting Runtimeへの参照を追加します(IDEの[ツール]> [参照])。
ファイルシステムオブジェクトを作成し、それを使用してすべての操作を実行します。
Dim fso as new FileSystemObject
Dim fileName As String
fileName = fso.GetFileName("c:\any path\file.txt")
FileSystemObjectは素晴らしいです。特別なフォルダー(マイドキュメントなど)の取得、オブジェクト指向の方法でのファイルとディレクトリの作成、移動、コピー、削除など、多くの機能を提供します。見てみな。
Dir("C:\Documents\myfile.pdf")
ファイル名が返されますが、存在する場合のみです。
私はすべての答えを読んだので、もう1つ追加したいと思います。その単純さのために、私は勝つと思います。受け入れられた答えとは異なり、これは再帰を必要としません。また、FileSystemObjectを参照する必要もありません。
Function FileNameFromPath(strFullPath As String) As String
FileNameFromPath = Right(strFullPath, Len(strFullPath) - InStrRev(strFullPath, "\"))
End Function
http://vba-tutorial.com/parsing-a-file-string-into-path-filename-and-extension/ には、このコードに加えて、ファイルのパス、拡張子、拡張子のないファイル名でも。
Dim sFilePath$, sFileName$
sFileName = Split(sFilePath, "\")(UBound(Split(sFilePath, "\")))
完全なフォルダーのパスとファイル名の両方を提供するより堅牢なソリューションが必要な場合は、次のとおりです。
Dim strFileName As String, strFolderPath As String
Dim lngIndex As Long
Dim strPath() As String
strPath() = Split(OpenArgs, "\") 'Put the Parts of our path into an array
lngIndex = UBound(strPath)
strFileName = strPath(lngIndex) 'Get the File Name from our array
strPath(lngIndex) = "" 'Remove the File Name from our array
strFolderPath = Join(strPath, "\") 'Rebuild our path from our array
またはサブ/機能として:
Private Sub SeparatePathAndFile(ByRef io_strFolderPath As String, ByRef o_strFileName As String)
Dim strPath() As String
Dim lngIndex As Long
strPath() = Split(io_strFolderPath, "\") 'Put the Parts of our path into an array
lngIndex = UBound(strPath)
o_strFileName = strPath(lngIndex) 'Get the File Name from our array
strPath(lngIndex) = "" 'Remove the File Name from our array
io_strFolderPath = Join(strPath, "\") 'Rebuild our path from our array
End Sub
最初のパラメーターにファイルのフルパスを渡すと、フォルダーのパスに設定され、2番目のパラメーターにはファイルの名前が設定されます。
これは、Windows、Unix、Mac、およびURLパスで動作する簡単なVBAソリューションです
sFileName = Mid(Mid(sPath, InStrRev(sPath, "/") + 1), InStrRev(sPath, "\") + 1)
sFolderName = Left(sPath, Len(sPath) - Len(sFileName))
次のコードを使用して出力をテストできます。
'Visual Basic for Applications
http = "https://www.server.com/docs/Letter.txt"
unix = "/home/user/docs/Letter.txt"
dos = "C:\user\docs\Letter.txt"
win = "\\Server01\user\docs\Letter.txt"
blank = ""
sPath = unix
sFileName = Mid(Mid(sPath, InStrRev(sPath, "/") + 1), InStrRev(sPath, "\") + 1)
sFolderName = Left(sPath, Len(sPath) - Len(sFileName))
Debug.print "Folder: " & sFolderName & " File: " & sFileName
Excelマクロでファイル名を取得するには:
filname = Mid(spth, InStrRev(spth, "\", Len(spth)) + 1, Len(spth))
MsgBox Mid(filname, 1, InStr(filname, ".") - 1)
ファイルがディスク上に物理的に存在することが確実な場合の最も簡単なアプローチ:
Dim fileName, filePath As String
filePath = "C:\Documents\myfile.pdf"
fileName = Dir(filePath)
ファイルの存在が不明な場合、または指定されたパスからファイル名を抽出したい場合、最も簡単なアプローチは次のとおりです。
fileName = Mid(filePath, InStrRev(filePath, "\") + 1)
コードなしの代替ソリューションを次に示します。この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))))
この関数を使用しています... VBA Function:
Function FunctionGetFileName(FullPath As String) As String
'Update 20140210
Dim splitList As Variant
splitList = VBA.Split(FullPath, "\")
FunctionGetFileName = splitList(UBound(splitList, 1))
End Function
今入る
=FunctionGetFileName(A1) in youe required cell.
またはこれらを使用できます...
=MID(A1,FIND("*",SUBSTITUTE(A1,"\","*",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))
これはTwiggy @ http://archive.atomicmpc.com.a および他の場所から収集したものです。
'since the file name and path were used several times in code
'variables were made public
Public FName As Variant, Filename As String, Path As String
Sub xxx()
...
If Not GetFileName = 1 Then Exit Sub '
...
End Sub
Private Function GetFileName()
GetFileName = 0 'used for error handling at call point in case user cancels
FName = Application.GetOpenFilename("Ramp log file (*.txt), *.txt")
If Not VarType(FName) = vbBoolean Then GetFileName = 1 'to assure selection was made
Filename = Split(FName, "\")(UBound(Split(FName, "\"))) 'results in file name
Path = Left(FName, InStrRev(FName, "\")) 'results in path
End Function
ファイル名ではなくパスが必要でした。
そのため、コードでファイルパスを抽出するには:
JustPath = Left(sFileP, Len(sFileP) - Len(Split(sFileP, "\")(UBound(Split(sFileP, "\")))))
Function file_name_only(file_path As String)As String Dim temp As Variant temp = Split(file_path、Application.PathSeparator) file_name_only = temp(UBound(temp)) End Function
これが役に立てば幸いです。