エクセルで複数のシートから同じデータを一発検索!

このQ&Aのポイント
  • エクセルで家計簿を管理している方へのお役立ち情報。複数のシートから同じ品名のデータを一覧表示させる方法をご紹介します。
  • エクセルの家計簿管理にお困りの方へ。複数のシートから特定の品名のデータを一括検索して一覧表示する方法をご紹介します。
  • エクセルの家計簿管理を効率化する方法をご紹介。複数のシートから指定した品名のデータを一発検索して表示するテクニックを解説します。
回答を見る
  • ベストアンサー

エクセル:別シートの複数ある同じデータを一発検索したい!

長文ですみません。 家計簿を我流でエクセル管理しています。日々の支出のみのシートは、列に日を、行には摘要、数量、金額、分類、などを入れるスタイルです。日が前後してもあとで並べ替えできるのでどんどん思いつきで羅列しています。 ちなみにブックの構成は、上記の出納帳のようなシートのほかに、そのシートのデータを月別にわけた複数のシートと、携帯電話支払い金額や、保険、教育費、光熱費のそれぞれのシート、収入をまとめたシート、そしてそれらをリンクさせてきてまとめた合計金額シート、などからなっています。ピボットテーブルも月の締めくくりで使っていますが、これとはまた求めるものが違うので・・・。 質問事項は、上記の月別にわけた複数シートから、データの中で何度も出る品名について過去のデータの金額の傾向を調べたいのです。イメージとしては、別の画面上で検索ボタンに目的の品名を入れると、複数のシートから探してきてすべてを一覧表示させていついつに、どんな値段で購入されているかがわかるようにさせたいのです。簡単な関数なら扱えるようになっていますが、教えてください。わかりにくければまた補足いたしましう。よろしくお願いいたします!

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

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

マクロを作りました。 実行すると以下の動作をします 1) 検索文字列を入力してもらうためのウィンドウが表示されます   この際、完全に一致するものだけを選びたい時はそのまま   一部だけが含まれているものであれば選びたい時は頭に「*」を入力してから入力   (例 「携帯電話」を含む項目を選びたい時は、「*携帯電話」と入力 2) OKを押すと検索が始まります。 3) 何も選択せずに、あるいは「*」のみを入力して検索を始めた場合   「キーワードを入力してください」というメッセージと共に終了します。   この場合は再度マクロを実行しなおして下さい。 4) 検索が終了すると、末尾にシート「検索結果」が作成され、一覧が表示されます。   既に「検索結果」シートがある場合(2回目以降の検索)、以前の検索結果が消去され、新しい条件での検索結果が表示されます。 前提条件 1) 現存する全てのシートは同じ列に同じ項目が入っていること   (品名があるシートではB列、別のシートではC列などとなりますと、どちらか一方は検索対象外となります)   その場合は、下のソースの「項目列」を0としていただくと、不要なデータまで検索される恐れがあるものの   一応検索は可能となります。 2) 下のソースから、「検索列」および「項目数」を設定してもらいます。   デフォルトでは、C列が「摘要」であると仮定し、C列から検索をすることになっています。 下記コードの貼り付け方、実行方法が分からない場合は、 http://okweb.jp/kotaeru.php3?q=1219526 の#2および#4を参照してください。 'ここから-------------------------------------------------------- Sub 複数シート検索() '変数定義 ( 検索したい列と、シートの項目数を設定します ) '以下の2行を必要に応じて変更してください 検索列# = 3 項目数# = 6 '注 検索列について ' 上の例では、C列を検索することになっています。列のアルファベットを半角数字に直したものを入れます。 '  例 E列を検索したい時は、検索列# = 5 とします。 '  検索列# = 0 とすると、全列から検索します。 '注 項目数について ' 上の例では、A列からF列までの6列を検索結果シートにコピーし、G列にシート名を記入します。 ' 1以上の半角数字を入れてください ' 途中の列からコピーを開始することはできません。 '以下 変更しないでください '検索したい文字列を入力するInputBoxを表示する SRCTXT$ = Application.InputBox _ ("キーワードを入力してください" & Chr(13) & "(一部を含む検索の場合は、語頭に「*」を入力)", "検索") Dim WHLSRC As Boolean If SRCTXT = Empty Then MsgBox ("キーワードを入力してください") Exit Sub Else If Left(SRCTXT, 1) = "*" Then If Len(SRCTXT) = 1 Then MsgBox ("キーワードを入力してください") Exit Sub Else WHLSRC = False End If Else WHLSRC = True End If End If Application.ScreenUpdating = False On Error GoTo ERREND SHTNUM# = Worksheets.Count If Worksheets(SHTNUM).Name = "検索結果" Then 'シート最後尾に既に検索結果シートがある場合、その内容をクリアする Worksheets("検索結果").Cells.Delete SHTNUM = SHTNUM - 1 Else 'シート最後尾に検索結果シートがない場合、新規にシートを作成する Worksheets.Add After:=Worksheets(SHTNUM) Worksheets(SHTNUM).Name = "検索結果" End If '検索結果シートに見出しを挿入 For i# = 1 To 項目数 Worksheets("検索結果").Cells(1, i).Value = Worksheets(1).Cells(1, i).Value Next i Worksheets("検索結果").Cells(1, 項目数 + 1).Value = "シート名" '各シート毎に検索を開始し、検索結果を「検索結果」シートに挿入 K_LINE# = 2 Dim KENCOL1, KENCOL2 As Integer If 検索列 = 0 Then KENCOL1 = 1 KENCOL2 = 項目数 Else KENCOL1 = 検索列 KENCOL2 = 検索列 End If For i = 1 To SHTNUM With Worksheets(i).Range(Worksheets(i).Cells(1, KENCOL1), Worksheets(i).Cells(65536, KENCOL2)) If WHLSRC = True Then Set x = .Find(SRCTXT, Lookat:=xlWhole) Else Set x = .Find(SRCTXT, Lookat:=xlPart) End If If Not x Is Nothing Then FSTADD = x.Address For j# = 1 To 項目数 Worksheets("検索結果").Cells(K_LINE, j).Value = Worksheets(i).Cells(x.Row, j).Value Worksheets("検索結果").Cells(K_LINE, 項目数 + 1).Value = Worksheets(i).Name Next j K_LINE = K_LINE + 1 Do Set x = .FindNext(x) If x.Address = FSTADD Then Exit Do For j = 1 To 項目数 Worksheets("検索結果").Cells(K_LINE, j).Value = Worksheets(i).Cells(x.Row, j).Value Worksheets("検索結果").Cells(K_LINE, 項目数 + 1).Value = Worksheets(i).Name Next j K_LINE = K_LINE + 1 Loop While Not x Is Nothing End If End With Next i '検索結果シートを前面に表示 Worksheets("検索結果").Activate Application.ScreenUpdating = True Exit Sub ERREND: Application.ScreenUpdating = True MsgBox ("エラー" & Chr(13) & "設定が間違っていませんか?") End Sub 'ここまで--------------------------------------------------------

参考URL:
http://okweb.jp/kotaeru.php3?q=1219526
asacchi
質問者

補足

ありがとうございます!私などのために大切な時間を費やして下さって感謝します。今みたばかりなので、少し自分でやってみようと思います。結果はまたお礼の方でさせていただきます。かなり時間がかかりそうなので、すぐにはお礼に書き込めないかもしれませんが・・・

その他の回答 (4)

  • macchan1
  • ベストアンサー率38% (52/136)
回答No.5

ご自分の力でマクロで処理する場合は、このような感じのアプローチが簡単で良いと思います。 1)マクロの記録を利用し、項目名だけがついた作業用シートにまず1月分のシートのデータを大き目の範囲(例えばA2からC1000まで)をコピー、ペーストする。 2)同様に2月分のシートのA2からC1000までを作業用シートのA1001にコピー貼り付けし、12月までのデータを同様に1000行ずつ下のセルに貼り付けます。 3)この作業用シートの空白行を含むすべてのデータ範囲を指定し、オートフィルタで希望のデータを抽出し、抽出されたデータを指定の位置にコピー、貼り付けします。 4)最後に作業用シートのフィルタを解除ておく。 これで基本的マクロの準備が完了です。 自動記録で書かれたコードの検索文字の部分を編集して(Criteria1:=の右辺に代入)、この部分を検索したいデータの入っているシートのセル番地やインプットボックスの値などに置き換えればOKです。 作業用のシートは最終的に非表示にしておくと良いと思います。 上記のマクロコードは、実際はもっと合理的なものにすることができますが、コードの編集操作をできる限り簡単にするために例示しました。 追伸:SUMPRODUCT関数や配列数式を多用するとその再計算に時間がかかることがありますが、オートフィルタの操作に時間がかかることは無いと思うのですが・・・。

  • macchan1
  • ベストアンサー率38% (52/136)
回答No.3

#2の補足です。 もし、あるシートのある列にある特定のデータを別シートに一覧として引っぱってきたい場合はこのサイトの別の質問で私が回答したような方法を用います。 複数シートから抽出する場合は、もし該当データが無い場合は、次のシートを検索するというようなIF関数を用いて、表示させることができますが、非常に複雑な式となるだけでなく、シート数が増えた場合は式の長さやネスト(例えばIF関数での条件数)の条件をクリアする必要も出てきます。 このような場合は補助列などを使って式を簡素化する必要がありますが、実際はマクロで対応するほうが簡単だと思います(紹介した質問例の他の方の回答も参考にして下さい)

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1227504
  • macchan1
  • ベストアンサー率38% (52/136)
回答No.2

例えば3つのシートから特定の項目を別シートに抽出するようなことはできますが,シート数が多くなると関数だけでは簡単にはできません(ものすごく複雑な式を利用すれば今回のケースでもできる可能性はあります)。 このような場合はマクロで対応することになりますが、現在、別シートに月ごとのデータを入れているならこれを1つのシートにまとめることが、管理を含めて種々の観点から最も重要なことです。 このようにしておけば、月ごとの項目別収支などがピボットテーブルのグループ化を利用すれば簡単に分類できます。 もちろん月ごとのシートもオートフィルタとマクロ(の記録)で簡単に作成できます。 今回のようなケースで、必要な項目だけのデータを抽出する場合も、比較的簡単な関数だけで対応データを抽出することが可能です(もちろんオートフィルタやフィルタオプションの設定でもできますが)。 ご検討ください。

  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.1

一覧標示させるには、全てのデータが一つのシート上にないと無理なのではないでしょうか? 関数はお使いになれるということなので、少し手間ですが、検索用のシートに=Sheet1!a1などと別シートの値を持ってくるようにして、これをずらーっと行方向に並べます。行方向に日付、列方向に摘要、数量、金額、分類が来るようにしてください。 その後、オートフィルタを使って項目ごとの履歴を見ることができます。 VBAを使ってもよいなら、また別の方法があります。

asacchi
質問者

補足

オートフィルタを使う方法以外にないかと思ったもので・・・というのは、データを月別にシートでたとえば12か月分作っていたとして、その分には、一シートごとにはデータが少ないのでそうでもないのですが、一年間分をひとつのシートに(一年にくぎらなくてもずっと)蓄積していると、オートフィルタは反応がにぶく、じれったいのですね・・・・もしできれば参考までにVBAで作った場合を教えていただけますか?私にできるかどうかわからないのですが、挑戦してみたいです!

関連するQ&A

  • 条件別に複数シートから複数シートへデータの振り分け

    質問失礼します。 現在、管理表を作成しているのですが、 月別のシートがあるとして、 9月度シート 10月度シート等月ごとにシートが増えます。 その全ての月別度シートの中の一つのデータの条件から、 更に複数シートへデータを振り分けたいと考えております。 月別の複数シートから条件に一致したデータを複数シートに割り振る事は できるのでしょうか? わかりにくい説明だとは思いますが、何卒ご教授ください。 よろしくお願い致します。

  • エクセル、複数行のデータを別シートに集計するには?

    複数行のデータを別シートに、伝票番号別、品名別に反映させるにはどのような関数にすればいいですか? 例えば、 [シート1] 伝票番号   品名   数量 aaa      りんご   50 aaa      バナナ   30 aaa      もも     15 bbb      バナナ   20 bbb      りんご   33 ccc      りんご   10 ccc      バナナ    40 [シート2]    A      B    C    D    1         aaa  bbb  ccc 2 りんご    50   33   10 3 バナナ    30   20   40 4 もも      15 [シート1]の様なデータがあり、それを[シート2]のセルB1に伝票番号を入力したらセルB2、B3...と数量が反映するようにしたいです。 わかりづらくてすいません。 どなたかわかる方がいらしたらお願いします。    

  • EXCEL シート毎の集計

    一覧表のシート(年月日、摘要、科目、金額、収入、支出、残高)から 科目(会議費・衛生費・備品etc)毎にシートに分けて、科目毎に集計するシートを作りたいのですが、どうやったら作れるのでしょうか? シートに移行したいデータは、一覧表にある科目毎のデータ(年月日、摘要、摘要の金額)です。 何か良い方法があればアドアイスお願いします。 よろしくお願い致します。

  • エクセル:同じものを複数抽出して別のシートに自動表示させる方法

    シート1 日付 番号 物件名 科目   摘要  収入 支出   10/1  1  A  雑費    電球代     100 10/2  3  B  郵送費      ~     200 10/3  2  C  振込手数料   ~     500 10/4  1  A  雑費      ~      100  ・   ・  ・ シート2         ↓  番号(物件番号):1  物件名:A 日付    科目    摘要    金額(支出のみ) 10/1    雑費    電球代   100 10/6    雑費           100 合計                  200     番号(物件番号):2  物件名:B 日付    科目    摘要    金額(支出のみ) 10/1    郵送代         100  ・  ・  ・ このようなデータを毎月作成し、別のシート1枚に物件番号・物件名(現在40で今後も増加予定)ごとにそれぞれ表を自動表示するように作成したいのですが、うまくできません。どなたかご存知の方教えてください。どうぞ宜しくお願いいたします。

  • 入力したデータをその都度別のシートに蓄積したい。

    お世話になります。 分不相応なのですが、教えてください。 売上や支払に関する明細を作るためにエクセルを使っています。 『シート1』 罫線を引いて実際の明細仕立てにして、  社名   品名1・数量1・金額1・・・   品名2・数量2・金額2・・・          合計金額 計算式も入れて、品番と数量が入ると 金額を算出するようにしています。 『シート2』 1行目には、社名・品名などの項目名を入れました。 1つの取引先に付き、1行分で シート1で入力したデータを転記したいと思います。 理想としては、シート1で1明細の入力が完了 →コマンドボタン(登録)を押す →シート2の2行目にデータが転記 これを繰り返してシート2の3行目、4行目と データを蓄積していく・・・感じです。 マクロの記録で、入力した内容を消去するボタンを作ったり 1行目だけ内容を転記させてみたり(そこで終了・・) 色々なキーワードで、それらしきサイトを検索してみたり、 初心者でも分かるマクロ&VBAみたいな本で調べてみたり・・ ちょっと行き詰ってきたので質問させて頂きました。 ユーザーフォームを作ってシートに転記する方法は見つけましたが シート1には計算式を結構盛り込んでしまったので、 フォームには手が届きそうにありません。 説明不足かもしれませんが、何か良いアイデアはないでしょうか。 マクロで解決できるのか、やっぱりVBAでやるしかないのか、 また何か良いサイトをご存知でしたらご紹介ください。 よろしくお願い致します。

  • シート1とシート2のデータ一致 抽出方法

    エクセルのデータ抽出でお知恵をお貸し下さい。 シート1 A列  B列     C列 品名  製品番号  数量 AA    1AAAA    200 BB    1BBBB    250 CC    1CCCC    300 シート2 A列   B列     C列 品名  製品番号   数量 AA    1AAAA   200 BB    1BBBB   250 AB    AAAA    500 CC    1CCCC   300 上記のようなシートがあります。 内容は同じなのですが、シート2にはシート1にはない品名、製品番号、数量が含まれます。 シート1の品名、製品番号、数量がすべて一致するものをシート3へ抽出し、 一致しなかったデータ(シート1にはなく、シート2にあるものを含め)をシート4へ抽出したいのですが 何か良い方法はないでしょうか??

  • 複数シートのデータを別シートに結合させたい

    複数シートのデータを別シートに結合させたい Excelの2つのシートに以下のようなデータがあります。 シート1       シート2 名前  金額1     名前   金額2 aaaa  100      aaaa  100 bbbb  100      cccc  200 これをシート3に新たに以下のように作りたいんです。 名前  金額1  金額2 aaaa  100   100 bbbb  100 cccc       200 シート1と2の名前は重複しているものもあり、 名前を基準にして重複しているものは、両方データを 重複してないものは、それぞれのデータのみをひろいたんですが、 件数が多いため、どのようにするのが一番効率よくできるのか わからないんです。 Accessへシートをインポートとして、クエリでなんとか できないものかと考えたのですが、いまいちうまくできません・・・。 元がExcelのデータなので、Excelの関数などを使って出来る方法が あればいいんですが、ExcelかAccessで効率よく出来る方法を 教えていただけないでしょうか? よろしくお願いします!

  • エクセルのピボットテーブルで

    ピボットテーブルの表示方法についてです。 表の品名と数量からピボットテーブルを作成します。 行に品名、データ部に数量を表示させるのですが、数量が0(ゼロ)の場合には、その行自体を表示させない様にしたいのです。 元の表の方は変更等出来ないので、ピボットテーブルの方で何とか出来ないかと思います。 【元の表】 品番  数量 A001  5,000 A002    0 B001  4,500 B002    0 上記の2列からピボットテーブルを作成すます。 【ピボットテーブル】 品番  数量 A001  5,000 B001  4,500 総計  9,500 上記の様に、元の表で数量が0なら、その品番と数量の行が表示されない様にです。

  • エクセル2000でシートの一番下に反映させたい

    <一覧シート> 会社名:品名:日付:数量:金額 A社  ○:11/1:10個:1000 A社  ○:11/3:10個:1000 A社  ×:11/2:10個:2000 B社  △:11/1:5個:500 B社  ▲:11/2:5個:500 上記の様なデータが入力してあり、入力するだけの シート(入力シート)が別にあります。 入力シートのデータ(例えば、A社○11/4 5ヶ出荷)が そのまま、一覧シートの入力されているデータの一番下に くるようにしたいのですが、 随時、出荷があり行が追加されていく為 =でセルを指定する事ができなくて困っています。 また入力が複数ある場合も、そのまま一覧シートの一番したに 反映させたいのです。。 解かりにくい説明で申し訳ありませんが、よろしくお願いします。

  • EXCELで複数のシートを同時にピボットできないか

    複数のシートに分かれているデータを一度に選択してピボットを掛けたいのですが、可能でしょうか。 列数、列のヘッダーはそろえてあります。

専門家に質問してみよう