• 締切済み

【VBA】 ファイル名の取得

23歳OLです。 会社でマクロを組んでいるのですが、 できないところがあったのでご相談させてください。 ▼やりたいこと ================================================ ・フォルダを自分で指定して、選択したファイルの名前をシートに書き込む 1.txt 2.log 3.xls とフォルダに入っていたら 1.txt 2.log 3.xls とシートに名前を書き込んでほしいです。 ・ファイルの種類はいろいろある。(txt.logなど) ================================================ ▼現在書いてみたコード ======================== Sub Sample1() Dim buf As String, cnt As Long Const Path As String = "" buf = Dir(Path & "*.*") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop End Sub ======================== これだと、初めから指定したフォルダしか取得することができないらしいです。 そもそもConst Path As String = "このぶぶん" このぶぶんにフォルダを指定しても動きませんでした。? どこが原因なのでしょうか? ご教示お願いします。

みんなの回答

回答No.5

フォルダを自由に選択したい その際にフォルダの中身も確認したい。 なら、 こんな感じでもいいんじゃないかと思います。 Sub GetList() Dim v As Variant Dim i As Long Dim oFS As Object If MsgBox(ActiveSheet.Name & "に書き込みます", vbOKCancel) = vbCancel Then Exit Sub End If v = Application.GetOpenFilename("仕事,*.xls*;*.txt;*.log", MultiSelect:=True) 'ここで選択ウィンドウが出るのですべて選択なら Ctrl + A にて 'フォルダを選択しても無視されます。 If IsArray(v) = False Then 'キャンセルした場合 Exit Sub End If Set oFS = CreateObject("Scripting.FilesystemObject") For i = 1 To UBound(v) Cells(i, 1) = oFS.GetBaseName(v(i)) Cells(i, 2) = oFS.GetFileName(v(i)) Cells(i, 3) = v(i) Next Set oFS = Nothing End Sub

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

今まで多くの質問を見てきたものにとって、質問の表現がわかりにくい。 >選択したファイルの名前のところがわかりにくい。 1つフォルダを指定する。 その中にあるファイル名をシートに書き出す。 ただしファイルの種類(たぶん拡張子で判別できる種類の区別だろう)を選ぶ。 そういうことが言いたかったのでは。 ーー それならOKWAVEでも頻出質問で、純粋なVBAというよりは、VBscriptのファイルを扱うコマンドを使うのが簡単です。 こんなところにまず質問する前に、WEBの検索で、「フオルダ指定 ファイル書き出し VBA」で照会すっれば、たくさん記事が出てくる。 http://www.happy2-island.com/vbs/cafe02/capter00302.shtml など多数。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1037340500はそっくりの質問。 WScript.Echo dirfnをシートのセルに値を代入に変えれば姉仕舞。 それらを理解できない点や、付け加えたい点に絞って、このコーナーで質問すれば、このコーナーが生かせる。 vbaをやります、というなら、純粋エクセルvbaだけでなく、「vBSCRIPT ポケットレファレンス」(技術評論社)などを手元に置いて、勉強するがよい。 ーー 上記で質問の内容を小生が誤解してるかな?

すると、全ての回答が全文表示されます。
回答No.3

#2です。お礼欄へのレスです。 > いただいたコードを試したのですが、 > ファイルを選択する画面まで行くのですが、ファイルが入っているフォルダを覗くと何も表示されません。 > どこのフォルダでも、入っているはずのファイルが参照できないです。 FileDialog(msoFileDialogFolderPicker) ダイアログは ただ フォルダ だけを選択する為のダイアログですから、 ファイルが見えない、とか、'ファイルが参照できないです'というのは正常です。 フォルダの中にあるファイルを覗くことは出来ません。 フォルダの中にあるフォルダを覗くことは出来ます。 フォルダ中にファイルが有ろうが無かろうが、 ただただフォルダだけを表示して選択するものです。 > フォルダを選択して、ダイアログ上で[OK]を押せば、 > すべてのファイル名がセル範囲に出力されます。 と書いた直前の「 中身をみたいフォルダ」という表現が 誤解を与えたのかも知れませんが、 ダイアログの目的からしてファイルは見えません。  フォルダをクリックして選択して、  [OK]を押して試してください。 [OK]を押さずにキャンセルした場合は、処理を中止するように書いてあります。 ただ、もしも、中身のファイルを目視で確認してからフォルダを選んで、 その中のファイル名を一覧にしたい、という特別な要望でしたら、それはそれで可能です。 可能ですが、難易度が大きく変わってしまいますから、 特別なことでもない限り最初の回答に書くことはありません。 本当に必要かよく考えてみてください。 必要だという補足があって、理由が解ればまた書いてみます。 とりあえず、返答まで。

すると、全ての回答が全文表示されます。
回答No.2

こんにちは。 > そもそもConst Path As String = "このぶぶん" > このぶぶんにフォルダを指定しても動きませんでした。? > どこが原因なのでしょうか? たぶん、"このぶぶん"の最後に"\"を付けていないから、だと思われます。 > これだと、初めから指定したフォルダしか取得することができないらしいです。 ダイアログ(FileDialog(msoFileDialogFolderPicker))を表示して、 中身をみたいフォルダを選択して、ダイアログ上で[OK]を押せば、 すべてのファイル名がセル範囲に出力されます。 もし、こういうことではなくて、変数で指定したい、という場合は、 ▲マークの行をすべて削除して、代りに、   sPath = "指定のフォルダパス(最後に\)" の一行を挟んでみて下さい。 ' ' ======================== Sub Re8922788() Dim sPath As String, buf As String, cnt As Long   With Application.FileDialog(msoFileDialogFolderPicker) ' ▲     If .Show <> True Then Exit Sub ' ▲     sPath = .SelectedItems(1) ' ▲   End With ' ▲   buf = Dir(sPath & "\*.*")   Do While buf <> ""     cnt = cnt + 1     Cells(cnt, 1) = buf     buf = Dir()   Loop End Sub ' ' ========================

joucomi
質問者

お礼

ご返事ありがとうございます。 いただいたコードを試したのですが、 ファイルを選択する画面まで行くのですが、ファイルが入っているフォルダを覗くと何も表示されません。※どこのフォルダでも、入っているはずのファイルが参照できないです。

すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4902/10363)
回答No.1

>そもそもConst Path As String = "このぶぶん" >このぶぶんにフォルダを指定しても動きませんでした。? どのように指定したのでしょうか? Const Path As String = "C:\Temp\" のようにちゃんと最後に \ を指定してますか?

すると、全ての回答が全文表示されます。

関連するQ&A