フルパスからパス名・ファイル名を分離するExcelVBA
VBAでファイルを開くためにはフルパス(ドライブ名+すべてのフォルダ名を指定してファイル名を入力すること)が必要ですが、開いたものの操作はファイル名のみで行うので、分離しなきゃいけないですよね。そんなときのコードです。
そもそもファイルとフォルダの区別が…
VBAとか以前にPCを触る上での超基礎だと思うのですが、日常的に業務でPCを使っているおじさま達にファイルとフォルダの話をすると「???」となる方も意外と多いので、一応おさらい。
フォルダはディレクトリとも呼びます。
どうも、クリアファイルとかを連想してファイル→入れ物と思ってしまうから混乱するみたいなんですよね。
パスは、ファイルの住所
パスの概念はこんな感じです。フルパスは、住所+名前という感じですね。ファイル名は必ず拡張子まで指定してください。
※この図のファイル名まで含めたフルパスのことをパスとも呼ぶのですが、この記事では便宜上この図で解説させてもらっています。
フルパスからパスとファイル名に分離する
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で仕様するプログラムは、誰かがファイルを移動してしまったり、フォルダ名を変更してしまったりでトラブルが起こりやすいです。
ルールを決めて管理するのももちろんですが、プログラム側でもパスのベタ打ちはできるだけ避けて、変数に格納できるような形にしておくなどの工夫が必要だよなーといつも思っています。
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。