エクセルデータベースの検索方法とは?

このQ&Aのポイント
  • エクセル初心者のためのデータベースの検索方法について解説します。
  • Excelを使用してデータベースの検索を行う方法について説明します。
  • Excelの関数やVBAを使ってデータベースから特定の情報を抽出する方法について解説します。
回答を見る
  • ベストアンサー

エクセル データベースと検索

エクセル初心者です。 今データベースの検索の勉強のため 以下のような2枚のシートを作成しています。 上段がデータベースの元データで在庫の商品と 支店名です。 商品の種類は全部で1000個位の種類があります。 下段が商品を備蓄している支店名と支店コードです。 そこで今回したい処理なのですが、 下段の支店コードの横の列に以下のように 検索フォームをつくり、支店名(さらに言えば支店コードだけ) を入力すれば、その支店で持っている商品名を すべて表示したいのです。 現在、目視でしているためたいへん時間がかかります。 関数やVBAで抽出することはできるのでしょうか。 よろしくお願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2です! 補足を読ませていただきました。 ん~~~~ データとしてはかなりおおまか過ぎますね! 変更はできないかもしれませんが・・・今後の課題として たとえばですが、 同じ地域に複数の支店がある場合はコードの桁数を増やすなりして対処する方法をお勧めします。 仮に、701を大阪市此花区 702を大阪市此花区 703を大阪市城東区・・・ といった形にしてコードは重複なしにするのが普通だと思います。 ただ、これでは補足の回答にならないので無理やりの方法になりますが 前回の表はそのまま利用させていただき、Sheet2のF1セルに =IF(COUNTIF($A$1:$A$1000,$E$1)<ROW(A1),"",INDEX($B$1:$B$1000,SMALL(IF($A$1:$A$1000=$E$1,ROW($A$1:$A$1000)),ROW(A1)))) これは配列数式になりますので、この画面からF1セルにコピー&ペーストした後に 数式バー内で一度クリック → 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入ります。これをオートフィルで下へコピーしてみてください。 これで同じコードが複数あっても表示されると思います。 尚、G・H列は前回そのままで手を加えていませんので、 各支店ごとに表示しようとすれば根本的に表の配置を考え直した方が良いと思います。 この程度ですが、ごめんなさいね。m(__)m

その他の回答 (3)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>今データベースの検索の勉強のため >以下のような2枚のシートを作成しています。 勉強のためといえば、今回もデータベースのシートの構成は考えた直したほうが良いです。 ひとつの商品に対して在庫を持っている支店が3つ入力されていますが それ以上多数の支店が在庫を持っている場合はどうするのでしょうか? 各支店の在庫をどうやってデータベースのシートに入力したら作業が簡単なのか という観点からも検討が必要です。 例えば、入庫・出庫の記録からデータベース化します。 データベースシート 日付 支店コード 支店名 商品番号 商品名 入出庫数 12/1 1     世田谷  1   りんご  -100 ・・・・ とひたすら縦方向へデータを入れることをお勧めします。 もちろん フォームを作成して 支店コードと商品番号と数を入れると 支店名と商品名が入る 機能を考えます。 ピボットテーブルなど活用すれば 別のシートに商品別でも支店別でも在庫の一覧表を作成することは簡単です。 将来、アクセスとかデータベースソフトを活用するようになった場合も理解が早いと思います。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 ↓の画像のように元データSheet(Sheet1にしています)に作業用の列を設けています。 Sheet2のセル配置は適宜変更してみてください。 Sheet1の作業列J2セルに =IF(OR(Sheet2!$E$1="",COUNTIF(D2:I2,Sheet2!$E$1)=0),"",ROW()) という数式を入れオートフィルで下へずぃ~~~!っとコピーしておきます。 Sheet2のF1セルには =IF(E1="","",VLOOKUP(E1,A:B,2,0)) という数式を入れています。 そしてSheet2のG2セルに =IF(COUNT(Sheet1!$J:$J)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$J:$J,ROW(A1)))) という数式を入れ、隣のH2セルまでオートフィルでコピー! そのまま下へコピーすると画像のような感じになります。 以上、参考になれば良いのですが・・・m(__)m

aidorumary
質問者

補足

ありがとうございました。大変よくわかりました。 あと、1件補足なのですが データベースの先を見てみると 支店コードが 7 大阪市此花区 7 大阪市城東区 7 大阪市港区 のように違う地域なのに、同じ支店番号が振っているものが出てきます。 (おおまかなデータベースなので…) このような場合、VLOOP関数だと、最初の大阪市しか 検索できません。(もともとそのような関数ですが…) 支店番号が同じものは、すべて抽出する というふうにしたいのですが。 シート1も2も右の列は、いくつ使ってもかまいませんので できる方法はあるのでしょうか。 すいませんが、よろしくお願いします。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

シート名とか実際にデータのある/入れるセル範囲とかはテキトーですから,実際のシートに合わせて正しく直してから試してください。 マクロの中で検索すべき支店名の取り込み部分は,ご自分で修正してみてください。 シート上で支店名から支店コードを表示する関数(若しくはその逆)は,今回ご質問の核心とは無関係な簡単な検索の関数式なので,ちょっとご自分で勉強してみてください。 sub sample1()  dim c as range  dim firstAddress as string  dim n as long  '書き出し先のクリア,初期化  worksheets("Results").range("G5:H999").clearcontents  n = 5  '検索の開始  with worksheets("DATA").range("D:I")   set c = .find(what:="大阪市", lookin:=xlvalues, lookat:=xlwhole)   if not c is nothing then    firstaddress = c.address    do     ’転記     worksheets("Results").cells(n, "G").resize(1, 2).value = worksheets("DATA").cells(c.row, "A").resize(1, 2).value     ’次を検索     n = n + 1     set c = .findnext(after:=c)    loop while c.address <> firstaddress   end if  end with end sub 関数でやりたい初心者さんのご相談は沢山寄せられますが,検索結果をリストで出してくれる関数はありませんので,ここでそういうことが出来る式を教わっても(過去ログを紐解くと沢山ヒットしますが)全く勉強になりません。 マクロでセルの検索(FindとFindNext)命令を調べ,VBEのヘルプに記載のサンプルマクロを参考に,指定の支店名を順繰り検索して該当する製品を次々転記するマクロを作成してみると良いでしょう。 また他の方からも寄せられるかもしれませんが,「勉強のため」であれば,そもそも「データベース」の作り方から"間違っています"ので最初からやり直した方が良いでしょう。

関連するQ&A

  • エクセル データベースからの検索について

    エクセル データベースからの検索について 商品名・商品番号・在庫といったデータベースがあります。 検索する別の場所を設けそこで商品番号をたたくと商品名と在庫が表示できるようにVLOOKUPでしました。 商品番号がわからない場合があるので商品名から検索できるようにしたいのですが 商品番号からの検索と同じ関数では「#N/A」となってしまいました。 文字での検索の場合はどのような関数になるのでしょうか?         B2商品番号入力   C2検索結果表示(商品名) D2検索結果表示(在庫数)         B3商品名入力    C3検索結果表示(商品番号)D3検索結果表示(在庫数)  A10商品番号  B10商品名     C10在庫数   :       :         : としてC2には =VLOOKUP(B2,A10:C100,2,FALSE) とし正しい結果が表示されます。 商品名から検索したいC3にも同様のものをいれましたが表示されません。 よろしくお願いします。     

  • エクセルでデータベースの検索と抽出(?)

    エクセル2007を使用しています。 まずエクセルで作られたデータベースがあります。データベースには、管理番号、顧客名、商品の管理番号、商品名、価格が入っています。 このデータベースとは別に、検索(抽出)用のエクセルを用意しています。 そこで、管理番号を入れたら、顧客名、商品名、価格のみが1行(横)に表示されるようにしたいです。 クエリを利用してやると一つずつ顧客名、商品名、価格を選んで…という風に時間がかかります。 例えば、管理番号の列(縦)に番号を入れて、ボタンを押すとか、実行(F9)すれば、管理番号を入れたすべての行に、データベースから検索した顧客名、商品名、価格が入力されるようにしたいのです。(管理番号の重複はありません) クエリで一個ずつ選んでいくのをマクロ登録するしかないのでしょうか?

  • エクセル、VBA、抽出複数検索について

    エクセル、VBA、VLOOKUP、MATCH関数等について出来る方法があれば教えてください。 インチごとに分けてあるシートがあり、(在庫表です) これを参照して、別ブックへVLOOKUP等を使って、サンプルデータのシート4のように表示させたいのですが、 何か方法を使って出来ることは可能でしょうか? 問題点が複数あります 1、VLOOKUPの範囲について、B列が結合されていて、C列は複数行あるため、商品名が入ってきません。 C列については、何千件とデータがあるため、結合することは不可能です。 一致している条件としては商品コードが必ずあり、商品名には「/」が入っております。 =CONCATENATEとVLOOKUPは一緒に使うことは可能ですか? もしくはINDEX関数やIF、SUMPRODUCT等を使うのでしょうか? シート4のような形に出来る方法があれば、教えてほしいです。 VBAは詳しくはないのですが、VBAで出来るのであれば、教えてほしいです。 在庫表はとても作り方が悪いのですが、これを作り直すと言うことは、不可能です。 グループ会社で使っているため、なんとかこの在庫表を使いたいです。 VBAでA列をA5からA100にコードのみ入れた場合、B列に商品名が入るようにVBAで作ることは可能でしょうか? もしくは、検索条件を2つ使って、一つは商品コード完全一致+あいまい検索で【/】で商品名を入れることは可能でしょうか? 関数は調べたのですが、関数では難しいのかなと思います。 宜しくお願い致します。

  • Excelのデータベース活用で・・・

    早速ですが、データベースの中から別シートに抽出をしたいのですが、これは可能ですか? できるならどうすればいいのか教えてください。 具体的に言うと、次のようなことがしたいんです。 [Sheet1]に以下のようなデータベースがあるとします。 A列:部署コード(4桁) B列:部署名 C列:社員コード(6桁) D列:社員名 この[Sheet1]のデータをもとに、[Sheet2]以下のシートには指定した部署のみの一覧を抽出したいんです。 例えば、A1セルにある部署コードを入力しておけば、指定したセルに該当する社員だけを表示したいということです。 よろしくお願いします。

  • エクセル複数シートの検索とVBA

    エクセルVBA初心者です。 今エクセル2007で、下画像の上段・中段のような売上げシートを ブックの中に複数シート作成しています。 シートは売上げのあった日毎に作成しており、シート名は「1.1」のように日付にしています。 売上日はシートの左上のA1セルに入力しています。 ここでしたい処理なのですが、画像の下段のように検索用の シートを1枚作り、そこに売上内容を入力し、マクロコードを実行すれま、自動的に 該当するデータ(売上内容から支払い方法まで)を表示するコードはあるのでしょうか。 今は手作業で、シートを目視で確認しているので大変になってきました。 よろしくお願いします。

  • Accessのデータベースのコンボボックスの記載

    AccessのVBAのコンボボックスのデータベースのレコードの非表示の仕方と表示する値と取得する値を変える方法が知りたいです。 例えばSQL分でテーブルの中の商品コードカラムと商品名カラムを抽出し、値をコンボボックスに入れるとします。この時商品コードの方は値だけ持たせて非表示にし、商品名だけが表示されるようにしたいです。 そして表面上で商品名が選ばれた時、非表示の商品コードの値の方が選択されるようにしたいのですがどうコーディングしたらいいのかわからないです。 ネットでも調べてみましたがフォームで設定する方法しか見つけられませんでした。VBAで記載するようにとの指定があるのでVBAで記載するようにしたいです。 VBAではどのように書いたらいいのでしょうか

  • Access97 テキストボックスを利用したあいまい検索フォーム

    Acces97にて下記のようなデータベースを使用しております。  テーブル:銀行コード一覧(銀行コード、銀行名、支店コード、支店名、支店住所)  クエリー:Q-銀行名検索、Q-支店名検索  フォーム:F-銀行名検索、F-支店名検索 今は検索したいフィールド毎にクエリーとフォームが作ってあり、同じようなクエリーとフォームが複数ある状態です。  <クエリー>   (1)Q-銀行名検索→フィールド「銀行名」に【Like "*" & [調べたい銀行名の一部入力] & "*"】設定   (2)Q-支店名検索→フィールド「支店名」に【Like "*" & [調べたい支店名の一部入力] & "*"】設定   ・・・以下同様のクエリー複数あり  <フォーム>   (1)F-銀行名検索にQ-銀行名検索を設定   (2)F-支店名検索にQ-支店名検索を設定   ・・・以下同様のフォーム複数あり 今回作りたいのは、1つのフォーム内に検索したいフィールド分の検索ボタンを作り、検索したい項目をテキストボックス内に入力後該当ボタンをクリックすることによって入力した項目を含むデータが抽出されるというフォームです。 例えば、"東京"と入力し「支店名」ボタンをクリックすると『東京営業部』『東京中央』等"東京"を含むデータが抽出される といった具合です。 部署内にAccess作成事例集なるものがあり、それを元に下記のように作成してみました。 フォーム名を「F-銀行コード一覧」・テキストボックス名を「検索」として、「支店名」ボタンのマクロに [Forms]![F-銀行コード一覧]![検索]=[銀行コード一覧]![支店名] というアクション(フィルタの実行→Where条件式)を設定。しかし、これでは『東京』のみしか抽出されませんでした。 Like関数を利用するのかと思い Like "*"&[Forms]![F-銀行コード一覧]![検索]&"*"=[銀行コード一覧]![支店名] としてみましたが設定できませんでした。 どのようなアクションを設定したらフォームでのあいまい検索ができるのでしょうか?

  • エクセルVBA:文字列での検索

    エクセルVBAで、在庫管理をしようとしています。初心者です。 4個のListboxをそれぞれ選んでいくと、任意の商品名になるようにしています。 そこで、選んでもらった後、 Listbox1.List(Listbox1.ListIndex) & Listbox2.List(・・・・ というように4個のListboxから選ばれた文字列をつなぎ、別シートの在庫データベースの「商品名」と「Listboxをつなぎ合わせた文字列」と同じのを探させて、在庫を引き落とすようにしています。 ですが、できる場合とできない場合があります。 何ででしょう? 文字列で突き合わせると、見た目が同じ場合でも違うと認識されることがあるのでしょうか?(半角全角が違うとか、最後にスペースが入っているとかはないです。試しにセルに貼り付けてvlookupで検索してみると、できました。)

  • エクセルのデーターベースについて

    教えて下さい。 飲食業の在庫管理をエクセルで作りたいのですが、仕入台帳と売上台帳を別で作成したいと思っています。困っているのが売上台帳です。一つの商品を売上げた時、その商品名と数量を入力するだけで、その商品にかかる原材料すべてと、その卸売業者名、原価をデーターベースに落とし込みたいのですが、尚、その原材料は、多種の商品で使用しています。 複雑になってもかまわないので、教えて下さい。

  • エクセルでフォームから

    はじめまして 初めての質問になります。 ネットでいろいろさ探したり VBAの本を買って読みましたがよくわからずこちらにたどり着きました。 どなたか教えていただけないでしょうか? よろしくお願いいたします 全国の支店ベースのファイルがありますが全国ベースデータを管理したCSVファイルがあります。 以下の内容のデータベースがあり1週間に1度データの抽出を行います。 データ件数は2万件ほど 売上日、支店名、商品名、金額、単価、個数売り上げ金額、、担当者 男女 その他20項目 毎回毎回データを抽出し、並べ替えるのが大変なのでマクロで処理したいと思っています。 フォームを利用して、項目をチェックボックスで選択して抽出して、それぞれの支店毎のcsvファイルを作りたい!と思っています。 その中のフォームを利用して、項目をチェックボックスで選択して抽出するやり方がわからずに苦労しています。

専門家に質問してみよう