Excel VBAを使って複数のブックを自動で開く方法とは?

このQ&Aのポイント
  • Excel VBAを使って、複数のブックを自動で開いて閉じる処理を実現したいと思っています。具体的には、集計.xlsxというブックに複数のファイルのパスとファイル名が記入されており、それらを順に開いてすぐに閉じるという処理を行いたいです。
  • この処理を実現するためには、集計.xlsxの特定のシートに「開く」というボタンを配置し、クリックされた時にその時点のA1セルとB1セルの値を組み合わせてファイルを開くというロジックを組む必要があります。また、ファイルの数が可変であるため、繰り返し処理を行うことも必要です。
  • Excel VBAを活用することで、複数のブックを自動で開く処理を簡単に実現することができます。具体的な処理の流れは、集計.xlsxの特定のシートに設置された「開く」ボタンがクリックされると、その時点のA1セルとB1セルの値を組み合わせてファイルを開き、すぐに閉じるという処理を繰り返すというものです。処理の回数はファイルの数に応じて可変です。Excel VBAの知識を活用して、効率的に複数のブックを開く処理を行いましょう。
回答を見る
  • ベストアンサー

Excel 他の複数ブック開くVBA 

お世話になります。田中と申します。 以前も同じ質問させていただきましたが、複数のブックを自動で開いて閉じるVBAロジックをご教授いただきましたく思います。 Excel VBAを使って下記(1)、(2)の処理を実現したいと思っております。 どなたかVBAロジックをご教授いただけませんでしょうか。 (1)集計.xlsxというブックがあります。このブックに[ファイル]というシートがありまして A1のパス、B1にファイル名が記入されています。 この組み合わせのファイル数は可変ですが下記のように大体10個程度あります。 A2(パス)+B2(ファイル名) A3(パス)+B3(ファイル名) A4(パス)+B4(ファイル名) A5(パス)+B5(ファイル名) ・・・ (2)このシートに[開く]というボタンを配置して、クリックされたらA1(パス)+B1(ファイル名)でファイルを開いて何もしないですぐに閉じて、次のファイルを開いて閉じて、また次のファイルを開いて閉じて。。という動きをファイル数分繰り返したいのです。 どなたかご教授いただけますでしょうか。 よろしくお願い致します。

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは それは本当に必要な処理なのでしょうか? 気になりますが、「test」で正しいファイルパスがイミディエイトウィンドウに 表示されるか確認しておいて下さい。 A列のデータの最後に円マークが無いならそれを追加するコードが必要です。 Sub test()   Dim r As Range   With ThisWorkbook.Worksheets("ファイル")     For Each r In .Range("A1", .Range("A" & Rows.Count).End(xlUp))       Debug.Print r & r.Offset(, 1) '      Debug.Print r & "\" & r.Offset(, 1)     Next   End With End Sub 正しいパスが表示されるなら、「test1」をフォームのボタンのマクロに登録して下さい。 Sub test1()   Dim r As Range   Dim b As Workbook   Application.ScreenUpdating = False   With ThisWorkbook.Worksheets("ファイル")     For Each r In .Range("A1", .Range("A" & Rows.Count).End(xlUp))       Set b = Workbooks.Open(r & r.Offset(, 1)) '      b.Save '保存しない場合はコメントアウト       b.Saved = True       b.Close     Next   End With   Application.ScreenUpdating = True End Sub

yakkun2338
質問者

お礼

ushi2015さん、ご連絡ありがとうございます! ご教授いただきましたロジックにて希望していた動きが実現できました。 このたびは本当にありがとうございましたm(_ _)m

その他の回答 (1)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

「A」列に D:\Programming\ D:\Programming\ D:\Programming\ D:\Programming\ D:\Programming\ D:\Programming\ 「B]列に Test_00.xlsx Test_01.xlsx Test_02.xlsx Test_03.xlsx Test_04.xlsx Test_05.xlsx と入っているとします。 この状況で Sub Test() For i = 1 To 6 f = Cells(i, 1).Value & Cells(i, 2).Value Set a = Workbooks.Open(f) Application.ScreenUpdating = True Application.Wait Now + TimeValue("0:00:05") a.Close Next i End Sub とすると、それぞれのファイルを5秒ずつ、表示しました(Excel2016で確認)。 しかし、セルの部分は表示されたものの、「リボン」の部分が真っ白でしたが、一応、目的は達成していると思います。 あとは、環境によって、異なりますので、質問者の環境で「数分」になるように、この処理を繰り返せばいいと思います。

yakkun2338
質問者

お礼

Prome_Linさん、ご連絡ありがとうございます! とてもご丁寧なご説明を添えていただきました誠にありがとうございました。 ご教授いただきましたロジックで実現できました! この度は本当にありがとうございました!

関連するQ&A

  • EXCEL VBA 複数ブックを自動オープン

    お世話になります。田中と申します。 Excel VBAを使って下記(1)、(2)の処理を実現したいと思っております。 どなたかVBAロジックをご教授いただけませんでしょうか。 (1)集計.xlsxというブックがあります。このブックに[ファイル]というシートがありまして A1のパス、B1にファイル名が記入されています。 この組み合わせのファイル数は可変ですが下記のように大体10個程度あります。 A2(パス)+B2(ファイル名) A3(パス)+B3(ファイル名) A4(パス)+B4(ファイル名) A5(パス)+B5(ファイル名) ・・・ (2)このシートに[開く]というボタンを配置して、クリックされたらA1(パス)+B1(ファイル名)でファイルを開いて何もしないですぐに閉じて、次のファイルを開いて閉じて、また次のファイルを開いて閉じて。。という動きをファイル数分繰り返したいのです。 変な処理ですが、本Excelのリンクの値がリンク先のファイルを開かないと値が飛んでこないので、リンク先のファイルを開く処理を自動化したかったのです。 どなたかご教授いただけますでしょうか。 よろしくお願い致します。 環境 Excel2013

  • EXCELで他のブックを参照する方法について

    BookA.xlsx(明細)と、BookB.xlsx(集計先:関数集計+グラフ)ふたつのブックがありますが、Aを開かずにBを開くと集計されません。COUNTIFS関数等を使っているからのようですが、コードの記述で集計できませんでしょうか。 (AとBを同じブックにすれば簡単なのですが、今回は諸事情によりできません) パス・ファイル名・シート名をBookBに埋め込んで、それを呼び出すなどできませんでしょうか。コード初心者なので、具体的なサンプルをご教授頂けると助かります。大変お手数ですがよろしくお願いいたします。

  • EXCEL VBA 別ブックから貼り付け

    お世話になります。 A、Bという2つのブックがあります。 A.xls データファイル B.xls 処理実行ファイル Bブックを開いてSheet1に置いてあるボタンを押すとファイル洗濯ダイヤログが出てきて、そこで指定したBブックをsrtPathに格納(シートは1つだけ)のBブックのA1から全データをAブックのSheet1に貼り付けたいのです。 下記VBAを書いてみましたがエラーになってうまく動きません。 Workbooks(strPath).Range("A1").Copy ActiveWorkbooks.Worksheets("Sheet1").Range("A1").PasteSpecial どなたが解決方法をご教授いただけませんでしょうか。 よろしくお願い致します。

  • エクセルVBA 他ブックの同じ行に貼り付け(可変)

    皆さんこんにちは。 度々こちらでお世話になっております。 エクセル2013使用のVBA初心者です。 ブック1の「検索」シートで絞り込み結果が1つになるまで 絞り込んだ後の話です。 ブック1「検索」シートで絞り込み、結果が1行になったら その行をコピーして ブック”データベース.xlsx”のSheet1の(検索シートと)同じ行に 貼り付けをしたかったのですが 下記のコードですと”データベース.xlsx”を開いて保護をやめるところまで動くのですが 貼り付け箇所でエラーが出てしまいます。 エラーは「1004RangeクラスのPasteSpecialメソッドが失敗しました」です。 原因はなんとなく「行」をWith Sheets("検索").AutoFilter.Rangeじゃないところで 使っているからかな?と思っているのですが 『可変の検索シートの絞り込み結果行と同じ行を  他ブックで選んで貼り付け』 の書き方が分かりません。 ブック1検索シートの絞り込み結果1行(可変)をサーバー上にある データベース.xlsx”のSheet1の同じ行に貼り付ける方法を 教えていただけないでしょうか。 --------------------------------------------------------------------- With Sheets("検索").AutoFilter.Range With .Resize(.Rows.Count - 1).Offset(1) Dim 行 As Integer 行 = .Columns(1).SpecialCells(xlCellTypeVisible).cells(1).Row Sheets("検索").Range("A" & 行).EntireRow.Copy Workbooks.Open Filename:="¥¥***.**.**.**¥DATE¥データベース.xlsx" Workbooks("データベース.xlsx").Sheets("Sheet1").Unprotect Workbooks("データベース.xlsx").Sheets("Sheet1").Range("A" & 行).PasteSpecial Workbooks("データベース.xlsx").Sheets("Sheet1").Protect Workbooks("データベース.xlsx").Save Workbooks("データベース.xlsx").Close

  • excel 他ブックからセルを範囲で取得する方法

    Abook.xlsx、B1book.xlsx、B2book.xlsx、B3book.xlsxというファイルがあります。 B1book~B3bookは同じフォーマットになりますが、Bbookのセル範囲(A1:C7)を Abookの「集計シート」にセットしたいのですが、コードでの記述をご教授 頂けませんでしょうか。 Abookのイメージ    A      B ・・・・・・H  1 B1book.xlsx  A1・・・・・・A7  2         B1・・・・・・B7  3         C1・・・・・・C7  4 B2book.xlsx  A1・・・・・・A7  5         B1・・・・・・B7  6         C1・・・・・・C7  7 B3book.xlsx  A1・・・・・・A7  8         B1・・・・・・B7  9         C1・・・・・・C8 このようなイメージになります。 よろしくお願いします。

  • EXCEL VBA 他ブックのシートのコピー方法

    今開いているブックに、開いていない他のブックのシートをコピーする記述方法を教えて頂けませんでしょうか。(Office365を利用)  開いているブック :A.xlsx  シート:a  開いていないブック:B.xlsx  シート:b bをaの後ろにコピーする方法を教えてください。aにボタンを置いて、それをクリックしたらという方法でも構いません。 よろしくお願いします。

  • EXCELで複数のファイルを同じブック内で開きたい

    久しぶりにVBAを使用してやらせたいことがありますので、質問です。 複数のCSVファイルがあり、これを同じブック内のシートとして開くことは 出来ますでしょうか。 メニューから開くとして、それぞれのファイルを開くと、別々のブックにて開いてしまいます。 これを同じブックで、シート別に開かせたいのですが、出来ますでしょうか。 さらに、これをVBAでやりたいと考えております。 まず考えたのは、 ”Application.GetOpenFilename”です。 ただし、これを利用すると、別々のブックでしか開くことができませんでした。 次に考えたのが、”QueryTables.Add”を利用することです。 これだと、同一ファイル、同一シート内にデータを取り込むことができるので、 問題ないのですが、ファイル名を指定しなければなりません。 ファイルが変わるたびにVBAでパスを修正するのは大変ですので、 ”QueryTables.Add”のデータ取り込みでファイル選択ダイアログが開くような コードがあればよいと考えております。 ファイル選択のダイアログが開いて、そのファイルのパスが取得できるような コードにすれば、”QueryTables.Add”にてデータの取り込みができそうなのですが、 どうすればよいか思いつきません。 "Dialogs(wdDialogFileFind)"というものも見つけたのですが、うまくいきませんでした。 何か良い方法がありますでしょうか。 よろしくお願いします。 Dialogs(wdDialogFileFind)

  • エクセルVBA、マクロについて教えてください。

    https://box.yahoo.co.jp/guest/viewer?sid=box-l-62itttdrrgzrvsaxkvu53tmg3a-1001&uniqid=d4c90186-7ae6-4c7a-8f04-a499509147fc&viewtype=detail サンプルブックを見て頂きたいのですが、シートに分けておりますが、それぞれ別ブックとなります。 エクセルブックAにはシート1-シート10まであります。 ブックAのデータをVBAを使って、ブックBに転記したいのですが、 今はVBAがわからないため、作業列、関数を使って読み取っているのですが、検索をかけると、とても遅いため、関数を消すと早く検索が出来たため、VBAでデータを転記出来たらいいなと思っております。 いくつか条件があるのですが、 ブックAのAQ-ATが作業列としており、 ブックBのG-Uまで関数を入れております。 G4==SUMIFS('[ブックA.xlsx]シート1'!$AD:$AD,'[ブックA.xlsx]シート1'!$AQ:$AQ,$A4,'[ブックA.xlsx]シート1'!$AS:$AS,$F$2,'[ブックA.xlsx]シート1'!$AT:$AT,G$2) H4==SUMIFS('[ブックA.xlsx]シート1'!$AD:$AD,'[ブックA.xlsx]シート1'!$AQ:$AQ,$A5,'[ブックA.xlsx]シート1'!$AS:$AS,$F$2,'[ブックA.xlsx]シート1'!$AT:$AT,H$2) I4==SUMIFS('[ブックA.xlsx]シート1'!$AD:$AD,'[ブックA.xlsx]シート1'!$AQ:$AQ,$A4,'[ブックA.xlsx]シート1'!$AS:$AS,$F$2,'[ブックA.xlsx]シート1'!$AT:$AT,I$2) 同じような関数をG-Uまで入れております。 このような関数を入れております。 E4==VLOOKUP(A4,'[ブックA.xlsx]シート1'!$B:$AC,28,FALSE) この関数をなくすとAdvancedFilterが早くなるので、ここの部分を転記出来たらと考えております。 ブックAとブックBはブックAのB列のコードとブックBのA列のコードが一致すれば、転記すると言った感じです。 決まっている部分は、商品コードは重複しないのと、ブックAのB列は結合されております。 結合セルのため、作業列を使用しておりました。 ブックAの基準をかえずに転記できる方法があればおしえてください。

  • Excelファイル連続置換vba

    Excelで複数の文字列を一気に置換するvbaを教えていただけないでしょうか。 Book2の置換リストをBook1のSheet1に完全一致で置換したいのです。 Book1.xlsx:元ファイル Book2.xlsx:置換リスト ※下記のような配列 A列 B列 1 01_1 2 02_2 3 03_3 4 04_4 以上です。 よろしくお願いいたします。

  • 複数エクセルブックを一つにするマクロが知りたいです

    フォルダ内に「01.xlsx」「02.xlsx」…「10.xlsx」という10個のブックがあります。 各ブックの中には、ブック名に対応した形で「01」「02」…「10」というシート名のシートが一つだけ入っています。 同フォルダ内に「matome.xlsx」というブックを用意して、マクロ処理をかけることで、「matome.xlsx」の中に「01」「02」…「10」のみの10個のシートが入った状態にしたいです。 マクロ処理をかける前の「matome.xlsx」のシートには、「sheet1」という、シートが一つだけ入っている状態です。 仕事のデータをまとめるのに、困っています。。。 何かいい方法はありますでしょうか。 マクロに詳しい方、お教えいただければ幸いですm(_ _)m

専門家に質問してみよう