• ベストアンサー

マクロで特定のフォルダの中から任意のフォルダを開きたい

マクロで特定のフォルダの中から、任意のフォルダを開きたいのです。 または、特定のフォルダの中から最新のブックを開きたいのですが このような方法ご存知の方ご教示いただけませんでしょうか^^; 以下のコードは、似たような方法がないか検索して 見つけたマクロなのですが、この方法ですと 特定のフォルダを指定して開くことはできますが 任意のフォルダを一発で開くということは難しいようです。 Private Sub Worksheet_BeforeDoubleClick() Cancel = True Const dataDir As String = "C:\テスト\保存データ\" Dim dataFilePath As String dataFilePath = dataDir & Target.Value & ".xls" Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(dataFilePath) Then Workbooks.Open (dataFilePath) End If 保存データというフォルダに番号がフォルダ名のフォルダが複数入っています。 例) 100 101 102 103 104 と、いった具合です。 保存フォルダの中の104(任意のフォルダ)を開くマクロまたは番号のフォルダは関係なく 保存フォルダの中の最新ブックを開くことができるような方法はないでしょうか? 開きたいブックというのは、最新ブックのみですので、この例の場合 104が最新のフォルダというわけではなく、番号のフォルダ自体は 104以降もあり、最新ファイルが104にある場合は105以降のフォルダは 空の状態です。 分かりにくい説明ではございますが、よろしくお願いします^^;

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.5

要求がちょっと分からなくなってきています。 各フォルダ(100,101、102,103,104など)の最新を開くのでしょうか(複数開く それとも全フォルダーの中での最新を開くのでしょうか? いちおう全フォルダーの中で最新ということでのコード Sub LastFileopen()   Dim FSysObj As Object   Dim Flscol As Object   Dim Fldcol As Object   Dim Fld As Object   Dim Flds As Object   Dim Fl As Object   Dim initpath As String   Dim maxdate As Date   Dim lastfl As String   Dim fldname As String   initpath = "C:\テスト\保存データ"   Set FSysObj = CreateObject("Scripting.FileSystemObject")   Set Fld = FSysObj.GetFolder(initpath)   Set Fldcol = Fld.Folders   For Each Flds In Fldcol     Set Flscol = Flds.Files     For Each Fl In Flscol       If Fl.DateCreated >= maxdate And Split(Fl.Name, ".")(1) = "xls" Then           maxdate = Fl.DateCreated           lastfl = Fl.Name           fldname = Flds.Name       End If     Next   Next   If lastfl <> "" Then       Workbooks.Open (initpath & "\" & fldname & "\" & lastfl)   End If End Sub テストしてませんので(環境作るのが面倒)あしからず。

mazdaFD3
質問者

お礼

改めて、ご回答頂きましてありがとうございます^^ 説明が分かりにくくなってしまい、申し訳ありませんでした。 要求させていただいていたのは、全フォルダーの中での最新を開く と、言うことです。 今回ご回答いただけました内容で狙った効果が得られました^^ お手数おかけしました、そして改めてご回答ありがとうございました^^

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

その他の回答 (4)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.4

すみません。跡で回答と思っていて忘れていました。 もう一個for each をネストすればいいんですが、明日にでも回答します。

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

Sub Mcr1() Dim dic As New Scripting.Dictionary '参照設定で「Microsoft Scripting Runtime」をチェック Dim lastestFile As String, lastestDate As Date, i As Integer '「保存データ」以下のフォルダにある全ファイル名と作成日時情報を取得 GetAllFiles "保存データ", dic '最新のxlsファイルを取得 For i = 0 To dic.Count - 1 If lastestDate < dic.Item(dic.keys(i)) And LCase(Right(dic.keys(i),4)) = ".xls" Then lastestFile = dic.keys(i) lastestDate = dic.Item(lastestFile) End If Next i If lastestFile<> "" Then Workbooks.Open (lastestFile) End If End Sub Private Sub GetAllFiles(strPath As String, dic As Scripting.Dictionary) Dim fso As Object, fl As Object, fldr As Object, subfldr As Object Set fso = CreateObject("Scripting.FileSystemObject") Set fldr = fso.GetFolder(strPath) For Each fl In fldr.files 'ファイルのパスをキー、作成日時をitemとして格納 dic.Add fl.Path, fl.DateCreated Next For Each subfldr In fldr.SubFolders GetAllFiles subfldr.Path, dic Next Set fldr = Nothing Set fso = Nothing End Sub

mazdaFD3
質問者

お礼

回答頂きまして、ありがとうございます^^ お礼、返答遅れまして申し訳ございません^^; いただきました、コードを当方のデータで使わせてもらったのですが 当方の技量、知識不足によるところが大きいと思われますが いろいろ試してみたのですが、なぜかうまくいきませんでした^^; 自分自身のスキルアップの必要性を痛切に感じました^^; せっかく作成していただいたのですが、生かすことが出来ずもうしわけございません。

全文を見る
すると、全ての回答が全文表示されます。
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

Sub LastFileopen()   Dim FSysObj As Object   Dim Flscol As Object   Dim Fld As Object   Dim Fl As Object   Dim initpath As String   Dim maxdate As Date   Dim lastfl As String   initpath = "C:\テスト\保存データ"   Set FSysObj = CreateObject("Scripting.FileSystemObject")   Set Fld = FSysObj.GetFolder(initpath)   Set Flscol = Fld.Files   For Each Fl In Flscol     If Fl.DateCreated >= maxdate And Split(Fl.Name, ".")(1) = "xls" Then         maxdate = Fl.DateCreated         lastfl = Fl.Name     End If   Next   If lastfl <> "" Then       Workbooks.Open (initpath & "\" & lastfl)   End If End Sub 最後に作られたFileを開きます。 「最後に更新された」だったらDateCreatedをDateLastModified にします。 要するにそのフォルダのファイルズコレクションをFor Each Nextで見ながら一番日付の大きいファイルの名前を取得してopenする。

mazdaFD3
質問者

補足

ご回答ありがとうございます^^ 当方、マクロ初心者ですので、とてもコードの内容までは理解できませんが、複雑なコードと詳細な解説で助かります。 早速当方のデータに使わせていただいたのですが 当方の説明が不十分だった為、巧くいかないようです。 ブックを保存しているのは、保存データの中の 番号がフォルダ名の中ですので C:\テスト\保存データ\104 このような感じになります。104の中にブックがありますので initpath = "C:\テスト\保存データ\104" と、記述すると確かに狙った効果があるのですが この場合104にしか、対応できません^^; 最後の104の部分を任意に変更、または自動で最新ファイルのあるフォルダに移動できる方法ございますでしょうか? せっかくご回答いただいたのに、失礼ではありますが お時間ございましたら、再度知恵を貸していただけると幸いです^^;

全文を見る
すると、全ての回答が全文表示されます。
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>マクロで特定のフォルダの中から任意のフォルダを開きたい 特定のフォルダは、"G:\テスト\保存データ\" 任意のフォルダーはダイアログで選択なら Const dataDir As String = "G:\テスト\保存データ\" Dim myFolder As Object Set myFolder = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 0, dataDir) If myFolder Is Nothing Then   MsgBox "キヤンセルしました。" Else   MsgBox myFolder.Items.Item.Path & Chr(13) & " が選択されました。" End If

mazdaFD3
質問者

お礼

ご回答ありがとうございます^^ 早速当方のデータでためさせていただきました。 ですが当方のやり方が悪いのか、狙った効果は得られませんでした^^; 選択されました。 と、メッセージボックスは出てくるのですが 肝心のフォルダが開かれませんでした^^; せっかくご教示頂いた方法ですので、もう少し試行錯誤してみたいと思います^^

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

関連するQ&A

  • サブフォルダからエクセルブックをとりだすマクロ

    特定のフォルダからエクセルブックのみを抽出し別のフォルダに集める(コピーする)マクロを作りたいと思い、以下のように作成しました。 (AAAフォルダ⇒移動元、BBBフォルダ⇒移動先) ただしこれだと、AAAフォルダ内にあるサブフォルダからは拾ってこれないようです。 AAA内の全てのサブフォルダからエクセルブックを拾ってくるにはどう修正すればよろしいでしょうか。 ――――――――――― Sub sample1() Dim FSO As Object, fld As Variant, bk As Variant Const Fld1 As String = "C:\AAA" Const Fld2 As String = "C:\BBB\" Const tgt As String = "*.xlsx" Set FSO = CreateObject("Scripting.FileSystemObject") For Each fld In FSO.GetFolder(Fld1).SubFolders For Each bk In fld.Files If bk.Name Like tgt Then bk.Copy Fld2 End If Next bk Next fld End Sub

  • フォルダーの中に特定ファイルを開くの続きですが

    フォルダーの中に特定ファイルを開くの続きですが 次の命令を書きましたが実行できないです。間違った所を教えてほしいです 見積番号とはフォームの中のテキストボックスです。それをクリックする関連するエクセルファイルが開くようにしたいですのでよろしくお願いします。 Private Sub 見積番号_Click() Dim LngRet As Long Dim stLinkCriteria As String Dim Ipath As String Ipath = "\\C:\全社員共通\[見積書]\見積\" stLinkCriteria = Ipath & "\" & 見積番号 & "*.xls" LngRet = ShellExecute(0, vbNullString, Ipath & stLinkCriteria, _ vbNullString, vbNullString, 1) End Sub

  • 部分検索でフォルダ名を検索するマクロ

    Excel2013、windows8を利用しています。 任意の文字を入力して、その文字を含むサブフォルダを検索するマクロを考えています。 以下の例ではフォルダパス\\000.00.000.00\ab\c\内のサブフォルダから、ワタナベという文字 を含むサブフォルダ名のみを検索し、サブフォルダ名をvbaのイミディエイトに結果を出力するマクロを作ったつもりなのですが正しく動きません(エラーが出るわけでは無いのですが何も出力されない)。 どこが間違っているのか教えて頂けないでしょうか? 以下のマクロをつくるにあたって参考にしたホームページは http://officetanaka.net/excel/vba/tips/tips36.htm です Sub Sample() Call FileSearch("\\000.00.000.00\ab\c\", "ワタナベ") End Sub Sub FileSearch(Path As String, Target As String) Dim FSO As Object, Folder As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders If Folder.Name Like Target Then Debug.Print Folder.Path End If Next Folder End Sub

  • テキストファイルをエクセルに移すマクロのことで?

    以前、複数のテキストファイルをエクセルに移すマクロを教えてもらったのですが、 以下マクロですと、フォルダのパスを指定しないといけません。 今回教えてもらいたいのは、フォルダのパスを指定しなくてもよい方法です。 どういう事かと言うと、仮にディスクトップにフォルダがあるとします。 そのフォルダの中には、マクロが入っているエクセルシートとテキストが入っているフォルダです。 つまり、そのフォルダ内だけで、処理をしたいと考えています。 また、フォルダ名は、その時によって異なります。 今までは、以下の方法を使っていたのですが、ちょっと使いにくいと感じています。 申し訳ありませんが、どなたか教えていただけないでしょうか? Sub Macro() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim FolderPath As String 'ここのアドレスをファイルが格納されているフォルダのパスに変えてください FolderPath = "C:\Users\・・・" Dim myFile As Object Dim i As Long i = 2 Dim myFolder As Object For Each myFolder In fso.GetFolder(FolderPath).SubFolders For Each myFile In fso.GetFolder(myFolder).Files Cells(i, 4).Value = myFolder Cells(i, 1).Value = myFile.Name Cells(i, 7).Value = fso.OpenTextFile(myFile.Path).ReadAll() i = i + 1 Next Next End Sub Private Sub CommandButton1_Click() End Sub

  • マクロ 任意の・・・を特定のシートへコピーする

    いつも回答して頂きありがとうございます。 質問内容ですが・・・ (1)任意のブックを開ける。今回は『C:\Users\Owner\Documents\作業管理.xlsm』   ※本当のファイル名は『作業管理2013年8月』みたいなものになる 9月なら『作業管理2013年9月』 (2)任意のシートをコピーする。今回は『1』   ※数字の意味は日付。    ですが、今日の日付=シート名になるとは限らない。ですので、任意で選択したい。 (3)特定のシートへ貼り付ける。   dim ws1 as object set ws1 = activesheet (4)・・・ という順序のマクロを考えていますが、任意のブックを開けて、任意のシートをコピーするという箇所の記述が分かりません。どのような記述方法があるのか教えて頂けないでしょうか? 宜しくお願い致します。

  • 新しく開いたブックをアクティブにするマクロ

    マクロ 新しく作ったブックをアクティブにする マクロ初心者です。 マクロを使って同階層にあるファイルのアクティブのシートを ひとつのブックにコピーして保存するマクロを作りたいと思ってます。 他の質問を参照して下記のコードを途中まで作成しました。 参照した質問では、 マクロの入っているブックにシートをコピーするようでしたが、 そうすると保存した時にマクロも保存されてしまうので 私なりに調べて、新しいブックにシートコピーするようにしましたが、 この記述の後、新しいブックをアクティブにする記述がわからず、 保存できなくなってしまいました。 ここまで終わるとマクロの入っているブックがアクティブになって終わります。 このあと新しく開いたブックをアクティブにして、 ブックのsheet1~3を削除して、名前をつけて保存したいのですが 開いたブックをアクティブにするマクロをご伝授ください。 あたらしくブックをつくるとbook1~・・・と名前が変わってしまうので 変数で名づけたいのですが、やり方が良くわかりませんのでよろしくお願いします。 何卒よろしくお願いします。 Sub consolid_test() Dim shCnt As Integer Dim Wb As Workbook Dim i As Integer Dim sh As Worksheet Dim nSh As Worksheet Dim fName As String Dim ka As String Application.ScreenUpdating = False '画面更新を一時停止 Application.DisplayAlerts = False Set mb = Workbooks.Add '新しいコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fName = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fName = Empty '全て検索 If fName <> mb.Name Then 'ブック名がこのブックの名前でなければ Set Wb = Workbooks.Open(myfdr & "\" & fName) 'そのブックを開きwbとする。 Wb.ActiveSheet.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く ActiveSheet.Name = Range("B16") 'シート名の変更 ActiveSheet.Unprotect 'シート全体をコピーして値にする Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Wb.Close (False) '保存の有無を聞かずに保存しないで閉じる N = N + 1 'ブック数をカウント End If fName = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す ・ ・ ・ ・

  • フォルダ内の特定ブックだけを1つのブックにまとめる

    以前こちらで質問させて頂きましたフォルダ内の特定ブックだけを1にのブックにまとめる方法で、大変助かっていましたがブック名が変更になり、教えて頂いたマクロでは実行できなくなったので自分なりに考えたのですがどうしてもできません。 質問時のブック名は「1_****」と「2_****」で 今回「1_****」だけが「1(3)_****」に変更になりました。 下記のマクロでmyfile = dir(mypath & "1_" & "*.xl*")→myfile = dir(mypath & "1(3)_" & "*.xl*")に変更するのはわかるのですが do until myfile = ""   myfile2 = "2" & mid(myfile,2,99)をどう変更すれば良いかわかりません どなたかお助け頂けませんか? sub macro1()  dim myPath as string  dim myFile as string  dim myFile2 as string  mypath = "c:\test\"  myfile = dir(mypath & "1_" & "*.xl*")  do until myfile = ""   myfile2 = "2" & mid(myfile,2,99)   workbooks.open mypath & myfile   workbooks.open mypath & myfile2   application.displayalerts = false   workbooks(myfile).worksheets("2").delete   application.displayalerts = true   workbooks(myfile2).worksheets("2").move after:=workbooks(myfile).worksheets("1")   workbooks(myfile).close true   workbooks(myfile2).close false   myfile = dir()  loop end sub

  • エクセルのマクロで特定フォルダ内のJPGファイルを検索して開きたいので

    エクセルのマクロで特定フォルダ内のJPGファイルを検索して開きたいのですが、うまくいきません。 検索して開くファイルは、アクティブセルの値で始まります。 (例えばアクティブセルが「0000」だとすると、フォルダ内にある「0000りんご.JPG」というファイルを開く。りんごの部分は特定の文字でないためワイルドカードを使用してみましたがうまくいきません) Sub test() Dim P As String Dim Fname As String Fname = ActiveCell.Value P = "パス名\" & Fname & "*.JPG" Shell "Rundll32.exe" & " Shimgvw.dll,ImageView_Fullscreen" & " " & P, vbNormalFocus End Sub どうぞよろしくお願い致します。

  • エクセルマクロでフォルダのコピーがしたい

    こんにちわ 色々調べてフォルダのコピーはできたのですが、色々いじっていて分からないことが出てきたので質問に来ました。 やりたいことはフォルダをコピーしたいのですが、それぞれ名前を自動で変えようと思い下記(1)を元に下記(2)を作ってみましたが、動きませんでした。 (1)いくつかのサイトを見て動いたマクロ sub test() Dim myFSO As New FileSystemObject myFSO.CopyFolder "C:\test", "C:\test2" End Sub (2)ちょっといじって動かないマクロ sub test() Dim myFSO As New FileSystemObject Dim name As String Dim name2 As String name = "C:\test" name2 = "C:\test2" myFSO.CopyFolder "name", "name2" End Sub 「パスが見つかりません」と出てきたので、読み込んでいないのだとは思うのですが、どうしたら動くかアドバイスをいただきたいです。 よろしくお願いします。

  • 大至急! 一連のマクロが止まってしまいました。対処法をおしえてください。

    シーケンサから送られてくるデータがあり、 それを24時間モニターするシステムをexcel2007で構築しています。 詳細 ・excelとシーケンサは1秒ごとに通信している ・1ブックに7シート(うち5シートがグラフ) ・一日三つのブックを保存します。 ・ひとつのファイルが約400KB程あり、  一日で諸々含め約1.5Mほどになります。 ・excel自体には、タイマーで自動起動するマクロが  (印刷、保存1、保存2、保存フォルダ作成、画面クリア、   次回タイマー予約)とあります。 ・PCスペックは  core2duo 500GB メモリ2GB 上記システムが、約三カ月稼働後の印刷を最後に、タイマーマクロが働かなくなり、再起動後、20日で再び同じ症状になりました。 二度とも、保存1の段階(もしくは印刷終了後)でストップしています。 一度目には、保存フォルダに0kbのファイルを確認しました。 (つまりは、保存に失敗しているってことでしょうか?) ちなみに、ストップしたのは、マクロのプログラムで、 EXCEL自体の表示はモニターをし続けていました。 ただ、そこから終了をかけても落ちない状態でした。 保存作業で引っかかり、それが尾を引いて他の作業が出来なくなった、と考えるべきでしょうか? 実際、その現場に自分も居合わせてはおらず、その時の状況(CPU稼働率、メモリの状況など)が不明確で、大変申し訳ありませんが、 それらの対処法があれば教えてください。 一応、保存コードも記載しておきます。 Option Explicit Sub DB保存() On Error Resume Next Dim bn As String Dim 値 As String Dim 本日 As String Dim 新ブック As String Dim 年 As String Dim 月 As String Dim 日 As String Dim 時間 As String bn = "予冷庫 温湿度管理表.xlsm" 年 = Year(Now) 月 = Month(Now) 日 = Day(Now) 時間 = 235400 '変更注意 本日 = Format(expression:=Date, Format:="yyyymmdd") 値 = (本日) & (時間) 新ブック = "C:\xxx\管理者用\DB\DB" & (値) & ".xlsm" 'パス変更注意 Workbooks(bn).SaveCopyAs Filename:=新ブック End Sub

専門家に質問してみよう