複数のファイルからシートを検索する方法

このQ&Aのポイント
  • VBAを使用して、複数のファイルから特定のシートを検索して値をコピーする方法について教えてください。
  • 現在、1つのファイルのみを選択して、指定したコード名のシートをコピーすることはできますが、複数のファイルを開いた場合にどのようにVBAを記述すればいいかわかりません。
  • 会社の案件管理のために、将来的に対象部署が増えることを考慮し、絶対に重複しない案件コードで対象ファイルを選択して情報をコピーする方法を検討しています。VBAを使用して実現する方法があれば教えてください。
回答を見る
  • ベストアンサー

複数のファイルよりシートの検索を行うには

お世話になっております。 以下のような事をおこないたいのですが、VBAで可能でしょうか? (1)ファイルAのボタンを押す (2)複数のファイルを開く (3)入力した案件コード名のシートが存在するファイルを選択する (4)存在したシートの値をファイルAにコピーする (1)及び(2)、(4)については個々の動きではありますが 実行できる事はわかったのですが、(3)の部分に ついてはどうやったらいいのかが分からない状態です。 背景 現在、会社にて部署別の案件管理をしているのですが、現在は、対象部署が1つしかないので、ファイルAのVBA上に対象ファイルを記述しているのですが、今後対象部署が増えるので今後の事も考慮し、対象ファイルをソース上に記入した場合、組織改正毎に修正するのが大変なので、絶対に重複しない案件コードで対象ファイルを選択して情報をコピーする事ができれば、メンテナンスの面からも楽だと思い、 このような事ができないかと思案しております。 決まった1ファイルのみを選択して、入力したコード名のシートを選択しコピーする事はできるのですが、複数のファイルを開いた場合どのようにVBAを記述すればよいかわからなく、困っております。 お忙しいところ申し訳ありませんが、宜しくお願い致します。

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

  • ベストアンサー
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.2

ごめんなさい。昨日より不調のmatsu_junです。以下のように訂正します。 For i# = 1 To Workbooks.Count For j# = 1 To Workbooks(i).Worksheets.Count If Workbooks(i).Worksheets(j).Name = Sh_Name Then GoTo NEXTSTEP Next j Next i NEXTSTEP: Workbooks(i).Worksheets(j) が目的のシートです。

nabeo1
質問者

お礼

ありがとうございます。 おかげで、問題が解決致しました。 ただ、また別用件が生じてしまいましたが、 当初課題でありました当問題は解消できました。

その他の回答 (2)

noname#240783
noname#240783
回答No.3

下記のコードで参考になりませんか。 Cドライブのtestというフォルダがあり、その中に 複数のExcelファイル(.xls)があるという前提で。 Dirメソッドでファイル名を取得して、それを開いて For Eachでbook内のシートを全部なめて表示し、bookを閉じ、 次のExcelファイルを探して上記の動作を繰り返す、というものです。 book内のシートを全部舐めるところで、 目的のシート名と照合させればいいんじゃないでしょうか。 Private Sub CommandButton1_Click() Dim i As Integer Dim target As String Dim ws As Worksheet i = 1 target = Dir("C:\test\*.xls") If target = "" Then Exit Sub End If Cells(i, 1).Value = target Workbooks.Open target For Each ws In Workbooks(target).Worksheets Cells(i, 2).Value = ws.Name i = i + 1 Next ws Workbooks(target).Close Do target = Dir() If target = "" Then Exit Do Else Cells(i, 1).Value = target Workbooks.Open target For Each ws In Workbooks(target).Worksheets Cells(i, 2).Value = ws.Name i = i + 1 Next ws Workbooks(target).Close End If Loop End Sub

nabeo1
質問者

お礼

ありがとうございます。 当初課題でありました、当問題は解消致しました。

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.1

検索したいシート名を、変数 Sh_Name ( As String ) に格納するとします。その上で、以下の記述を行ってください。 For Each wb In Workbooks For Each sh In Worksheets If sh.Name = Sh_Name Then GoTo NEXTSTEP Next sh Next wb NEXTSTEP: オブジェクト変数「wb」に目的のシートを含むブックが、同じくオブジェクト変数「sh」に目的のシートがセットされます。 試しにその下の行に MsgBox wb.Name MsgBox sh.Name と記述して実行してください。検索したいシートを含むブックの名前がメッセージボックスに表示されます。OKをクリックすると次に検索されたシート名がメッセージボックスに表示されます。例えば sh.Cells(1, 1).Value とすれば、検索したシートのセルA1の値が取得できたりします。

関連するQ&A

  • 複数ファイルの同名シートを集めたファイルを作る

    複数ファイル(約40ほど)にシートが13あります。各ファイルの13のシートの名前はA,B,C‥とおなじ名前となっています。各シートには複雑な命令文で作成されたデータです。同じ名前のシートをコピーしてファイルを作るとデータが異常なものになってしまい困っています。各シートの値と書式のみを集めたシート名のファイルを作りたいのですが,教えて頂けませんでしょうか?尚、私はVBAをかじっている初心者です。出来ればVBAでお願いします。

  • 複数のシートにまたがる列の削除について

    こんばんは、複数のシートを選択して特定の列を削除するVBAについて質問させてください。Sheet1とSheet2のA~C列を削除したく、以下のVBAを入力しましたが、削除されるのはSheet1のA~C列のみでSheet2に同様の処理が行われません。 手作業でやると複数のシートを選択のうえ列の削除ができるので、VBAでできないということはないと思うのですが、どのように記述すればよいのでしょうか・・・?!どなたかご教授よろしくお願いいたします! Sheets(Array("Sheet1","Sheet2")).Select Range("A:C").Delete Shift:=xlToLeft

  • 複数画像から1つ選択し別シートへ貼り付ける

    EXCEL2010を使用しております。 1シートに複数枚ある画像の中から1枚を選び(クリックして)、それを別のシートへ貼り付ける (コピー)VBAができません。 1シート内にある全ての画像を選択の対象として、選択(クリック)された画像のみを張り付けたい のですが何方かお解りになる方はいませんか。 何分VBA初心者の為、ご教授願います。

  • 複数のシートを1つのシートにコピーしたい

    VBA初心者です。よろしくお願いします。 【状況】 1つのワークブックの中に『まとめ』という名前のシート、それ以外にコピーしたいシートが複数あります。 コピーしたくないシートもあります。 まとめを一旦クリアし、コピーしたいシートだけをコピーして貼り付けたいです。 まとめシートもコピーしたいシートも、データの入っているセルは"B5"から始まり、M列までの任意の行までデータが入っています。(B5:M?) 【やりたいこと】 コピーしたいシートのみ、データの入っている範囲をコピーして、まとめシートに貼り付けたい。 最終行を取得するVBAはいろいろなサイトを参考に書くことができたのですが、そこから"B5"までの範囲を指定してコピーをするという方法がいまいち分かりません。 参考にしたサイトはA1~特定の範囲のみ選択というものばかりで・・・。 稚拙ながら途中まで書いたコードです。 (1)Sub B5から最終セルの選択とコピー() (2)Range("B65536").End(xlUp).Offset(0, 11).Select (3)Range("B5", ※).Copy (4)End Sub ※に(2)で取得した最終セルを代入したいのですが方法が分からず・・・。 ここでまず躓いてしまっています。 どうかお知恵を貸して下さい。よろしくお願いします。

  • VBAで複数のフォルダから最新のファイルを検索してコピーするには?

    はじめましてこんにちは!エクセルを少しいじり始めた者です。 エクセルのVBAで複数のフォルダから最新更新日のファイルを検索して特定シートのセルD1からF20までをコピーして貼り付けるにはどのようにコードを書いたらいいのでしょうか?具体的に申し上げますと、ある特定のフォルダの中に複数のフォルダが入っており、複数のフォルダにはそれぞれ同じ名前の後に日付が入っていて、さらにその中には同じファイル名の後に日付が付いているファイルがあります。(「日本」フォルダの中に「日本200401」、「日本200402」、「日本200403」フォルダが入っていてさらにそれぞれのフォルダ内には「全国200401」」、「全国200402」、「全国200403」みたいな感じでフォルダ名と同じ日付が付いたファイルが入っています。) その複数のフォルダの中から最新更新日時のファイルだけを開いて特定のシートからデータをコピーして貼り付けるにはどのようにコードを記述したら良いのでしょうか?

  • 複数シートから特定シートを読み込む

    VBA初心者です。 ある特定のフォルダに入っている複数のファイルから、指定したシート名のシートだけコピーする方法はあるのでしょうか? ちなみに、フォルダに入っているファイルは全て指定したシートを読み込みたいと思ってます。

  • Excel VBAで複数シートをコピーする

    Excel VBAで複数のシートを新たらしいブックにコピーする方法が分かりません。 一応、Selectで全てのシートを選択し コピーする方法は分かるのですが 出来ればSelectなどの画面遷移をプログラム内に含ませたくありません シートは n件存在します。 ご存知の方がおられましたら ぜひ、教えて頂けないでしょうか?

  • 複数ファイルから特定シートのコピー

    同じフォルダ内に、エクセルファイルがいくつかあります。 そのフォルダ内のファイルから、特定のシート名(例:シートA)のシートをコピーしシートAだけの新しいファイルとして作成しようと思います。 シートAを含むファイルは複数あります。 何か方法がありましたらご教授お願いいたします。

  • VBAを使って複数ファイルの中のシートを一ファイルにまとめたいです。

    VBAを使って複数ファイルの中のシートを一ファイルにまとめたいです。 どうやったらいいか教えてください。 最近、VBAにハマってます。簡単なプログラムを組んで遊んでて いつのまにかいくつもファイルが出来ていました。 手でシート単位で移動していくことができますが、先を考えて VBAを使ってまとめたいです。 いくつかプロセスをわけたらいいと思いますが よくわかりません。 どうやったらいいか教えてください。

  • フォルダ内全ファイルをシート毎に貼付方法について

    VBA仙人様ご教授お願い致します。 1フォルダに数十のログファイル(.txt)が格納されています。 1ファイルは3~5万行記述あります。 これを1つのExcelファイルにしたいと思っています。 VBA流れとして (1)ログ格納フォルダを選択 (2)ログファイル名を取得 (3)既存Excelファイルに(2)で取得したファイル名(.txt除いた)で順次シートを追加 (4)ログファイル=シートとなるようにファイル読み込み/貼り付け (5)ログファイルを閉じる VBAイメージ 格納フォルダ:C:\test \test内    :A001.txt,A002.txt,B003.txt・・・・・・・・Z051.txt(このフォルダにはログのみ格納) C:デスクトップ\集計マクロ.excel (VBAの記述のあるExcelシートにはSheet1のみが存在) VBA前 集計マクロ.excel/Sheet1 VBA実行後 集計マクロ.excel/Sheet1,A001,A002,B003,D004・・・・・・・・・Z051が追加、シート毎にログ情報記載 単一ファイルの読み込み/ファイル名をシート名に付与/情報コピペ/ファイル閉じについては、 作成できたのですが、複数ファイルの場合のファイル名を順次取得し、シート名として付与するなど objやValiant変数などで試行錯誤しましたが解決できず、こちらに質問されていただきました>< このVBAで作成されたシートからの集計マクロについては完成していますが、 その手前でつまづいています>< ご教授のほどお願い致します><

専門家に質問してみよう