フルパスからパス名・ファイル名を分離するExcelVBA

フルパスからパス名・ファイル名を分離するExcelVBA

VBAでファイルを開くためにはフルパス(ドライブ名+すべてのフォルダ名を指定してファイル名を入力すること)が必要ですが、開いたものの操作はファイル名のみで行うので、分離しなきゃいけないですよね。そんなときのコードです。


そもそもファイルとフォルダの区別が…

VBAとか以前にPCを触る上での超基礎だと思うのですが、日常的に業務でPCを使っているおじさま達にファイルとフォルダの話をすると「???」となる方も意外と多いので、一応おさらい。

120316-1

フォルダはディレクトリとも呼びます。

どうも、クリアファイルとかを連想してファイル→入れ物と思ってしまうから混乱するみたいなんですよね。

パスは、ファイルの住所

120316-2

パスの概念はこんな感じです。フルパスは、住所+名前という感じですね。ファイル名は必ず拡張子まで指定してください。

※この図のファイル名まで含めたフルパスのことをパスとも呼ぶのですが、この記事では便宜上この図で解説させてもらっています。

フルパスからパスとファイル名に分離する

Sub ファイル名分離()
  Dim file As String, i As Integer
  Dim file_name As String, path_name As String

  file = "C:\folder1\folder2\sample.xls" 'フルパス取得
  i = InStrRev(file, "\") '右から数えて最初の\の位置
  file_name = Right(file, Len(file) - i) 'ファイル名
  path_name = Left(file, i - 1) 'パス名

  MsgBox "ファイル名:" & file_name & vbNewLine & "パス名:" & path_name
End Sub

※環境によって半角¥が逆スラッシュのように見えるかもしれませんが、コピペして頂けるとVisualBasicEditorでは正常に表示されます。

右から“¥”の位置を検索してそこから左(パス)と右(ファイル)に分離しています。

特殊フォルダのパス

マイドキュメントやデスクトップのパスはPCによって違うので、ベタで指定してしまうと違うPCで使ったときにそんなパスねーよ!って怒られてしまいます。そんな時はコレ!

CreateObject("WScript.Shell").SpecialFolders("MyDocuments") 'マイドキュメントのパス
CreateObject("WScript.Shell").SpecialFolders("Desktop") 'デスクトップのパス

自分(現在プログラムを記述しているExcelファイル)のパスなどを取得することもできます。

ThisWorkbook.Path '自分のパス
ThisWorkbook.Name '自分のファイル名
ThisWorkbook.FullName '自分のフルパス

パス関連はトラブルが多い

複数の人間・PCで仕様するプログラムは、誰かがファイルを移動してしまったり、フォルダ名を変更してしまったりでトラブルが起こりやすいです。

ルールを決めて管理するのももちろんですが、プログラム側でもパスのベタ打ちはできるだけ避けて、変数に格納できるような形にしておくなどの工夫が必要だよなーといつも思っています。

公開日:2012/03/16
更新日:2014/01/06

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。