- ベストアンサー
エクセル 一つ上の階層の別フォルダのファイル名
フォルダ「1」の中にあるエクセルファイル「A」を開いています この状態でフォルダ「2」の中にあるエクセルファイルの全ファイル名を取得したい のでご教示願います フォルダ「2」はフォルダ「1」と同じ階層にあります フォルダ「1」 ------ フォルダ「2」 l l l l エクセルファイル「A」 エクセルファイル「*」, エクセルファイル「**」…ファイル数は不確定
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
本質問は処理をプログラムでやる場合でしょう。 ・Dir関数や ・FSOのGetfolder、Files が使われる。 Sub test43() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") Set objfolder = FSO.GetFolder("C:\Documents and Settings\XXXX\My Documents").Files For Each fl In objfolder MsgBox fl.Name Next Set FSO = Nothing End Sub しかしどちらも人間が調べてC:\Documents・・・ に当たるPathを調べて書き込めば済むことではないですか。 初心者らしいが、凝ったことを考えすぎではないか。 「親と同階層のフォルダの別フォルダ」の子にあるかどうかも、全部プログラムで作成管理している場合は別だが、そうでないと、そこにあるかどうか保証の限りではない場合が多いわけだし。実際にあるフォルダやファイルの状態を相手にプログラムを 実行するわけだから。 ーー Sub test43() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") ''C:\Workフォルダ内に保存されているファイルの個数を表示します Set objfolder = FSO.GetFolder("C:\Documents and Settings\XXXX\My Documents").Files MsgBox FSO.GetFolder("C:\Documents and Settings\XXXX\My Documents").ParentFolder End Sub のようにして、上位フォルダー名は判る。(C:\Documents and Settings\XXXX) それ+(兄弟フォルダのフォルダ名)+ファイル名でいとこのファイルが指定できるのでは。 ーー 別件だが 私が連想したものに、シートでも Sub Sample2() MsgBox "1つ左は" & ActiveSheet.Previous.Name MsgBox "1つ右は" & ActiveSheet.Next.Name End Sub は実際では、使える場面が少ない。
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
ん? フォルダ名「1」と「2」が共に既知なら,ぐだぐだやらなくても話ははるかに簡単で済んでしまいますね。 sub macro2() dim myPath as string mypath = application.substitute(thisworkbook.path, "\1","\2") ’ファイルを取得する myFile = Dir(myPath & "\*.xls*") Do Until myFile = "" i = i + 1 Cells(i, 1) = myFile myFile = Dir() Loop End Sub #Dir関数のヘルプの使用例の,そのまんまです。
- nayuta_lot
- ベストアンサー率64% (133/205)
こんにちは こちらにファイルの一覧を取得するVBAが掲載されてますので参考にしてみては いかがでしょうか? ↓↓↓ http://officetanaka.net/excel/vba/file/file07.htm パスの指定をフォルダ2で行うのをお忘れなく・・ それでは
- keithin
- ベストアンサー率66% (5278/7941)
フォルダ1と2は必ず2個しか無く必ず2個あるとすると。 Sub macro1() Dim myPath As String Dim myFile As String Dim ThisFolder As String Dim check1 As Boolean Dim i ’自分フォルダを調べる myPath = ThisWorkbook.Path i = InStrRev(myPath, "\") ThisFolder = Mid(myPath, i + 1, 99) myPath = Left(myPath, i) ’フォルダを取得する myFile = Dir(myPath, vbDirectory) Do Until myFile = "" If myFile <> "." And myFile <> ".." And myFile <> ThisFolder Then If (GetAttr(myPath & myFile) And vbDirectory) = vbDirectory Then myPath = myPath & myFile & "\" check1 = True Exit Do End If End If myFile = Dir() Loop If Not check1 Then MsgBox "no folder" Exit Sub End If ’ファイルを取得する i = 1 myFile = Dir(myPath & "*.xls*") Do Until myFile = "" Cells(i, 1) = myFile i = i + 1 myFile = Dir() Loop End Sub #ファイルやフォルダを調べる方法は幾つかありますが,ご相談で明記されていないご利用のエクセルのバージョンによって,使える方法と使えない方法があるので注意してください。 今後ご相談投稿時には,ご利用のソフトの名称はモチロンのことバージョンもしっかり記載してください。 #それとは別に,上記のマクロはExcel2000以降で利用できます。
お礼
’自分フォルダを調べる myPath = ThisWorkbook.Path i = InStrRev(myPath, "\") ThisFolder = Mid(myPath, i + 1, 99) myPath = Left(myPath, i) これが決め手でした myPathがわかればこの後ろにフォルダ「2」を入れて 中にあるファイルをDo While で検索できますね ありがとうございました