• ベストアンサー

Excel2003 マクロ(VBA) どこにあるか分からないフォルダAのワークブックAを開く

いつもお世話になっております。 新しいマクロの記録でフォルダAのワークブックAを開きました。 ChDir "C:\フォルダA" Workbooks.Open Filename:= _ "C:\フォルダA\ワークシートA.xls" しかし、今はフォルダAがCドライブにありますが、 明日はデスクトップ上にあったり、フォルダBの中に入っていたりするかもしれません。 このような時、上記のようなVBAでは開けません。 どこにあるか分からないフォルダAのワークブックAを開くには どこをどのように直せばよろしいのでしょうか? 以上、よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 以下は、当たり前のことですが、同名ファイルは、1回きりしか開けません。ただ、すべてを検索してきます。その中で、同名なら、1回だけ開けられます。 なお、ワイルドカードは、あまり使わないほうがよいです。FileSearchオブジェクトは、MS-DOS・コマンドプロンプトとは違う法則になっていますので、独自のワイルドカードはかなりヘンな癖を持っています。また、一旦検索すると、そのキャッシュが残りますので、時間は、多少速くなるはずです。 なお、以下は、Windows のバージョンに多少影響を受けます。XP以上なら、問題ないと思ってよいです。 '標準モジュール設定 Sub TestFindFile() Dim i As Long Dim ret As Integer '検索ファイル名 Const FNAME As String = "ワークシートA.xls"  With Application.FileSearch     .NewSearch     'バス指定     .LookIn = "C:\Documents and Settings\"     .Filename = FNAME     .SearchSubFolders = True     .Execute     If .FoundFiles.Count > 0 Then     For i = 1 To .FoundFiles.Count       ret = MsgBox(.FoundFiles.Count & " 個のファイルが見つかりました。" & vbCrLf & _       .Filename & " を、" & vbCrLf & _       Mid$(.FoundFiles(i), 1, InStrRev(.FoundFiles(i), "\")) & vbCrLf & _       "で見つけました。" & vbCrLf & _       .Filename & "をオープンしますか?", vbOKCancel)       If ret = vbOK Then        Workbooks.Open .FoundFiles(i)        '一回きりしか開けません。        Exit Sub       End If     Next     Else       MsgBox "対象ファイルはありませんでした"     End If   End With End Sub

kenta-s
質問者

お礼

できました!! 対象のワークシートには他では付けないような名前が付いているので ""を含むファイルを開く感じで全然大丈夫でした。 まだまだ理解できないコードが沢山ありますが、 徐々にそれを理解して応用できるように頑張りたいと思います。 ありがとうございました。

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

その他の回答 (5)

回答No.6

ANo.2の者です。 以下全部をエディタへ貼り付けマクロ「OpenDialog」を 実行すると、正常に動作しますよ。 おそらく、最後のFuctionの部分を貼り付けてられなかったのでは? Sub OpenDialog() Dim File種類, Prompt, Item As String Dim FileNamePath As Variant 'ファイルのパスを取得します File種類 = "Excel ファイル (*.xls),*.xls" Prompt = "out課題1.xlsを選択してください" FileNamePath = SelectFileNamePath(File種類, Prompt) If FileNamePath = False Then 'キャンセルボタンが押された End End If Workbooks.Open Filename:=FileNamePath End Sub Function SelectFileNamePath(File種類, Prompt) As Variant SelectFileNamePath = Application.GetOpenFilename(File種類, , Prompt) End Function

kenta-s
質問者

お礼

End Subの後にもコードをかけるんですね…。 勉強になりました! 書いてくださったVBA、試してみたのですが オープンダイアログ?が開かれて「ワークブックAを選択してください」と表示されるだけで、ワークブックAが開かれるわけではないようです。 他の方の回答で無事解決しました。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

#3の補足: # 同名ファイルは、1回きりしか開けません。ただ、すべてを検索してきます。その中で、同名なら、1回だけ開けられます。 同名ファイルは、違うフォルダなら、何個でも存在することは可能ですが、Excelで、開く段になると、1つしか選べません。同じファイル名を開けようとすれば、エラー・ダイアログで、 「! '○○.xls'と同じ名前のファイルが既に開いています。保存先か別のフォルダでも、同じ名前のファイルを同時に開くことはできません。2つめのファイルを開く場合、一方のファイルを閉じるか、またはいずれかのファイルの名前を変更してください。」 となります。 なお、#3 のコードは、 .Filename & "をオープンしますか?", vbOKCancel)      ↓ Mid$(.FoundFiles(i), InStrRev(.FoundFiles(i), "\") + 1) & "をオープンしますか?", vbOKCancel) と変えたほうがよいです。そのまま、ファイル名を入れても、ワイルドカードが働いていることが分かりました。 例: 検索名: TEST1.xls ヒットファイル名:MYTEST1.xls たぶん、ワイルドカードを防ぐ方法はあるかとは思いますが、あまり、細かな設定は、逆に、自由度を失うのでやめました。

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

フォルダやドライブが違えば、同名のファイル名が許されるのではないでしたっけ。 そうだとすれば(質問のケースでは通常ではつけないような、特殊なファイル名をつけているとは思いますが)あるフォルダに見つかったからといって、目指すものでない可能性が万に一起こりませんか。システムではあまり質問のようなことはしないことではないですか。(<=今はフォルダAがCドライブにありますが、明日はデスクトップ上にあったり、フォルダBの中に入っていたりするかもしれません。という状況を許すというのが、どういう必要性なのか) ーー こういう類の問題は VBAよりも、VBScriptのFSOの方が、ふさわしくないかと、本をざっと 見てみましたが、ファイル名を中心に、どのドライブやフォルダにあるというのを、一発で検索してくれるものはなさそうです。 フルパスを指定してFileExists(パス)というので限定のパスについて、調べるか、しらみつぶし式に調べるかではないですか。 FSOの解説を調べれば、「全てのドライブを参照したい」からはじまる、「コレクションのFor Eachが使えるもの」の解説が出てきますので、使えないか見てください。 http://www.bcap.co.jp/hanafusa/VBHLP/FSO01.htm のFileSystemObject オブジェクトの箇所など多数 ただしツリー構造のもの(ファイルシステム)を探索する(バックトラック法に類したことなど)などなれないと難しいかも。 小生にとって、あまり日常的に取り扱っている分野でないので、参考程度にしてください。   

kenta-s
質問者

お礼

難しい用語が多く、どのコードをどこで使えば良いかまだ理解できません。 それがわかるようになれば教えてくださったリンク先が十分参考になると思います。精進します。 ありがとうございました。

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

以下のリンクのやり方では如何でしょうか? http://www.k1simplify.com/vba/tipsleaf/leaf12.html

kenta-s
質問者

お礼

リンク先を参照し、ちょっといじってみたのですが…。 Sub OpenDialog() Dim File種類, Prompt, Item As String Dim FileNamePath As Variant 'ファイルのパスを取得します File種類 = "Excel ファイル (*.xls),*.xls" Prompt = "ワークシートA.xlsを選択してください" FileNamePath = SelectFileNamePath(File種類, Prompt) If FileNamePath = False Then 'キャンセルボタンが押された End End If Workbooks.Open Filename:=FileNamePath End Sub SelectFileNamePathの部分も変える必要があるみたいなのですが、 どう変えれば良いのかわかりません。 PC初心者レベルなので専門用語(違うかもですが)がさっぱりと言って良いほどわかりません。 なのでリンク先は今の私には難しいようです。 徐々に理解していけるようになれたら と思います。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

普通にドライブ内のファイル検索を実行してみれば、結構時間がかかるかと思います。 開くたびにそのような時間を消費してもいいのでしょうか?

kenta-s
質問者

補足

時間がかかるとしても、その方法以外にないのでしたらそれで構いません。 実際にフォルダの場所がころころ変わるので… 以上、よろしくお願いいたします。

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

関連するQ&A

  • エクセルのマクロで、他のブックを開くときについて

    マクロの記録を利用して、他のブックを開くことをしました。 マクロのモジュールを見たら、 ChDir "C:\Documents and Settings\*****\デスクトップ" Workbooks.Open Filename:="C:\Documents and Settings\*****\デスクトップ\○○.xls" となっていました。 1行目の「Chdir」というのはなんでしょう? また、2行目では開きたいブックをパスを使ってあらわしています。 今マクロを動かしているブックと同じフォルダ内にあるブックや そのフォルダから見て上位のフォルダとか、「c:」から始まる パスを使わないような書き方はあるのでしょうか? ご助言お願いします。

  • VBA Workbooks.open

    ブックを開くコマンド × Workbooks("filename.xls").open ○ Workbooks.open filename:="filename.xls" 何故下なのですか?ワークブックコレクションの中から特定のブックを指定し開くなら、上の構文にした方がワークシートコレクション等と構文表現を統一出来ます。 現にブックを閉じるコマンドは Workbooks("filename.xls").close です。何故ブックを開くコマンドだけ別表現なのですか?

  • Excelでファイルを開くをマクロで行いたい

    マクロ初心者です "ファイルを開く"をマクロの記録で記録させると ChDir "C:\Documents and Settings\○○\△△\※※" Workbooks.Open Filename:= _ "C:\Documents and Settings\○○\△△\※※¥LotLog20070131.csv" Windows("●●●.xls").Activate End Sub と記録されます この中で 開きたいファイルネ-ム(上記ならばLotLog20070131.csv)を "●●●.xls"の どこかのセルを参照に開きたいのですが どうすれば宜しいのでしょうか?

  • ワークブックに名前をつけて保存するマクロ

    教えてください!! ワークブックで名前をつけて保存するときのマクロなんですが、 自動記録すると下記のように記述されています。 ActiveWorkbook.SaveAs Filename:="C:\○○○\○○○\□□□□□.xls" この□□□□□の部分はインプットボックスを表示させたいのですが、 こういうマクロを組むことはできますか?

  • Excel VBA

    Excel VBAを勉強中の者です。 複数のワークブックを開いているため、ワークブックから指定していってセルを選択したいと思い下記のようなコードにしてみたのですができませんでした。 Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select このようなコードは有り得ないのでしょうか? または、ワークブックを開いて、ワークシートをアクティブにして、セルを選択するというように、ひとつひとつ選択していくのではなく、一文でワークブックからセルまで指定する他の方法はありますでしょうか? 教えてください。よろしくお願いします。

  • ■VBAマクロでワークブックAにワークブックBの集計をしたい。

    ■VBAマクロでワークブックAにワークブックBの集計をしたい。 ただし、ワークブックBは同じ番号で何個もあり、日付も並んでいません。 またワークブックAにあってBにない番号、また逆もあります。 それを日付が近いものから3つまで表示。 例) ワークブックA (sheet1)  番号 メモA1  メモA2 メモB1  メモB2 メモC1 メモC3 11111 2010/7/7  ccc 2010/5/5 ddd 2010/3/3 bbb 22222 2010/10/10 fff 2010/2/2 eee 35851 2010/12/12 ggg 54321 ワークブックB (sheet1) 番号  日付  メモ 11111 2009/1/1 aaa 11111 2010/3/3 bbb 11111 2010/7/7 ccc 11111 2010/5/5 ddd 22222 2010/2/2 eee 23568 2010/4/4 hhh 22222 2010/10/10 fff 35851 2010/12/12 ggg ※ワークブックAは最初項目と番号以外メモ部分は白紙です。例)は実行後の結果です。 質問で足りない部分ありましたら補足を入れますのでよろしくお願い致しますm(__)m

  • エクセルVBAでの呼出操作をマクロ化するには?

    エクセルVBAでの呼出操作をマクロ化するには? エクセル2000です。宜しくお願いします。 VBAで、ファイルを呼び出したいのですが、Workbooks.openの書き方が良く分かりません。 呼び出すファイル名は決まっていなくて、フォルダ名は固定です。 エクセルの操作で言うと、ファイルを開くを押して、フォルダを選ぶとこまでをマクロかしたいのですが。 例えば、ドライブDの「作業用」フォルダを開きたい場合は、どう記述すれば宜しいでしょうか? 基礎的な部分でお恥ずかしいのですが、以下で実行しても動かんのです。 ChDir "D:\作業用" Workbooks.OpenText Filename:= "D:\作業用\*.*"

  • Excel VBAで他のワークブックからのコピぺの仕方について

    Excel VBAで開いている全てのワークブックから決められたセルの中身とそのシート名をそれぞれ決められた一つのワークブックにコピぺする マクロを作りたいのですが、どうやって作って良いのかが分かりません。 例えば、 Sub Mac() For i = 1 To 100 Workbooks("Book1.xls").Worksheets("sheet1").Range(Cells(2108, 2), Cells(3108, 2)).Cut Destination:=Workbooks("Book1.xls").Worksheets("sheet1").Cells(13, 2) End Sub みたいにすれば良いと思うのですが、開いている全てのファイルからのコピぺってどうやって記述するのでしょうか? 何卒よろしくお願い致します。

  • エクセル2000VBAでファイルを操作したい

    いつもお世話になっています。 エクセルVBAで別のワークブックを参照したいので workbooks.open Filename:="C:my documents\***.xls" とすると、そのオープンするワークブックのTisWorkbookのWorkbook_Open()で実行している(.show)メニュー(ユーザーフォーム)が開いてしまいます。 このとき、Workbook_Open()を実行させないでワークブックを開く方法って、 なにかありますか? Shiftを押しながらファイルを開くとき、実行されませんよね?それをVBAでできるのですか? よろしくお願いします。

  • エクセルマクロでマクロをアクティブにしたくない

    エクセルのマクロをひとつの「マクロA」という名前で、データーファイルからセルに入っている内容などを呼び出しながらまくろAのシートにデーターを貼り付けながら作業をしています。 Workbooks.Open Filename:= _ "C:\Documents and Settings\owner\My Documents\マクロ.xls" Application.Run "マクロ.xls!マクロ" と記載すると、マクロXLSがアクティブになってしまいます。 その為記載に'ActiveWindow.WindowState = xlMinimized と入れたりするのですが、アクティブになるシートがマクロ以外にうまくいかないことがあるのです。 データーシートは、毎回データーが変わる関係で、DATA.xlsがAのときやBのときが発生します。

このQ&Aのポイント
  • 西之表市の名産品についてのご質問をいただきました。
  • 名産品としては、〇〇や△△が有名です。
  • ぜひ、足を運んで味わってみてください!
回答を見る

専門家に質問してみよう