• ベストアンサー

[EXCEL]リストから複数の条件に最も近い値を持つセルを探し、そのセルの同一行の情報を抽出する方法

EXCELに関して表題の件でお知恵を借りたいです。よろしくお願いします。 今、以下のようなサンプルがあるとします。 分類1  分類2  1回目  2回目  3回目  4回目 ------------------------------------------------- A   A-1   12   14   34   45 A   A-1   65   23   76   23 A   A-2   23   89   43   90 B   B-4   89   34   12   33 B   B-2   78   44   54   22 C   C-2   45   55   76   12    ここで、 分類  代表値 A   76 B   33 C   76 というキーをもとに分類2の情報とその代表値が"何回目"のときの値であったのかを知りたいです。 すなわち、 分類  代表値  何回目? 分類2? A   76   3   A-1 B   33   4   B-4 C   76   3   C-2 を最終的に抽出したいです。 これを実現するために書くべき関数式はどのようなものが適切でしょうか?手作業でひとつひとつやるのは少々無理なデータ量です。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

#4 の補足。   A     B     C      D   分類  代表値  何回目?  分類2?   A     23    ちょうど、このような例の場合は、数値のダブりがありますから、その場合は、CountIf で取って、複数ある場合は、 =SMALL(ABS((INDIRECT("R"&MATCH(A21,$A$1:$A$7,0)&":R"&MATCH(A21,$A$1:$A$7,1)&"C3:C6",0))-B21)+COLUMN(A1:D1)*10^-3,2) =SMALL(ABS((INDIRECT("R"&MATCH(A21,$A$1:$A$7,0)&":R"&MATCH(A21,$A$1:$A$7,1)&"C3:C6",0))-B21)+COLUMN(A1:D1)*10^-3+ROW(INDIRECT("R"&MATCH(A21,$A$1:$A$7,0)&":R"&MATCH(A21,$A$1:$A$7,1)&"C1",0))*10^-6,2) これらの式の第二引数、つまり、末尾の、,1) の部分の数,2) とすれば、二番目が出てくるわけです。

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

その他の回答 (5)

noname#204879
noname#204879
回答No.6

  A  B  C  D  E  F  G  H  I   J   K 1 類1 類2 1回 2回 3回 4回   類1 代表 回目 類2 2  A A-1  12  14  34  45   A   76   3 A-1 3  A A-1  65  23  76  23   B   33   4 B-4 4  A A-2  23  89  43  90   C   76   3 C-2 5  B B-4  89  34  12  33      6  B B-2  78  44  54  22 7  C C-2  45  55  76  12 J2: =MATCH(I2,OFFSET($A$1,SUMPRODUCT((A$1:A$10=H2)*((C$1:C$10=I2)+(D$1:D$10=I2)+(E$1:E$10=I2)+(F$1:F$10=I2)),ROW(A$1:A$10))-1,2,1,4),0) K2: =INDEX(B$1:B$10,SUMPRODUCT((A$1:A$10=H2)*((C$1:C$10=I2)+(D$1:D$10=I2)+(E$1:E$10=I2)+(F$1:F$10=I2)),ROW(A$1:A$10)),1)

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 VBAでなくても出来そうな気がします。 今、集中できないことがあって、作った本人が、Match関数とIndex 関数の組み合わせが、ややこしくなって、その説明がうまくできません。理屈は、代表値(検索値)と該当する値の差を取った絶対値の最小値を取り出す、という考え方です。 横に伸びていくということで、 とりあえず、 A20から取り付けることにしました。   A     B     C      D   分類  代表値  何回目?  分類2? 21 A     23 22 B     44 23 C     76 F21 =SMALL(ABS((INDIRECT("R"&MATCH(A21,$A$1:$A$7,0)&":R"&MATCH(A21,$A$1:$A$7,1)&"C3:C6",0))-B21)+COLUMN(A1:D1)*10^-3,1) 配列確定が必要です。F2 -> Ctrl + Shift + Enter G21 =SMALL(ABS((INDIRECT("R"&MATCH(A21,$A$1:$A$7,0)&":R"&MATCH(A21,$A$1:$A$7,1)&"C3:C6",0))-B21)+COLUMN(A1:D1)*10^-3+ROW(INDIRECT("R"&MATCH(A21,$A$1:$A$7,0)&":R"&MATCH(A21,$A$1:$A$7,1)&"C1",0))*10^-6,1) 配列確定が必要です。F2 -> Ctrl + Shift + Enter C21 ~フィルダウン・コピー =MOD(F21,1)*10^3 D21 ~フィルダウン・コピー =INDEX($B$1:$B$7,MOD(G21*10^3,1)*10^3,1) これは、俗に、重み付けテクニックと呼ばれるものです。

全文を見る
すると、全ての回答が全文表示されます。
  • rin01
  • ベストアンサー率43% (33/76)
回答No.3

こんにちは~♪ 失礼しま~す。。。 回答ではないのですが~。 >#01さんのおっしゃるように検索する値が一次元(1列 >もしくは1行)で格納されていれば 作業列を使って、1列に抜き出せば 出来そうですが。 その場合でもいくつか、疑問があります。 疑問その1 sakuuuuuさんも書かれていますが Aの場合、23 が、3つあって、同じ行にも2つあります。 この場合、何を条件にして回数や分類2を判断すれば 良いのでしょうか? 疑問その2 >最も近い値を持つセル Aで、代表値が 13 の場合 12 又は 14 どちらになるのでしょう? 検査より上の近似値か、下の近似値どちらでしょう? ★これらの説明があれば、良いのですが。 又、条件が合うデータは(例えば、回数が複数該当する 場合はすべて、表示させる事も出来ると思いますけれど。 。。。。Rinでした~♪♪

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

質問の例でデータがA2:F7にあり(A1:F1はタイトル)、A10に求める値の「A」、B10に「76」があるとき 完全に一致する数値が1つだけあるという条件が成り立つなら 該当する「n回目」は(質問例では「3回目」)  =OFFSET(A1,0,SUMPRODUCT((A2:A7=A10)*(C2:F7=B10)*COLUMN(C2:F7))-1) そのときの分類(A-1)は  =INDIRECT("B"&SUMPRODUCT((A2:A7=A10)*(C2:F7=B10)*ROW(C2:F7))) の関数式で求めることができます。 でも実際にはデータの重複もありそうですし、また近似値で検索されたいようですね。となるとEXCELの関数では難しいと思います。LOOKUP関数で配列範囲内の検索は可能ですが複合条件での検索には不向きです。 #01さんのおっしゃるように検索する値が一次元(1列もしくは1行)で格納されていればVLOOKUP関数やMATCH関数で完全一致でない検索も可能です。 ただしその場合であっても「最も近い数値」を検索することはできません。「指定した値以下の最も近い数値」または「指定した値以上の最も近い数値」だけです。

全文を見る
すると、全ての回答が全文表示されます。
  • sakuuuuu
  • ベストアンサー率32% (67/209)
回答No.1

いまいち良く分からないのですが・・・。 例えばA-1の2回目、というデータはサンプルデータでは"14""23"があるのですが・・。"23"は6回目と言う位置づけなんですか?? あと表題では「最も近い値を持つセル」と書いてありますが値はぴったりじゃない場合もあるのですか?? ぱっと見、関数では無理かなあ・・という気がします。 たとえできたとしても複雑な関数になるでしょう。 1回目、2回目、3回目と横にデータを持ってますが縦持ちにできないのでしょうか? A   A-1   12  1回目    A   A-1   14  2回目 A   A-1   34  3回目 最初にこのような表にすれば作業は劇的に効率的になります。 いつもこのOKWAVEを見て思うのですがEXCELをあまり使用したことがない人は(すなわちEXCELビギナーは)、表の見易さを優先して横に長い表を作っています。 実務上で見ると横長はお勧めしません。データが多いならなおさらです。 なぜなら例えば"A-2"の,一回目、二回目、"A-3"の一回目、二回目と増えていくとX軸とY軸の両方が増加する表になるからです。集計や検索するときもX方向とY方向の2要素を考慮しなければなりません。実際コレは最高に手間になり関数やVBAも複雑になります。 私がオススメする縦長の表だとY軸しか増加しません。集計も検索もY方向のみ考慮すればいいだけです。特にデータが多くなっても根本的にY方向のみを考慮に入れればよいのです。 表を作り直せるのであれば縦長にすることをオススメします。

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

関連するQ&A

  • 【Excel】2つの値のどちらかを抽出する

    A、Bのセルがあり、どちらのセルにも文字列が入っていたり、入っていなかったりとします。 そこでセルCに、A、Bどちらかの文字列を入れたいと考えたとき、どのような関数が考えられますでしょうか? 条件は以下のようにします。 (1)A,Bとも文字列か、空白のどちらか (2)Aの方が優先される。A,Bのどちらも値が入っている場合はA、Aが空白で、Bに値が入っている場合はBの値がCに反映される。 宜しくお願い致します。

  • 複数のデータ抽出条件について

     |nen  |kaisha|cust |seihin|code |qty |ctg | ------------------------------------------------- 1 |2004 |A   |AC  |ITEMA |1  |100 |2 | 2 |2004 |A   |AC  |ITEMA |2  |100 |1 | 3 |2005 |A   |AC  |ITEMA |1  |200 |1 | 4 |2005 |A   |AC  |ITEMA |2  |300 |2 |○ 5 |2004 |B   |BC  |ITEMB |1  |100 |3 | 6 |2004 |B   |BC  |ITEMB |2  |100 |2 | 7 |2005 |B   |BC  |ITEMB |2  |200 |1 |○ 8 |2005 |B   |BC  |ITEMB |1  |200 |2 | 9 |2004 |C   |CC  |ITEMC |2  |200 |2 |○ 10 |2004 |C   |CC  |ITEMC |1  |100 |1 | KEY:nen,kaisha,cust,seihin,ctg DB:Oracle 上記テーブルから、「ctg」項目の値を抽出する時、 以下の条件で抽出したいと考えています。 条件:nendo=2004,2005 kaisha、cust、seihinが同一のデータがある場合、 ・nen=2004のqtyの値が大きいものを抽出する。 ↓1件に絞り込めない場合、 ・nen=2005のqtyの値が大きいものを抽出する。 ↓1件に絞り込めない場合、 ctgが小さいものを抽出する。 (上記表の○データを抽出したいと考えています) PL/SQLで上手くデータを抽出する方法はありますでしょうか? 何度も考えて見たのですが、上手くいきません でした・・・。ご教授頂けましたら嬉しいです。 宜しくお願い致します。

  • Excel2003 複数の条件を満たすデータを抽出する関数を教えて下さ

    Excel2003 複数の条件を満たすデータを抽出する関数を教えて下さい! 下のデータで、A列でB、B列で赤を選んだ人は「みかん」という「みかん」を抽出する関数を教えて頂けませんでしょうか? データシートとは別に集計シートを作成しています。 お忙しい中恐れ入りますが、ご教示下さいますようお願い申し上げます。。。 ●データ A B C 1 A 赤 みかん 2 B 赤 りんご 3 C 白 いちご 4 B 青 いちご 5 D 赤 みかん 6 A 青 みかん 7 C 黄 りんご 8 E 赤 バナナ

  • 条件1つで複数の値を抽出することはできませんか。

    エクセルのことなのですが、条件1つで複数の値を抽出してきたいと思っています。 しかし、様々な本やインターネットのサイトを参照したのですがうまくできません。 内容なのですが、「シート1」というシートがありこのシートを「シート2」のように番号で分けて、横に並べるようなシートを作りたいと思っています。 シート1 番号 品目 100 A 100 B 101 C 101 D 101 E 101 F 101 G 101 H 101 I 102 J 103 K 103 L シート2 番号 品目 100 A B 101 C D E F G H I 102 J 103 K L すみませんが教えていただけないでしょうか。 よろしくお願いします。

  • 空白以外のセルを複数抽出して表示させる方法

    [シート1]   A B C D E F 1 _ a b c d e 2 ア あ   い 3 イ         う 4 ウ 5 エ       え 6 オ お     か ↓ [シート2]   A B C D E F 1 ア a あ 2 _ c い 3  4 5  6  シート1で入力したものを、シート2で上記のように抽出したいのですが、どのようにすればいいのでしょうか? シート2ではセルA1をカウンターボックスにして、値が変わるとB、Cの結果も変わるようにしたいです。 関数やオートフィルタは使用せず関数のみで出来る方法はありますでしょうか。 宜しくお願い致します。

  • 複数の条件に値する1つの値を求めたい。

    下記のような2つのSHEETがあり、【SHEET1】の2つの条件に値する数値を【SHEET2】より選ぶ関数を教えて下さい。 例えば、製品Aの品質○は【SHEET2】では3ですが、それを表す関数を 【SHEET1】の(在庫)?のところへ入れたいのです。 品質がその日によって変わるので、単にSHEETをリンクさせるのではなく、条件の付いた関数を入れたいのですが可能でしょうか? 宜しくお願い致します。 【SHEET1】               (製品) A B C D・・・ (品質) ○ × ○ ○ (在庫) ? ? ? ? 【SHEET2】   ○  × A 3  5 B 4  7 C 1  9   

  • エクセルで各行から一つずつセルを無作為抽出する方法

    表題の通りで、エクセルを使って、 A列(A1~A5) B列(B1~B8) C列(C1~C4) D列(D1~D20) E列(E1~E13) … などと、いくつかの行列データ?(各列は同数とは限らない)があった時に A列→A3 B列→B8 C列→C2 D列→D16 E列→E9 … などと、それぞれの列から任意のセルを抽出したいと思います。 このような時、どのようにすればよいでしょうか?? 具体的に、どんな関数を用いれば、実現できるか、 ご存知或いはお分かりの方、教えて下さい。。 またはマクロとやらを組まないとダメでしょうか?? マクロは組んだことがないのですが、もしそれを使うべきとのことでしたら その方法を教えて下さると、助かります。。 どうぞ、よろしくお願いいたします!

  • エクセル セルから値を抽出する方法

    困っています!教えていただけたらありがたいです!! A1からA3~のセルに [10][3]:[6][5] [9][3]:[10][6] [7][5]:[2][4] ・ ・ ・ の値があります。 これを    B C  D E 1l 10 3 6 5 2l 9 3 10 6 3l 7 5 2 4 4l ・ ・ といったようにバラバラのセルに[]内の数字だけを取り出したいのですが、どのような関数をそれぞれに入れれば良いか悩んでいます>< 一桁と二桁の数字がごちゃごちゃにあるので、どうしたらよいか・・・ よろしくお願いいたします!

  • 【Excel】複数ある特定の値を検査値として、同一行の特定列の値を返す方法を教えてください

    はじめまして。 表現の仕方がわからなかったのですが、 複数ある特定の値を検査値として、同一行の特定列の値を返す方法 わかる方いらっしゃいましたら教えてくださいm(__)m 例えば・・・ 【シート1】      【シート2】   A  B C D        A B C 1 あ 月 ア 一     1 う エ   2 う 火 エ 二     2 え イ 3 い 木 ウ 三     3 4 え 火 イ 四     4 とあった場合、 【シート1】のB列の”火”を検査値として ”火”のある2行目と4行目のA列C列の値のみを 【シート2】の特定のセルに表示させる方法を教えてください。 よろしくお願いします。

  • 【Excel】複数の条件を設定した重複セルの抽出

    【Excel】複数の条件を設定した重複セルの抽出 例えば、A列にA社からD社のデータが行に複数個ずつ並び、B列にそのクライアントに問い合わせた日付が入力されている場合。 A社に問い合わせた日付は1/1、1/3、1/5。B社に問い合わせた日付が1/1、1/1、1/3、1/5、1/5となっているデータで、 B社の3~7行目の日付で重複している1/1と1/5の行のみを抽出する方法ってありますか? 作業自体はB社だけでなく、複数あるので、関数か何かで出来る方法があれば教えていただきたいです。

専門家に質問してみよう