• ベストアンサー
  • 困ってます

VBA フォルダ内のファイルを、ファイル名順に開く

【PPT VBA】フォルダ内のファイルを、ファイル名順に開く方法について  今晩は、質問させていただきます。どうぞよろしくお願いいたします。  環境:Win7+PPT2007 になります。  下記のようなコードで、あるフォルダ内のファイル群のデータを取得しております。 「ファイル名順」でデータを取り出したいのですが、違う順(おそらく日時順)で 出てくるので悩んでいる次第でございます。  検索いたしておりますと、ハードディスク等の環境によって検出順が異なるようでございましたが 何か、良さそうな方法がございましたらお教えいただきたくお願いいたします。 Dim File_Collection As Object Dim File_List As Variant Dim Folder_Collection As Object Dim Folder_List As Variant Set File_Collection = CreateObject("Scripting.FileSystemObject") _ .GetFolder(パス).Files For Each File_List In File_Collection      '(名前順では検出してくれません。。。) Next  暫く考えまして、例えば Stringの配列を用意しておいて一旦、上記コードでファイル名とパスをリスト化 →配列の文字列を登り順に、Sort →これの順にファイルを開いていく などという事を思いつきました。しかしファイル数が多いため(100~500個でございます)、 これらの長いパスを配列に入れるというのも、メモリに負担がかかる(?)のかな などと考えている次第でございます。  他に、配列の代わりにエクセルを一旦開いて、そこでソート・・・・・とも考えましたが 友人達に使っていただく可能性があり、余りスマートな解決策ではなさそうですので それよりは上記の「配列でソート」を優先したい次第でございます。  コーディングで何か良い方法があれば良いのでございますが、 他の方法でも結構でございます。もし「自分なら、こうするかな」といった ようなご意見などございましたら是非、ご紹介いただけないでしょうか。  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数2446
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

500個程度ならメモリに負担はないので、配列のソートが良いと思います。 ソートのアルゴリズムはインターネットで検索すればたくさん出てくるので、 あとはコピーして使って頂ければすぐに出来上がると思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

どうもありがとうございます!m(_ _)m はい、今作成いたしました(^^ が、、、「test_2.txt」より「test_10.txt」が先になってしまいます。。。 1→2→3→・・・→10→11→ となってほしいのですが、 1→10→11→・・・18→19→2→3→ となってしまいます。orz もう少し検索して頑張ってみます! この度はご親切にアドバイスいただき誠にありがとうございました!!(`_´ゞ

関連するQ&A

  • VBA:2つのCSVファイルを開きたいです。

    エクセル2010のVBAにてCSVファイルを開き結合させるプログラムを組もうとしているのですが、2つ目のCSVファイルを開こうとすると、何故かエラーが出てしまいます。 -------------------------------------------------------------------------------- 1つ目 Sub mobile_FileSearch(Path As String) 'test.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call mobile_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "test.csv" Then Workbooks.Open ("test.csv") End If Next File End Sub ---------------------------------------------------------------------------- 2つ目 Sub local_FileSearch(Path As String) 'bbb.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call local_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "bbb.csv" Then Workbooks.Open ("bbb.csv")'←ここでエラー End If Next File End Sub ------------------------------------------------------------------------ まったく同じプログラムで、csvファイル名だけ変えただけで実行時エラー1004が出てしまいます。 一体全体何が問題なのでしょうか?

  • EXCELでダイアログボックスを開く時表示ファイル名を指定したい

    Openfilenameでファイルを選択するような機能をEXCELのVBAで作っています。 表示するファイルの種類までは、指定の仕方がわかるのですが、 特定のファイル名のものを表示したい時のVBAの記述方法を教えてください。 下記は、作っているプログラムの抜粋なのですが、 これだと、全部のcvsファイルが表示されます。 このCSVファイルで、ファイル名が、*XXX.csvのものをダイアログボックスに表示したいです。 Dim File_list As Variant Dim Book As Workbook Dim j As Integer File_list = Application.getopenfilename(".csvfile(*csv),*.csv") If File_list = False Then Exit Sub Application.EnableEvents = False Set Book = Workbooks.Open(File_list)

  • サブフォルダ内のファイル名取得について

    Windows7 Access 2013環境です。 USB接続したハードディスク内のファイルリストを作成しようとしています。 ハードディスクはNTFSフォーマットです。 ボタン1をクリックしたとき、テーブル1をソースにしたフォーム1に ファイル名を書き出していくようにしました。 ドライブ内のサブフォルダを選択すると、プログラムは正常に作動するのですが ドライブ直下を指定すると、実行時エラー 70 "書き込みできません" が発生します。 NTFSのアクセス権は、管理者でログインしているので、システム関連のフォルダ System Volume Information $RECYCLE.BIN 以外は問題ありません。 どこに問題があるのでしょうか。もし、システム関連のフォルダが 引っかかっているとしたら、その回避方法についても 具体的にご教授願います。 ↓エラー箇所↓ -------------------------------------------------------------- For Each subfolder In folder.SubFolders -------------------------------------------------------------- ↓作成したプログラム↓ -------------------------------------------------------------- Private Sub ボタン_1_Click() Dim dlg As FileDialog Dim fold_path As String Dim strTargetDir As String DoCmd.GoToRecord acDataForm, "F0001_フォーム1", acNewRec Set dlg = Application.FileDialog(msoFileDialogFolderPicker) If dlg.Show = False Then Exit Sub fold_path = dlg.SelectedItems(1) strTargetDir = fold_path Call FolderSearch(strTargetDir) MsgBox "終了" Set dlg = Nothing Else End If End Sub Public Sub FolderSearch(strTargetDir As String) Dim fso As Object Dim folder As Object Dim subfolder As Object Dim file As Object Dim objFilsSys As Object Dim objDrive As Object Dim strDriveLetter As String Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(strTargetDir) strDriveLetter = Left(strTargetDir, 1) Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objDrive = objFileSys.GetDrive(strDriveLetter) For Each subfolder In folder.SubFolders  ←エラー箇所 FolderSearch subfolder.Path Next subfolder For Each file In folder.Files With file Me.ボリューム名 = objDrive.VolumeName Me.ファイル名 = file.Name Me.ファイルパス = folder.Path Me.ファイルサイズ = folder.Size DoCmd.GoToRecord acDataForm, "F0001_フォーム1", acNewRec End With Next file Set objDrive = Nothing Set fso = Nothing Set folder = Nothing End Sub

  • フォルダ内にあるファイル名を取得する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 また、このコードでは 実行ファイル自体のファイル名も取得してしまうようなので、 実行ファイル以外のファイル名を取得したいです。 ご指導のほど、よろしくお願い致します。

  • フォルダのファイル数をvbaで取得したい

    vbaなのですが、フォルダにgifファイルがたくさんはいっていますが、 その数を数えるコードを教えてください。 今は、 Sub Macro7() Dim File As String Dim i As Long File = Dir("C:\*.*", vbDirectory) Do While File <> "" File = Dir i = i + 1 Loop MsgBox "ファイル数は" & i & "です" End Sub のように、全てのファイル数をカウントして求めています。

  • 写真を縦に取り込むには?

    質問1 写真を縦に取り込むには以下マクロをどのように変えたらよいのか? を教えてください。 質問2 JPGとjpgを取り込むにはどうしたらよいのでしょうか? Sub test01() ListUp_FileList ("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures") End Sub Sub ListUp_FileList(FolderSpec) Dim File_Collection As Object Dim File_List As Variant Dim cnt As Integer Set File_Collection = CreateObject("Scripting.FileSystemObject") _ .GetFolder(FolderSpec).Files cnt = 1 l = 10 For Each File_List In File_Collection If Right(File_List, 4) = ".jpg" Then 'Range("A" & Format(cnt)) = File_List.Name ActiveSheet.Pictures.Insert(FolderSpec & "\" & File_List.Name).Select Selection.ShapeRange.Left = l + (cnt - 1) * 150 Selection.ShapeRange.Width = 130 Selection.ShapeRange.Height = 104 Selection.ShapeRange.Top = 360 cnt = cnt + 1 End If Next End Sub

  • VBAでCSVファイルを読み込もうとしていますが、

    VBAでCSVファイルを読み込もうとしていますが、 「ファイルが見つかりません」とエラーが表示されます。 どのように対処していいのかわかりません。 教えてくください。 Sub readCsv() Dim csvFile As String Dim ch As Integer Dim csvStr As String Dim str() As String Dim i As Integer Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) targetFolder = oFolder.Items.Item.Path Set fso = CreateObject("Scripting.FileSystemObject") Set fileList = fso.GetFolder(targetFolder).Files For Each file In fileList csvFile = file.Name ch = FreeFile Open csvFile For Input As #ch i = 1 Do While Not EOF(1) Line Input #ch, csvStr Close #ch str = Split(csvStr, ",") Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str i = i + 1 Loop Next End Sub

  • VBAでキャッシュを削除するには

    http://okwave.jp/qa/q7833029.html でも質問したものなのですが、VBAでキャッシュを削除するしたいのですがうまくいきません。 C:\Users\○○\AppData\Local\Microsoft\Windows\Temporary Internet Files のフォルダを見ると現在4656個ですが、 ///////////////////////////////////////////////////////////////// Option Explicit Sub Sample1() On Error Resume Next Dim Shell As Object, CashFolder As Object, FSO As Object Dim Folder As Object, File As Object Set FSO = CreateObject("Scripting.FileSystemObject") Set Shell = CreateObject("Shell.Application") Set CashFolder = Shell.Namespace(&H20) ''キャッシュフォルダのパスを取得する For Each Folder In FSO.GetFolder(CashFolder.Self.Path & "\Content.IE5").SubFolders For Each File In Folder.Files ''キャッシュフォルダ内のファイルを削除する FSO.DeleteFile File Next File Next Folder Set CashFolder = Nothing Set Shell = Nothing Set FSO = Nothing End Sub ///////////////////////////////////////////////////////////////// を実行した後に、Temporary Internet Filesのフォルダを見ても、1個も削除されてません。 On Error Resume Nextをつけないと 4656個全てが、書き込みできません。(Error 70)になってしまうようです。 どうすればいいのでしょうか? ご教授よろしくお願いします。

  • フォルダ内のファイルをランダムに取り出したい

    VB6です。 イベントで、選んだフォルダ内の音源ファイルをランダムに鳴らすコードを書きました。 Dim MusPath As String Dim n As Integer Dim sou As String File1.Pattern = "*.*": n = File1.ListCount Randomize sou = Int(Rnd * n) + 1 MusPath = File1.path + IIf(Right(File1.path, 1) = "\", "", "\") + sou + ".wav" 以下略 一見しておわかりの通り、該当するフォルダ内のファイル名は1~nまでの連番でなければいけません。 これを発展させて、曲名のついたファイルが不定数格納されているフォルダからランダムに一曲取り出すようなプログラムを作りたいと思っていますが、MSDNライブラリとか見てもイマイチよくわかりません。 お教えいただければ幸いです。 よろしくお願いします。

  • 全ファイル名をセルに出力するVBAプログラム

    VBA初心者です。 Aというディレクトリがあり、その中に1,2,3,4というフォルダがあります。 1には「apple1.csv」、「orange1.csv」、「banana1.csv」 2には「apple2.csv」、「orange2.csv」、「banana1.csv」 ・・・ 4には「apple4.csv」、「orange4.csv」、「banana4.csv」 が入っています。 この1から4のフォルダのapple1,apple2,apple3,apple4のファイルをとりだし、それぞれのA1&#65374;A10セルを新たなファイルに自動転記する(apple1はA1&#65374;A10,apple2はB10&#65374;B10・・・)といった具合のマクロを組みたいと思っています。 そこで以下のHPを参考にし、まずはトップディレクトリである「C:\Sample」の中のすべてのフォルダを表示するプログラムをつくってみようと試みました。 ホームページでは以下のソース Sub Sample() Call FileSearch("C:\Sample") End Sub Sub FileSearch(Path As String) Dim FSO As Object, Folder As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Debug.Print Folder.Path Call FileSearch(Folder.Path) ''見つかったフォルダを引数に指定して、自分自身を呼び出す Next Folder End Sub によってイミディエイトにフォルダを表示する仕様になっています。 実際、私もこのソースで実行したところ、イミディエイトにはトップディレクトリ以下の全ディレクトリ名が表示されました。 これを改良し、2列目に全ディレクトリ名が表示されるプログラムを組みました。ソースは以下です。 Sub Sample() Call FileSearch("C:\Sample") End Sub Sub FileSearch(Path As String) Dim FSO As Object, Folder As Variant ' Dim i As Integer ' i = 1 Set FSO = CreateObject("Scripting.FileSystemObject") For i = 1 To FSO.GetFolder(Path).SubFolders Debug.Print Folder.Path Call FileSearch(Folder.Path) ''見つかったフォルダを引数に指定して、自分自身を呼び出す i = i + 1 Cells(i, 2) = Folder Next i End Sub これを実行したところ、2列目にはすべてのディレクトリは表示されず、一部のディレクトリしか表示されません。 改良の仕方がおそらくまずいと思うのですが、何か私が根本的に間違えている気がするので、ご指摘いただけたら幸いです。