• 締切済み

フォルダ名だけを取得するVBA

VBAを使ったエクセルテンプレート適用ツールを作成しているのですが そのVBAのことで教えてください。 現在自作のフォーム上にあるテキストボックスにフルパスが入っているとします(添付図参照)。 *この前提は必須と考えてください。 次に作成ボタンをクリックすると Step1 新しいブックが開かれ行幅や書式などが自動で調整されます。 Step2 ブックの保存ダイアログが自動で開きます。     ただし、保存ダイアログが開いた時点で自作フォーム中の     テキストボックスで指定したフルパスに移動しており、     且つ移動先のフォルダ名(<-注意!!フルパス名ではありません!!)と     同じ文字列をファイル名入力欄に自動で入力されるようにします。    ex) D:\MyProject\Project01\TaskA\にブックを作成し保存する場合、      保存ダイアログのファイル名欄にTaskAとだけ書く。 マクロ自体はここでストップし、これ以降はユーザーがそのファイルメモで 保存してよいかどうかを判断し、問題なければ手動でダイアログ上の「保存」ボタンを押します。 問題はStep2で、保存先のフォルダ名と同じ文字列を保存ダイアログのファイル名に記入するには どのようなコードを書いたらよいでしょうか。 私自身としては下記の二案を考えているのですがそれぞれについて疑問があるので教えてください。 案1 作成ボタンを押した時点でテキストボックスに書かれているフルパスの文字列から   末尾にあるフォルダ名だけを取得して変数に代入し、これを保存ダイアログの   ファイル名欄に反映させる。   疑問:テキストボックスのValue値に書かれているフルパスを示す文字列から      末尾のフォルダ名だけを取得するためのコードは何と書けばよいのでしょうか? 案2 ブックの保存ダイアログが開いて保存先のパスに移動してから今保存ダイアログで    開いているフォルダ名を取得する。    疑問:今アクティブになっているブックが保存されているフォルダ名だけを取得する    方法なら確かあったような気がしています。    しかし今保存ダイアログで表示されているフォルダ名を取得するコードは何と    書けばよいのでしょうか?    そもそもそういったコードや操作自体VBAにあるのでしょうか?

みんなの回答

回答No.2

こんばんは。 >そもそもそういったコードや操作自体VBAにあるのでしょうか? あるというよりも、ゴリ押しという感じですね。 あまり自然なコードとは言えませんね。なぜかというと、 >保存ダイアログのファイル名欄にTaskAとだけ書く。 ここが特殊です。ミスタイプした時は、エラーを出すか、新たにフォルダーを作るかどちらかになってしまいます。 だから、私などは、 Application.Dialogs(xlDialogSaveAs).Show Application.GetSaveAsFilename と、使うのが通例で、あまり凝った方法はしません。 私は、フォルダを選ぶために、こんなものを使っていました。 昔作ったものが、Windows7 だと違うコードになりましたので、ちょっと変形になってしまいました。 フォルダーを選ばせるダイアログを出すものです。ただし、フォルダーの数が多すぎると、使いづらいです。 '// Dim objShell As Object Dim wsShell As Object Dim wsSysEnv As Object Dim User As String Dim objFolder As Object Set objShell = CreateObject("Shell.Application") Set wsShell = CreateObject("WScript.Shell") Set wsSysEnv = wsShell.Environment("PROCESS") User = wsSysEnv("USERNAME") Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください。", _          0, "C:\Users\" & User & "\My Documents\") MsgBox objFolder.Self.Path '// 最後の、「"C:\Users\" & User & "\My Documents\"」が、ベース(基点)となるわけです。 --- >今アクティブになっているブックが保存されているフォルダ名 myPath = CurDir() 「今保存ダイアログで表示されているフォルダ名を取得するコードは何と書けばよいのでしょうか?」というなら、 Filename = "C:\Users\TestUser\Documents\Text\test2014-04-29.txt" myPath = Left(Filename, InStrRev(Filename, "\")) 'myPath は、"C:\Users\TestUser\Documents\Text\" と取れる など、いくつか方法はあります。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

ファイル名を含むパスからフォルダパスを取得するには Dir関数でファイル名を取得してから元のパスからファイル名を消せば手軽にできます。 http://officetanaka.net/excel/vba/tips/tips78.htm 以下サンプルです 'Dim buf() As Variant file_path = "U:\テストフォルダ\テストファイル.txt" '置換でフォルダパスを取得 Debug.Print Replace(file_path, Dir(file_path), "") '1文字ずつチェック For i = Len(file_path) To 1 Step -1 If Mid(file_path, i, 1) = "\" Then Debug.Print Left(file_path, i): Exit For Next i Dirは存在するファイルのファイル名を取得するため、実際にファイルが無い場合はほかの方法を使ってください ほかにもsplitで[\]で区切った後、最後の要素を外して結合し直すとか。

関連するQ&A

  • VBAであるフォルダにあるフォルダを取得

    VBA初心者です。 フォルダの階層を下に掘ってパスの文字列を生成したいのですが あるフォルダの中にある全てのフォルダ名前を取得するにはどうしたらいいのですか?

  • ExcelのVBAでフォルダ名の取得

    お世話になります。 タイトルのままなんですが、 VBAでフォルダのフルパスを取得したいのですが出来るでしょうか? ファイルのフルパスは FN = Application.GetOpenFilename で取得出来たのですが 同じ様に ダイアログから選択する様に出来るでしょうか?

  • フォルダ内のフォルダ名を取得したい。

    VBAで Filename = Dir(Path, vbNormal)を使用すると、ファイル名が取得されます。(VBA一部掲載) フォルダ内の直下のフォルダ名のみ取得したいときはどうすれば、よいでしょうか。 宜しくお願いします。

  • VBAでアカウント名を取得する方法

    VBAで処理したEXCELブックをデスクトップに自動保存しようとしています。VBAで現在作業中のユーザーアカウント名を自動で取得する方法を教えていただきたいのですが。 デスクトップ上にブックを保存するには、パスを記述すればよいのですが、現在PC毎にユーザーアカウントを設定しユーザー名が異なっています。 このため、PC毎にこのユーザー名をデスクトップへのパスに入れ込まなければなりません。毎回キーボードからこのユーザー名を入力する方法もありますが、自動的にユーザー名を取得し、正しいパスを指定する方法を検討しています。 どなたか、VBAでこのユーザー名を取得する方法が有れば教えていただきたいのですが。 よろしくお願いいたします。

  • VBAエクセル・・・フォルダ名を取得する

    VBA初心者です。 マクロで、ヘッダー部分にフォルダ名を入力したいのですが、 どのように取得すればよいでしょうか? ThisWorkbook.Path にすると、パスが出てきますが、 \C:\***\△△△\○○○\XXX.xls だとすると、「○○○」だけを入力したいのですが・・・ よろしくお願いいたします。

  • エクセルVBAでテキストボックスの値の取得と変更について

    エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。 環境:WindowsXPでオフィス2002 状況: エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C) エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい 試した事: コントロールを配置したシートに次のマクロ TEXTBOX_C.Text = "これはコントロールのテキストボックス" を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。 また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

  • ExcelVBA/ダイアログボックスで選んだファイルのファイル名を取得したい

    ExcelのVBAについて教えてください。 「ファイルを開く」の時に出てくるようなダイアログボックスを表示させ、そこで選択したファイルのフルパス+ファイル名を文字列形式で取得したいのですが、どのようにしたら良いでしょうか? 自分でヘルプファイルもある程度調べてみたのですが、よく分かりませんでした。 最終的には、ワークシート上に画像ファイルを挿入し、その作成日付をセルに表示するようなものを作りたいのですが、 Application.Dialogs(xlDialogInsertPicture).Show では、画像は挿入されるものの、挿入した画像のファイル名を取得できないので、日付が調べられないのです。 宜しくお願いします。

  • フォルダ内のファイル名の取得

    開発環境 VB2008 少し前にVB始めたばかりです。 簡単なプログラム作成を行っているのですが フォルダ指定のダイアログで指定した、フォルダの中にあるファイル名のリストをリストボックスなどに出力したいのですが、コードがわかりません。 色々似たような質問などがあったのですが、理解不足か知識不足なのか使いこなせなさそうなので、新しく質問させていただきました。 わかりやすく教えていただけるとうれしいです。 よろしくおねがいいたします。

  • フォルダ内にあるファイル名を取得するVBA

    エクセル2010を使用しています。 VBA(マクロ)で以下の作業を実行したいと考えていますが、 初心者につき、ご教示いただけますでしょうか。 「マクロ」ファイルにある「実行」Sheetというにある「実行」ボタンで L2に入力したパス内にあるファイル(.xlsや.xlsmや.xlsbが混在しますが、基本的には全てエクセルファイル)のファイル名を K8から下へ取得したいのですが・・ 参考にしたコードでは うまく動作しませんでした。 以下では、L2のパスを参照するのも組めていないため、コード内に直接パスを書き込んでいますが 実際は、パスを変動させて使いたいので、L2を参照できるようになると助かります。 ※パスは、質問用に仮置きで「パス」としています。 Sub Sample() Dim buf As String, cnt As Long Const Path As String = "パス" buf = Dir(Path & "*.*") Do While buf <> "" cnt = cnt + 8 Cells(cnt, 11) = buf buf = Dir() Loop End Sub また、このコードでは 実行ファイル自体のファイル名も取得してしまうようなので、 実行ファイル以外のファイル名を取得したいです。 ご指導のほど、よろしくお願い致します。

  • ワード2000のVBAについて

    ワード2000を使っています。 VBAで、ダイアログボックスを開き、指定したファイルのファイル名をフルパスで取得したいのですが、下記のコードでは、ファイル名しか取得できません。 どのようにしたら、フルパスを取得できるのでしょうか? たびたびすみませんが、誰か教えてください。 Dim Name With Dialogs(wdDialogFileOpen) If .Display = -1 Then Name = .Name End If End With MsgBox ("ファイル名は" & Name & "です。")

専門家に質問してみよう