Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Microsoft 365)
ファイルパスからフォルダパスを抽出したい
投稿日時: 23/09/05 10:18:32
投稿者: gorby

VBA初心者です。
 
1.やりたいこと。
 
セル位置("A1")に書いているファイルパスからフォルダパスを抽出してフォルダを開きたい。
 
2.悩んでいること。
 
セル位置("A1")に書いているフォルダパスを開くのは下記コードだと知りました。
 
-<参考コード:開始>-
Sub フォルダを開く()
 
Dim MyPath As String
 
    MyPath = Range("A1")
 
    Shell "explorer " & MyPath, vbNormalFocus
 
End Sub
-<参考コード:終了>-
 
現在、セル位置("A1")には下記のファイルパスが記入してあります。
C:\Users\aaaaa\bbbbb\ドキュメント\cccccc\banana.xlsx
 
このファイルパスからC:\Users\aaaaa\bbbbb\ドキュメント\ccccccを変数MyPathに代入するにはどうすれば良いでしょうか?
Split関数を使うのでしょうか?

回答
投稿日時: 23/09/05 11:22:48
投稿者: どら

参照設定でMicrosoft Scripthing Runtimeにチェックを入れておく必要がある。
 
Sub フォルダを開く()
  Dim Fso As New Scripting.FileSystemObject
  Dim MyPath As String
  MyPath = Fso.GetParentFolderName([A1].Value)
  MsgBox MyPath
  Set Fso = Nothing
End Sub

回答
投稿日時: 23/09/05 11:30:32
投稿者: hatena
投稿者のウェブサイトに移動

下記でどうでしょう。

    Dim MyPath As String
    MyPath = Range("A1").Value
    MyPath = Left(MyPath,InStrRev(MyPath,"\")-1)

回答
投稿日時: 23/09/05 12:03:22
投稿者: WinArrow

現時点の問題点は
>フォルダを開きたい
だから、フォルダパスが取得できれば、フォルダは開います。
 
でも、それだ絵ですよね?
 
開いてあと、何をしたいのでしょうか?
 
それによっては、
別な方法でフォルダを開いた方がよいかも・・・・
 
それから、A1セルには、手入力するのですか?
誤入力ということもあり得ます。
もし、誤入力したとしたら、意図したフォルダとは別のフォルダが開かれてしまいます。
 
 
マクロブックと同一パスを取得するならば、
セルにパスを入力する必要はありません。
 
 
 

投稿日時: 23/09/05 15:09:02
投稿者: gorby

WinArrow さんの引用:
現時点の問題点は
>フォルダを開きたい
だから、フォルダパスが取得できれば、フォルダは開います。
 
でも、それだ絵ですよね?
 
開いてあと、何をしたいのでしょうか?
 

フォルダを開いたあと、マクロは何もする必要はありません。フォルダを開いて終わりです。手作業とマクロを組み合わせた業務のため、このような仕様となっています。

投稿日時: 23/09/05 15:14:44
投稿者: gorby

 

hatena さんの引用:
下記でどうでしょう。
    Dim MyPath As String
    MyPath = Range("A1").Value
    MyPath = Left(MyPath,InStrRev(MyPath,"\")-1)

ご教示いただいたコードで、 変数MyPathにフォルダパスが正しく入っていることはローカルウインドウで確認しました。
しかし、次の
 Shell "explorer " & MyPath, vbNormalFocus
で"ファイルが見つかりません。"というエラーメッセージが出ます。exploreも起動しません。どうしてでしょうか?
 

回答
投稿日時: 23/09/05 15:19:50
投稿者: WinArrow

hatena さん、レスをお借りして
セルA1の値が間違っていた場合のコードを追加します。
 
Dim MyPath As String
  
    MyPath = Range("A1")
    MyPath = Left(MyPath, InStrRev(MyPath, "\") - 1)
     
    If Dir(MyPath, vbDirectory) = "" Then
        MsgBox "セルA1のパスは実在しません。"
    Else
        Shell "explorer " & MyPath, vbNormalFocus
    End If

投稿日時: 23/09/05 15:23:30
投稿者: gorby

どら さんの引用:
参照設定でMicrosoft Scripthing Runtimeにチェックを入れておく必要がある。
 
Sub フォルダを開く()
  Dim Fso As New Scripting.FileSystemObject
  Dim MyPath As String
  MyPath = Fso.GetParentFolderName([A1].Value)
  MsgBox MyPath
  Set Fso = Nothing
End Sub

ご教示いただいたコードで、 変数MyPathにフォルダパスが正しく入っていることはローカルウインドウで確認しました。
しかし、次の
 Shell "explorer " & MyPath, vbNormalFocus
で"ファイルが見つかりません。"というエラーメッセージが出ます。exploreも起動しません。どうしてでしょうか?

投稿日時: 23/09/05 15:33:45
投稿者: gorby

WinArrow さんの引用:
hatena さん、レスをお借りして
セルA1の値が間違っていた場合のコードを追加します。
 

デバッグ時のローカルウインドウで、変数MyPathに正しく開きたいフォルダパスが取得できていることは確認済みです。それにも関わらずどうして、次の
 Shell "explorer " & MyPath, vbNormalFocus
で"ファイルが見つかりません。"というエラーメッセージが出るのでしょうか?
 
そもそもフォルダを開いているのに、ファイルが見つかりませんというエラーメッセージが出るのは不可解です。

回答
投稿日時: 23/09/05 15:41:10
投稿者: WinArrow

横から失礼します。
>Shell "explorer " & MyPath, vbNormalFocus
で"ファイルが見つかりません。"というエラーメッセージが出ます。
 
こちらでテストの結果、エラーにはなりません。
 
しっかり確認してみてください。

回答
投稿日時: 23/09/05 15:48:14
投稿者: higejee

> Shell "explorer " & MyPath, vbNormalFocus
 
 explorer の後ろに間違いなく半角スペースはありますか?

回答
投稿日時: 23/09/05 15:56:44
投稿者: WinArrow

>で"ファイルが見つかりません。"というエラーメッセージが出るのでしょうか?
 
そもそも
> Shell "explorer " & MyPath, vbNormalFocus
このコード間違えいませんか?

回答
投稿日時: 23/09/05 16:01:11
投稿者: WinArrow

 shell に指定したパスが実在しない場合、
ドキュメントフォルダが開きます。
 
セルにパスを手入力している場合は、誤入力という可能性があります。
エラーにならないからといって、意図しない動きもチェックすることも重要です。
 

投稿日時: 23/09/05 16:45:48
投稿者: gorby

higejee さんの引用:
> Shell "explorer " & MyPath, vbNormalFocus
 
 explorer の後ろに間違いなく半角スペースはありますか?

 
VBA初心者のため、explorer の後ろの半角スペースが必要とは気づきませんでした。
"explorer"で実行していました。
explorer の後ろの半角スペースを挿入して問題解決しました。
ありがとうございました。