• ベストアンサー

(excel)複数列検索で中間一致

SUMPRODUCTとINDEXの組み合わせの質問はあるのですが、 自分の行いたいこととはどうも違うため、質問致します。 なお初心者のため、過去記事を正確に理解できていないかと存じます。 重複する投稿が過去にある場合はご指摘いただけると幸いです。 ---- (行いたいこと) [結果出力]シートに、4列値が入っています。 [結果出力]シートの[乗数]列(★のところ)に、 [Master]シートから参照した値を入力したいと考えています。 ==== [Master]シート A列|B列|C列|D列|E列 部署名|人名|部署コード|職級コード|乗数 -------------------------------------- 営業|山田|2200|2|15.85 経理|三輪|2800|4|21.85 技術|鈴木|2600|1|18 == [結果出力]シート A列|B列|C列|D列|E列 部署名|人名|部署コード|職級コード|乗数 -------------------------------------- ソリューション営業|山田太郎|2200|2|★ 技術2課|鈴木華子|2600|1|★ グループ経理1課|吉田美輪|2800|4|★ ==== 上記のように、部署名、人名は文字列で、部署コード、職級コードは数字です。 部署名及び人名を中間一致で[Master]シートから検索したく、countifも試したのですが、 うまくいきません。 完全一致であれば、★のセルに次の式を入力すると出せることは分かったのですが・・ =INDEX (Master!E$2:E$1000,SUMPRODUCT ( (Master!$A$2:A$1000=$A2) *(Master!$B$2:B$1000=$B2) *(Master!$C$2:C$1000=$C2) *(Master!$D$2:D$1000=$D2) *ROW(Master!$A$2:$D$1000) ) -1 ) 識者の皆様のお知恵を拝借できないでしょうか。 宜しくお願い申し上げます。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

とりあえず叩き台として =SUMPRODUCT( ISNUMBER(FIND(Master!$A$2:$A$1000,$A2)*FIND(Master!$B$2:$B$1000,$B2)) *(Master!$C$2:$C$1000=$C2) *(Master!$D$2:$D$1000=$D2) *Master!$E$2:$E$1000) とか =LOOKUP(10^10, FIND(Master!$A$2:$A$1000,$A2) *FIND(Master!$B$2:$B$1000,$B2) *(Master!$C$2:$C$1000=$C2) *(Master!$D$2:$D$1000=$D2) *Master!$E$2:$E$1000) ...のような感じになるかと。10^10 は適当です。乗数の最大値以上であれば良いです。 あまりおすすめしたくはないのがホンネです。 使い捨て的な、とりあえず引っ張れればいい、みたいなものであれば良いかもしれませんが。 そのMasterシートではいずれ破綻しそうな気がしますので、見直しをしたほうが良いと思います。 普通に考えれば、個人別コードによるマスタ管理するのではないでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

失礼m(_ _)m 『Master!$A$2:A$1000』という記述からして、Masterが追加された場合も考慮し、参照範囲を多めに取ってありますか? 空白セルが参照範囲にある場合は私が提示した式ではうまくいきません。 =LOOKUP(1,1/(FIND(Master!$A$2:$A$1000,$A2)*FIND(Master!$B$2:$B$1000,$B2)*(Master!$C$2:$C$1000=$C2)*(Master!$D$2:$D$1000=$D2)),Master!$E$2:$E$1000) こんな感じの数式になります。 でも 『1/0 でエラーを作ってLOOKUPで無視させる』というのは他のQ&Aで読み、知識として知ってはいても多分私の発想にはないので別案。 【Masterシートのデータ範囲のみを[名前定義]で設定する方法】 Masterシートの1行目が見出しだとして、[Ctrl]+[F3]キーで[名前定義]。 「名前」を    data 「参照範囲」に  =OFFSET(Master!$A$1,0,0,COUNTA(Master!$A:$A),5) あとは =LOOKUP(0,-FIND(INDEX(data,0,1),$A2)*FIND(INDEX(data,0,2),$B2)*(INDEX(data,0,3)=$C2)*(INDEX(data,0,4)=$D2),INDEX(data,0,5)) としてください。 また、「部署名」と「部署コード」が1対1の関係なら(普通はそう) A列は見る必要がないので数式から外してください。 でもクドイようですが。 まぁ数式でなんとか処理できるからといってMasterの見直しが進まないとなったら本意ではありません。 Excel活用のテクニック云々前に業務プロセスの改善を優先させるべきかと。 #勉強させて頂きました。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

それぞれのシートでは2行目から下方にデータがあるとします。 MasterシートはここではSheet1として、また結果出力シートはSheet2として述べます。 シート1のF2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(D2="","",C2&"/"&D2&"/"&COUNTIF(F$1:F1,C2&"/"&D2&"*")) これは部署コードと職級コードが一致する人はかなり少ないものと判断しているからです。 ただ部署コードと職級コードが一人の場合には最後で/0となりますが2人の場合には/1となります。 シート2のF2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(A2="","",C2&"/"&D2) 答えのE2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(AND(ISNUMBER(FIND(INDEX(Sheet1!A:E,MATCH(F2&"/0",Sheet1!F:F,0),1),A2)),ISNUMBER(FIND(INDEX(Sheet1!A:E,MATCH(F2&"/0",Sheet1!F:F,0),1),A2))),INDEX(Sheet1!A:E,MATCH(F2&"/0",Sheet1!F:F,0),5),IF(AND(ISNUMBER(FIND(INDEX(Sheet1!A:E,MATCH(F2&"/1",Sheet1!F:F,0),1),A2)),ISNUMBER(FIND(INDEX(Sheet1!A:E,MATCH(F2&"/1",Sheet1!F:F,0),1),A2))),INDEX(Sheet1!A:E,MATCH(F2&"/1",Sheet1!F:F,0),5),"")) この式は部署コードと職級コードが同じ人が2人までの式です。もっと多くの人が考えられる場合には/2から/3と変えた式を追加することが必要です。 かなり式は複雑になりますが頑張ってください。 このような面倒な式にしないで解決する方法はそれぞれの人物についてIDコードを設定して対応することがより現実的でしょう。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【Excel】一致するデータの検索

    Excel2003を使用しています。 Sheet1のB列の値がSheet2のA列に入力されている値と一致したら、Sheet1のC列とD列の値をSheet2のC列とD列に表示させたく、VLOOKUP関数を使用したところ、Sheet1のB列とSheet2のA列のデータの並び方(順序)が同じではないためか、VLOOKUP関数ではできませんでした。 こういう場合、マクロで処理することは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? Sheet1のデータは4行目から、Sheet2のデータは6行目から入力されています。 よろしくお願いします。

  • VBA 検索ボックスの作成について

    VBA初心者です。 エクセルで、ある列(仮にA列)のみに限定し、ショートカットキーを押した時に、 別シートにあるデータベースから検索、 検索結果をショートカットキーを押したセルに反映させるマクロを組みたいと思っています。 具体的には、 シート1→(請求明細用シート) A列→コード B列→企業名 C列→部署名 D列→請求内容 E列→金額 etc シート2→データベース(全コード一覧) A列→コード B列→企業名 C列→部署名、のみが記載。 検索ボックスは、 ユーザーフォームにテキストボックスひとつ、ボタン1つ、リストボックス1つ。 テキストボックスに文字を入力し、ボタン(検索用)を押すと、 リストボックスにシート2上のAーC列の結果が表示され(検索条件:部分一致)、 検索結果をリストボックス上でダブルクリックすると、 ショートカットキーを押したA列のセル(及びB-C列)に検索結果を出力することができる、 といったプログラムを考えています。 (B-C列への出力はVLOOKUPだけで大丈夫なので、マクロ上で組む必要はないです。 また、テキストボックスで検索する時は、基本的にB列(会社名)の内容で検索する予定です。 そして同じ会社でも部署が違えば、別のコードを採用している為、 検索結果が複数ある場合があります。 注文が多くて申し訳ありませんが、よろしくお願いします。

  • 【EXCEL】A列に複数あるデータに対応するB列のデータを表示させる

    既出かもしれませんが質問です。Accessでやると簡単なのでしょうが、Excelの関数のみで行えますか? 具体的には、sheet1、2、3のデータを使用して、 (1)sheet3でリンクさせて表示(使用するのはsheet1、2のみ) (2)かつsheet3で並べ替えて表示(使用するのはsheet1、2、3) となりますが、とりあえず(1)だけでも早急にできるようにしたいと思っています。 【sheet1】(データベース2:A列=検索被対象コード、B列=氏名、C列=社員コード(各行はB列=C列です)) A列 B列 C列 1912 A子 123 1912 B子 1234  1912 C子 2345 2001 C子 2345 2001 D子 34567 2001 A子 123 【sheet2】(データベース2:A列=社員コード、B列=氏名、C列=地域コード(各行はA列=B列=C列です。)) A列 B列 C列 123   A子 3 1234 B子 1  2345 C子 2 2345 C子 2 34567 D子 4 123  A子 3 【sheet3】(表示用:A1=検索対象コード、A3以下=sheet1A列の中から対象となるC列の情報を、(可能であればsheet2C列の地域コード順に)表示させたい) A列 B列 2001(sheet1A列の検索対象コード:手入力により可変とする。) 2345(sheet1C列のC子の社員コード(sheet2C列の地域コード2)) 123(sheet1C列のA子の社員コード(sheet2C列の地域コード3)) 34567(sheet1C列のD子の社員コード(sheet2C列の地域コード4))

  • 複数条件の設定(EXCEL)

    次のような表を作っています。 A列     B列    C列      D列 営業担当  金額  サポート担当  金額  Aさん   ○○円  Dさん     ○○円  Bさん   ○○円  Eさん     ○○円  Cさん   ○○円  Fさん     ○○円  Aさん   ○○円  Fさん     ○○円  Bさん   ○○円  Dさん     ○○円 「C列がFさんで、A列がAさんかBさんの場合、D列を返す」 というものです。 SUMPRODUCTを使ってやってみたのですが、良くわかりません。 回答よろしくお願いします。

  • 二つの検索値から別のシートに抽出する

    WinXP,Excel2000 下記のような表から例えば氏名コード(A列)103番と 日付(B列)2006/5/3からE列のデータ3.50を導きたい のですが、この場合検索値がA列・B列と2つあるので 同じシートに答えを出す場合は F3=SUMPRODUCT((A1:A9=F1)*(B1:B9=F2)*E1:E9)で できるのですが、別のシートに抽出するにはどうしたら よいでしょうか。ご教授ください。<m(__)m> A列 B列 C列 D列 E列    F列 1 100 2006/5/3 東京 8:10 8.00   103 2 101 2006/5/3 名古屋 9:10 7.25  2006/5/3 3 102 2006/5/3 大阪 7:45 5.00   3.50 4 103 2006/5/3 京都 10:30 3.50 5 104 2006/5/3 札幌 8:40 4.75 6 100 2006/5/4 福岡 8:45 5.00 7 101 2006/5/4 東京 9:05 6.25 8 103 2006/5/4 大阪 8:15 1.50 9 105 2006/5/4 横浜 10:15 3.00

  • *EXCEL*2シートにあるデータを同じ文字列があるか検索して隣のセルを関連づける

    タイトルではわかりにくいかと存じますがExcelの機能につきましてご質問です。 シート1の列Aに「文字列a」~「文字列z」      列Bに「文字列aaa」~「文字列zzz」が入力してあるとします。 シート2の列Dにシート1の列Aに入力してある文字列と同じ文字列が 入力してあるのですが、順は不同となります。 このときシート2の列Dの横(列E)に対応するシート1のAの横列(B) の文字列を表示させたいのですが、なにかよい方法はございます でしょうか。 シート1         シート2 A  B          D   E a  aaa         d   ddd ←この部分を関数などで b  bbb         a   aaa  表示させる c  ccc         b   bbb d  ddd         c   ccc ご回答いただけますと大変ありがたいです。 よろしくお願いいたします

  • Excel 複数条件一致による文字列取得

    途中まで作成してみましたが、できなかったのでお教え願います。 (1)シート<入力用>に以下のように入力されています。 ┃ ┃A ┃B   ┃C  ┃D     ┃E     ┃  ━━━━━━━━━━━━━━━━━━━━━━━ ┃1┃日付┃社員番号┃休暇等┃業務開始時間┃業務終了時間┃ ┃2┃0926┃11111111┃休  ┃      ┃      ┃ ┃3┃0927┃11111111┃直  ┃8:30    ┃17:30    ┃ ┃4┃0928┃11111111┃   ┃8:30    ┃18:30    ┃ ┃5┃0926┃22222222┃研  ┃8:30    ┃17:30    ┃ といった状態で約120名のランダムなデータがべた打ちされてます。 (2)(1)を以下のような集計表に飛ばしたいのです。   ┃ ┃A   ┃B ┃C ┃D ┃E ┃・・・・・・ ━━━━━━━━━━━━━━━━━━━━━━━ ┃1┃    ┃0926┃0927┃0928┃0929┃・・・・・・ ┃2┃11111111┃休 ┃直 ┃  ┃・・・・・・ ┃3┃22222222┃研 ┃  ┃  ┃・・・・・・ ┃4┃33333333┃・ ┃・ ┃  ┃・・・・・・ ┃5┃44444444┃・ ┃・ ┃  ┃・・・・・・ 行:日付 列:社員番号 飛ばしたい情報は、(1)の<休暇等>文字列です。 ためしに、(2)のB2に以下の式を入れてみました。 B2=index(入力用!A2:E5,match(B1,入力用!A2:A5,0),match(A2,入力用!B2:B5,0)) 当然ですが、日にちが帰ってきました。が、なぜか0927が帰ってきました。 このINDEXとMATCHを利用して(1)のC2:C5にある文字列を拾えないでしょうか? 宜しくお願いいたします。

  • Excel2007 複数条件での検索

    Excel2007で複数条件のデータの抽出について教えて下さい。 現在、シートAにデータが入力され、シートBにデータの抽出を行いたいと思います。 シートAの内容は以下の通りです(アルファベットと数字はセルの場所です): 1行目: 項目欄 2行目以下: データ詳細 1行目 A1 「日付」 B1「名前」 C1「出社状況」 2行目以下 A2 12/01  B2 山田  C2 出社 A3 12/01  B3 佐藤  C3 早退 A4 12/01  B4 木村  C4 出社 A5 12/02  B5 木村  C5 早退 A6 12/02  B6 山田  C6 遅刻 A7 12/02  B7 佐藤  C7 遅刻 ・・・・・ A列の日付は昇順ですが、B列の人名はランダムに入力されています。 また、日付によっては途中入退社する人もいるので、12/01に名前がなくても、 12/10から名前が入力されている場合(あるいはその逆)もありえます。 シートBは以下の通りです: 1行目 名前 A列:日付 B1 木村 C1 山田 D1 佐藤 ・・・ A2 12/01 A3 12/02 このシートBの B2に シートAから 「木村の12/01の出社状況」(つまりC4)に値するデータを 自動的に抽出するような関数を入力したいのですが、どのようにすればよいのでしょうか? (このB2セルの式をB2:D3に入力していきたいので、絶対値を指定することになると思いますが・・・) IndexやらMatchやらLookupやらを色々試してみたのですが、どうも上手くいきません。 どなたかアドバイスをお願いいたします。

  • SUMPRODUCT関数で複数条件適用されない

    Sheet1 A列:日付 B列:注文番号 C列:品名 D列:整理番号 E列:数量 集計 A列:品名 B~AF列:日付(1~31日) 【集計】B~AF列の日付、A列の品名が 【Sheet1】A列の日付、C列の品名と一致したら 【Sheet1】E列の数量を【集計】の該当するセルに抽出する 式をSUMPRODUCT関数で作成しました。 例)10/1 りんご 20 【集計】B3セルに以下の数式を入れましたが なぜか数量が「0」のままになります。 =SUMPRODUCT('Sheet1'!$A$3:$A$200='集計'!B$2)*('Sheet1'!$C$3:$C$200="りん ご")*('Sheet1'!$E$3:$E$200) 特に数式のミスはないと思うのですが どうしても正しい値が入りません。 数式に間違いがあればご指摘いただけませんでしょうか。 また、他に良き方法があればご教示いただけるとありがたいです。

  • 関数でなんとかなりませんか?(EXCEL)

    マクロや関数に関してはあまり知識がありません。 そこでお教えいただきたいことがあり、質問させていただきました。 まず、あるワークシートに以下のような表があります。 A列|B列 a   1 b   1 c   1 d   2 e   2 この表を新しいワークシート(ワークシート名:並べ替え)以下のように並べ替えたいと思っています。 A列|B列|C列|D列 1   a   b   c 2   d   e 要するに、B列の値を認識して値が同じものを1行目に横並びにしたいのです。 関数やマクロでなんとかなりませんか? 膨大なデータがあるので手作業でやるととてもしんどいですし、間違いがでやすくなり困っています。 お願いいたします。

このQ&Aのポイント
  • 安いラベルプリンタを探している方必見!ブラザーのQLシリーズは印刷履歴を簡単に調べることができます。詳細をご説明します。
  • Windows10で使用している方におすすめ!有線LAN接続で簡単に設定できるQLシリーズのラベルプリンタをご紹介します。
  • ブラザーのラベルプリンタQLシリーズに関する質問です。安価なラベルプリンタをお探しの方におすすめの製品です。
回答を見る

専門家に質問してみよう