
こんばんは
既出の質問かもしれませんが探し出せず、
また、VBA勉強中の初心者ですが質問させていただきます。
今データベースの検索マクロを組んでいます。
検索ブックとデータベースブックに分けており
検索対象としてその別ブックのデータベースの複数シート(図1)から参照し
検索ブックの「検索結果シート」に抽出したいです
(検索条件は検索シートの項目入力です(図2))
データベースブックのシート数は更新によって都度変わります。
For~next でできるとは思うのですが
うまく組めません。
フィルタオプションとマクロの記録を使い
特定シートの参照はできるのですが…
Sheets("検索結果").Select
Workbooks("全データベース.xlsm").Sheets("2013").Range("A3:X10000").AdvancedFilter _
Action:=xlFilterCopy, CriteriaRange:=Range("検索!Criteria"), CopyToRange:= _
Range("A3:V3"), Unique:=False
記録そのままのマクロですが
上記にFor~nextを組み込めばいいのか、他の式が良いのか…
あと、データブックシートは常に開いているわけでないので
openメソッドも必要かと思うのですが…
知識不足で恐縮ですが
どなたかご教授願えますか?

No.2ベストアンサー
- 回答日時:
こんにちは
基本的にはNo1様のご回答に同感ですが、何らかの経緯やご質問の様にしなければならない事情などがあるのかも。
>For~next でできるとは思うのですが
>うまく組めません。
の部分と
>あと、データブックシートは常に開いているわけでないので
>openメソッドも必要かと思うのですが…
の部分に関するところをごく簡単なサンプルにしてみました。
>特定シートの参照はできるのですが…
とのことなので、各シート毎の実際の処理は質問者様におまかせです。
1)特定のブック(データベースブック)が開いているかチェックし
開いていなければ、新たに開く
2)ブック内の全てのシートに対してループで処理を行う
シート数は可変(非固定)です
(それぞれのシートでの処理内容は質問者様にお任せ)
というものです。
とりあえずは、動作チェックも兼ねて各シート名を列挙するようにしてあります。
Sub Sample()
Dim wb As Workbook, flg As Boolean
Dim sh As Worksheet, shOrg As Worksheet
Const dataWB = "DataBook.xlsm" '←データベースブックの名称
Const dataPath = "C:\hoge\data\" '←データベースブックへのパス
'現在のシートを記憶しておく
Set shOrg = ActiveSheet
'データベースブックが開いているかをチェック
flg = True
For Each wb In Workbooks
If wb.Name = dataWB Then
flg = False
Exit For
End If
Next wb
'ブックが開いていなければ新たに開く
If flg Then Workbooks.Open Filename:=dataPath & dataWB
Set wb = Workbooks(dataWB)
'データベースブック内の全シートを対象にループする
For Each sh In wb.Worksheets
'shに各シートオブジェクトが取得された状態でループするので
'このループ内で必要な処理を行ってください
'
'とりあえずは動作確認もかねて、各シート名をA列に追記
'
shOrg.Cells(shOrg.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = sh.Name
Next sh
'終了処理。ブックを新たに開いた場合は閉じる
If flg Then wb.Close SaveChanges:=False
Set wb = Nothing
End Sub
>>fujilin様
ありがとうございます!><私も頼まれている側なので困ってしまって…
コードも細かく書いていただきありがとうございます。
openも私のコードは大雑把なので助かります。
再度考えつつ、参考にさせていただきます!
No.3
- 回答日時:
re.re.さんの都合でデータベースブックを考えたのだと思っていました。
事情を知らず申し訳ありません。そこで、データベースブック内のすべてのシートをひとつのテンポラリシートにまとめるマクロを書いてみました。
テンポラリシートを元に、re.re.さんの書いたAdvancedFilter メソッドを実行すれば実現可能と思います。
Sub sample()
Dim wbDB As Workbook
Dim wsDB As Worksheet
Dim ws As Worksheet 'テンポラリシート
Set wbDB = Workbooks.Open("C:\hoge\data\DataBook.xlsm", , True)
For Each wsDB In wbDB.Worksheets
If ws Is Nothing Then
'最初のシートの場合は、そのままコピーして新規ブックを作成。
wsDB.Copy
Set ws = ActiveSheet
Else
'2番目以降のシートの場合は、2行以降をコピーして追加。※見出し行数に応じて要調整!!
wsDB.Rows("2:" & wsDB.Cells(Rows.Count, 1).End(xlUp).Row).Copy
ws.Rows(ws.Cells(Rows.Count, 1).End(xlUp).Row).PasteSpecial
End If
Next
Application.DisplayAlerts = False
wbDB.Close
Application.DisplayAlerts = True
'ここから先は、re.re.さんが書いたコードです。
Sheets("検索結果").Select
ws.Range("A3:X10000").AdvancedFilter _
Action:=xlFilterCopy, CriteriaRange:=Range("検索!Criteria"), CopyToRange:= _
Range("A3:V3"), Unique:=False
End Sub
>>ママチャリ様
こちらの説明不足なのでとんでもございません!こちらこそ気を遣わせてしまいまして申し訳ないです><
そしてデータまで書いてくださりありがとうございます!本当に助かります!
参考に(大部分をですが笑)させていただきます!
No.1
- 回答日時:
「検索ブックとデータベースブックに分けており」…ここまでは良いでしょう。
「データベースの複数シート」って、NGですよ。
せっかく、データベースブックを作ったのなら、同じデータはひとつのシートに統合してください。そうすれば、こんな質問をしなくて済みます。
もし、1シートで入りきらない程のデータを処理するのであれば、Access等のDBを検討して下さい。
ちなみに、AdvancedFilterメソッドでは、1シート目の抽出はできても、2シート目の抽出結果を追加することができないと思います。結局は、全シートをひとつのテンポラリシートに纏める。もしくは、1シートづつマクロで、ちまちま抽出することになると思います。
>>ママチャリ様
お礼が遅れてすみません。
やはり無駄処理ですか…。シートに統合したら確かに解決ではあるんですが。。。
もう少し考えます、ご指摘ありがとうございました(´人`)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) シートを配列にいれることはできますか? 3 2023/06/04 19:06
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について
Visual Basic(VBA)
-
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
Excelの警告について
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
Excelファイルをダブルクリック...
-
Excelでブックの共有を掛けると...
-
Excel(2010)のフィルターが保...
-
ブックの保護ができないんです...
-
エクセルにおける,「ブック」...
-
Excelで複数ブックの同一セルに...
-
エクセルファイルを開かずにpdf...
-
VBA:ワークブックを変数でActi...
-
エクセル 複数のブックを一度...
-
同じフォルダへのハイパーリン...
-
フォルダ内の複数ファイルから...
-
ブックのピボットを別ブックに...
-
エクセルでウィンドウの枠固定...
-
【マクロ】【VBA】同じフォルダ...
-
エクセルVBAでブックを相対パス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
Excelファイルをダブルクリック...
-
WorkBooksをオープンさせずにシ...
-
エクセルファイルを開かずにpdf...
-
Excelでブックの共有を掛けると...
-
Excelで複数ブックの同一セルに...
-
同じフォルダへのハイパーリン...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
フォルダ内の複数ファイルから...
-
印刷しようとすると強制終了に...
-
ブックのピボットを別ブックに...
-
フォルダ内の複数ファイルから...
-
エクセルで「ディスクがいっぱ...
-
エクセルでウィンドウの枠固定...
-
エクセルファイルをオープンし...
-
エクセルにおける,「ブック」...
おすすめ情報