- 締切済み
【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 = "このぶぶん" このぶぶんにフォルダを指定しても動きませんでした。? どこが原因なのでしょうか? ご教示お願いします。
- joucomi
- お礼率25% (3/12)
- Visual Basic
- 回答数5
- ありがとう数2
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- NotFound404
- ベストアンサー率70% (288/408)
フォルダを自由に選択したい その際にフォルダの中身も確認したい。 なら、 こんな感じでもいいんじゃないかと思います。 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/17068)
今まで多くの質問を見てきたものにとって、質問の表現がわかりにくい。 >選択したファイルの名前のところがわかりにくい。 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 ポケットレファレンス」(技術評論社)などを手元に置いて、勉強するがよい。 ーー 上記で質問の内容を小生が誤解してるかな?
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
#2です。お礼欄へのレスです。 > いただいたコードを試したのですが、 > ファイルを選択する画面まで行くのですが、ファイルが入っているフォルダを覗くと何も表示されません。 > どこのフォルダでも、入っているはずのファイルが参照できないです。 FileDialog(msoFileDialogFolderPicker) ダイアログは ただ フォルダ だけを選択する為のダイアログですから、 ファイルが見えない、とか、'ファイルが参照できないです'というのは正常です。 フォルダの中にあるファイルを覗くことは出来ません。 フォルダの中にあるフォルダを覗くことは出来ます。 フォルダ中にファイルが有ろうが無かろうが、 ただただフォルダだけを表示して選択するものです。 > フォルダを選択して、ダイアログ上で[OK]を押せば、 > すべてのファイル名がセル範囲に出力されます。 と書いた直前の「 中身をみたいフォルダ」という表現が 誤解を与えたのかも知れませんが、 ダイアログの目的からしてファイルは見えません。 フォルダをクリックして選択して、 [OK]を押して試してください。 [OK]を押さずにキャンセルした場合は、処理を中止するように書いてあります。 ただ、もしも、中身のファイルを目視で確認してからフォルダを選んで、 その中のファイル名を一覧にしたい、という特別な要望でしたら、それはそれで可能です。 可能ですが、難易度が大きく変わってしまいますから、 特別なことでもない限り最初の回答に書くことはありません。 本当に必要かよく考えてみてください。 必要だという補足があって、理由が解ればまた書いてみます。 とりあえず、返答まで。
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
こんにちは。 > そもそも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 ' ' ========================
- notnot
- ベストアンサー率47% (4848/10262)
>そもそもConst Path As String = "このぶぶん" >このぶぶんにフォルダを指定しても動きませんでした。? どのように指定したのでしょうか? Const Path As String = "C:\Temp\" のようにちゃんと最後に \ を指定してますか?
関連するQ&A
- フォルダ内にあるファイル名を取得する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 また、このコードでは 実行ファイル自体のファイル名も取得してしまうようなので、 実行ファイル以外のファイル名を取得したいです。 ご指導のほど、よろしくお願い致します。
- ベストアンサー
- Visual Basic
- フォルダ内にあるファイルを取得したい
エクセル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 また、このコードでは マクロを実行するファイル自体のファイル名も取得してしまうようなので、 自身のファイル名以外のものを取得することは可能でしょうか。 ご指導のほど、よろしくお願い致します。
- 締切済み
- Visual Basic
- Excel VBA インデックスが有効範囲にない
よろしくお願いします。 Excel VBA 初心のものです。 プログラムを作ってみたのですが、 「インデックスが有効範囲にありません」となってその先に進めません。 ソースですが ------------------------------------------------------ Private Sub CommandButton1_Click() Dim buf As String, cnt As Long Dim TMP As Variant Const Path As String = "D:\Excel\sample\" buf = Dir(Path & "*.xls*") Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf Cells(cnt, 2) = FileDateTime(Path & buf) Cells(cnt, 3) = TMP buf = Dir() Loop End Sub ------------------------------------------------------ エラーになる箇所は Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value のところです。 このプログラムで何をしたいかと言いますと DドライブのExcel>sample というフォルダの中にある ・すべてのエクセルブック名(ファイル数は3個)と、 ・そのブックの作成日時と、 ・testdataというシート(各ブックに必ずあるシートです)のセルA1に入っている値 を実行ファイルのSheet1に書き出す、 というものです。 プログラムの実行ファイルはExcelフォルダ直下にあります。 どこが問題でエラーになっているのか分かりません。 ご指南よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセルマクロ フォルダ内のファイル検索で
よろしくおねがいします。 下記で、どうも指定フォルダ内のファイル名を検索できていないようで 条件の"ないなら"に反応して中断するハズがファイルを開いてしまいます。 思ったのですが、bufの設定にファイル名は指定できないのでしょうか? Sub Start8() Dim buf As String, IptA As String Const Path As String = "C:\001\" IptA = Workbooks("AAA.xls").Sheets("Sheet1").Cells(1, 1).Value buf = Dir(Path & "" & IptA & ".txt") If buf = "" Then Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptA & "は見つかりません" Exit Sub Else Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptFN & "が見つかりました" End If Workbooks.OpenText Filename:= _ "C:\001\" & IptA & ".txt" End Sub
- ベストアンサー
- その他MS Office製品
- .xlsファイルが存在するパスを表示させたい
エクセルマクロ初心者です。 .xlsファイルをサブフォルダも含め検索し、A列にファイル名、B列にファイルが存在するパスを表示させるにはどうしたらいいでしょうか?検索するベースのディレクトリは決まっている”C:\temp”のでtemp以下、.xlsがどこに存在するのかを検索するマクロを組もうとしています。 いろんな書き込みを探し、サブフォルダを含め、ファイル名を取得するものは発見できたので組み込んでみましたが、、パスの表示方法がわかりません。 cnt = 0 Call Sample3("C:\temp") Callでサブルーチンsample3に渡し、ファイル名を取得しています。 Dim cnt As Long Sub Sample3(Path As String) Dim buf As String, f As Object buf = Dir(Path & "\*.xls") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder(Path).SubFolders Call Sample3(f.Path) Next f End With End Sub あとは、どのように書けばいいのでしょうか? 宜しくお願い致します。
- ベストアンサー
- SE・インフラ・Webエンジニア
- excelのファイルとセル値を書き出したい
excel2003を利用しています。 とあるフォルダにある excelファイル名(自分自身のファイルを除く) を全て書き出して、 且つ A1セルの値をB列に書き出すことを、やろうとvbaを作ってみましたが。 最後のファイルのA1セルを書きだすところで、エラーになっていまい そこだけ空白になってしまいます。※写真参照 記述は以下の通りです。どのように修正すればよいか 教えていただけないでしょうか? また他にもっと優れた記述があれば、そちらも教えて欲しいです。 よろしくお願いします。 Sub test() Dim buf As String, cnt As Long Dim Path As String Path = ThisWorkbook.Path & "\" buf = Dir(Path & "*.xls") cnt = 2 Do While buf <> "" If buf <> ThisWorkbook.Name Then cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Workbooks.Open Filename:=Path & "\" & buf MsgBox Workbooks(buf).Worksheets(1).Range("A1").Value Cells(cnt, 2) = Workbooks(buf).Worksheets(1).Range("A1").Value Workbooks(buf).Close End If Loop End Sub
- 締切済み
- Excel(エクセル)
- VBA:最下層のファイルを取得
最下層にあるファイルのファイル名を取得したく下記の様なプログラミングを組んでみたところ、 「ファイル名または番号が不正です」というエラーが表示されてしまいます。比較演算子などをいじって 試行錯誤してみましたが、どうしてもできません。どのように修正すればよいのでしょうか。ご回答よろしくお願いいたします。 http://syarecowa.moo.jpというサイトのmenu001.htmの下にある"1/3ケタの数字.htm"のファイル名を全て取得したいと考えています。 現在組めているコードは下記の通りです Dim cnt As Long ---------------- Sub Macro5(Path As String) Dim buf As String, f As Object buf = Dir(Path & "/#/###.htm") ★★ここでエラーが生じていしまいます★★ Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder(Path).SubFolders Call Macro5(f.Path) Next f End With End Sub -------------------------- Sub Macro6() Dim URL As String 'ファイルパス Dim IE As Object 'オブジェクト Dim Myhtml As Variant 'HTMLタグデータ 'インターネットに接続 Set IE = CreateObject("InternetExplorer.Application") With IE .Navigate "http://syarecowa.moo.jp/menu001.htm" .Visible = Flase Do While .Busy = True DoEvents Loop 'Macro5呼び出し cnt = 0 Call Macro5("http://syarecowa.moo.jp/menu001.htm") End With End Sub
- ベストアンサー
- Visual Basic
- VBAで新しい日付順にファイルを検索するには?
ExcelのVBA初心者です。 ファイルを新しい日付のものから順番に検索したいのですが、幾ら探しても分かりませんでした。どなたか教えていただけないでしょうか? やりたいことは、あるフォルダ内に毎日5~6個のファイルが保存されていくのですが、その中の決められたセルに指定した文字列が含まれているもの3つ場合分けしてファイルを出力したいのです。 例えば、 ファイル名 セルE1の内容 日付 123.xls ”111111A” 6/29 15:39:40 456.xls ”111111N” 6/29 15:35:10 789.xls ”222222V” 6/29 15:20:43 654.xls ”222222A” 6/29 14:30:21 321.xls ”111111V” 6/29 14:10:33 951.xls ”222222N” 6/28 17:52:15 753.xls ”333333A” 6/28 17:30:50 とファイルがあり、セルE1に”111111”の文字列を含むファイルを検索し、 末尾に”V”があるもの → f(1)=321.xls 末尾に”N”があるもの → f(2)=456.xls 末尾に”A”があるもの → f(3)=123.xls と出力したいのです。 分からないなりに、いろいろ調べて切り貼りしながら作ってみました。 これで一応うまくいったのですが、検索する文字列は、必ず上記例のように新しい日付の5~6ファイルの中にあり、検索対象のフォルダ内には1000個以上ファイルがあります。 上記プログラムだと読み込む順番が最後になってしまいますので、恐ろしく処理時間が掛かってしまいます。 Sub ファイル検索() Dim buf As String, cnt As Long Dim i As Integer Dim wb(3) Dim bk As String, lot As String, lt As String Dim Path As String Application.ScreenUpdating = False lt = Cells(1, 5) bk = ActiveWorkbook.Name Path = Cells(1, 5) buf = Dir(Path & "*.xls") i = 1 Do While wb(1) = "" Or wb(2) = "" Or wb(3) = "" cnt = cnt + 1 Workbooks.Open Path & buf Select Case Cells(2, 5) Case Is = lt & "V" wb(1) = buf Case Is = lt & "N" wb(2) = buf Case Is = lt & "A" wb(3) = buf End Select Application.DisplayAlerts = False Workbooks(buf).Close Application.DisplayAlerts = True buf = Dir() Loop For i = 1 To 3 Workbooks(bk).Sheets(1).Cells(i, 1) = "wb(" & i & ")" & "=" & wb(i) Next i Application.ScreenUpdating = True End Sub 日付の新しいファイルから読み込む良い方法はないでしょうか? Excelのバージョンは、2003です。 出来れば、2003~2010で対応できる方法があれば、ベストです。 よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- 複数フォルダに格納されたファイル名取得VBA
お世話になっております。 あるフォルダに複数のフォルダが格納されており、更にそのフォルダの中にあるファイルの情報を取得するプログラムを書いたのですが、実行すると下記のようなエラーとなってしまいます。 ■エラー プロシージャの呼び出し、または引数が不正です 下から3行目、「buf = Dir()」が問題であることはわかるのですが、 何が問題でどのように解決したらいいかわかりません。 どなたかご教授の程よろしくお願い致します(>_<) ------------------------------------------------------------------------ Sub test() Dim buf As String Dim fName As String Dim msg As String buf = Dir("*.*", vbDirectory) Do While buf <> "" If GetAttr(buf) And vbDirectory Then If buf <> "." And buf <> ".." Then fName = Dir(CurDir & "\" & buf & "\" & "*.jpg") Do While fName <> "" cnt = cnt + 1 Cells(cnt, 1) = buf Cells(cnt, 2) = fName msg = msg & buf & "\" & fName & vbCrLf fName = Dir() Loop MsgBox msg End If End If buf = Dir() Loop End Sub ------------------------------------------------------------------------ これが実現できないと細かい作業を毎日繰り返す事となり、 かなり業務不可が高いです。。 繰り返しになってしまいますが、どなたかご回答よろしくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- エクセル2003のVBAを教えてパート3
kドライブのVBA練習フォルダにある、全てのテキストデータファイル(拡張子.txt)を、エクセルに繋げて取り込こむ(指定のエクセルの1シートに全テキストデータを繋げて取り込む)方法がわかりません。どなたか教えてください。データは、A列にのみに入ります。 テキストデータファイルの数は、1~4ファイルと色々な場合があります。また、行数も1ファイル10行~ 400行と色々です。 次のように、決められた1つのデータなら、プログラムに「元データ.txt」と入力する方法で出来るのでっすが。 Sub テキストファイルの読み込み() '1ファイルのとき Dim buf As String Dim cnt As Long Open "k:\VBA練習\元データ.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf cnt = cnt + 1 Cells(cnt, 1) = buf Loop End Sub
- 締切済み
- Visual Basic
お礼
ご返事ありがとうございます。 いただいたコードを試したのですが、 ファイルを選択する画面まで行くのですが、ファイルが入っているフォルダを覗くと何も表示されません。※どこのフォルダでも、入っているはずのファイルが参照できないです。