- 締切済み
Excelのリストから抽出について
sheetB 12345 1X 1 ◯ 2X 2 ◯ 3Y 3 sheetBでは3行の結果によって1行がif関数を用いてフラグがXやYのようにフラグが変更されるようにしてあります。 今回、SheetAにてXフラグを抽出しアラートを出すようにしたく考えています。 単純にvlookupを使用すると(1)のように表示されてしまうのを(2)のようにしたいです。 (1) sheetA Xについて 1 ◯ 1 ◯ (2) sheetA Xについて 1 ◯ 2 ◯ ご教示お願い致します。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.3です。 やはり念のために、セル番号の表示形式がA1形式である場合に関しても、書いておく事に致します。 今仮に、SheetBのA列にはXやY等が並んでいて、B列には1,2,3といったデータが並んでいて、C列には○が表示されていてるものとします。 そして、SheetBの1行目には項目名が入力されていて、実際のデータは2行目以下に入力されているものとします。 同様に、SheetAにおいて、A列には1,2,3といったデータを抽出して表示し、B列には○を抽出して表示するものとし、2行目の所に項目名が入力されていて、実際の抽出結果は3行目以下に表示させるものとします。 又、Sheet3のA列を作業列として使用するものとします。 まず、Sheet3のA1セルに次の関数を入力して下さい。 =IF(SheetB!$A2="X",ROW(),"") 次に、Sheet3のA1セルをコピーして、Sheet3のA2以下に貼り付けて下さい。 次に、SheetBのB1~C1の所に入力されている項目名と全く同じ項目名を、SheetAのA3~B3の所に入力して下さい。 次に、SheetAのA3セルに次の関数を入力して下さい。 =IF(ROWS($3:3)>COUNT(Sheet3!$A:$A),"",INDEX(SheetB!$B:$C,SMALL(Sheet3!$A:$A,ROWS($3:3)),MATCH(B$2,SheetB!$B$1:$C$1,0))) 次に、SheetAのA3セルをコピーして、SheetAのB3セルに貼り付けて下さい。 次に、SheetAのA3~B3の範囲をコピーして、同じ列範囲の4行目以下に貼り付けて下さい。 これで、抽出結果がSheetAに表示されます。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! すでに回答は出ていますので、参考程度で・・・ >今回、SheetAにてXフラグを抽出しアラートを出すようにしたく考えています の意味がよく判らないのですが 、 ↓の画像で左側がSheet1で、右側SheetのA1セルに検索したいデータを入力するとします。 B列が「○」でA列がA1セルに入力したデータを順に表示するようにしています。 Sheet2のA3セルに Excel2007以降の場合は =IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF((Sheet1!$A$1:$A$1000=$A$1)*(Sheet1!$C$1:$C$1000="○"),ROW($A$1:$A$1000)),ROW(A1))),"") Excel2003までの場合は =IF(SUMPRODUCT((Sheet1!$A$1:$A$1000=$A$1)*(Sheet1!$C$1:$C$1000="○"))<ROW(A1),"",INDEX(Sheet1!B$1:B$1000,SMALL(IF((Sheet1!$A$1:$A$1000=$A$1)*(Sheet1!$C$1:$C$1000="○"),ROW($A$1:$A$1000)),ROW(A1)))) どちらも配列数式になってしまいますので、Ctrl+Shift+Enterで確定! この画面からコピー&ペーストする場合は、 上記数式をドラッグ&コピー → Sheet2のA3セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま) Ctrl+Shiftキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを隣りのB3セルまでフィル&コピー → そのまま下へフィル&コピーすると 画像のような感じになります。m(_ _)m
- kagakusuki
- ベストアンサー率51% (2610/5101)
行番号と思われるところに数字が記されているという事は、セル番号がR1C1形式で表示されているという事なのでしょうか? 御質問文に書かれているSheetBの例では、データの並びと、列番号の位置がずれてしまっていて、どの列にどのデータが入力されているのか良く判りませんので、取り敢えずの話として、SheetBの1列目にはXやY等が並んでいて、2列目には1,2,3といったデータが並んでいて、3列目には○が表示されていてるものとします。 そして、SheetBの1行目には項目名が入力されていて、実際のデータは2行目以下に入力されているものとします。 同様に、SheetAにおいて、1列目には1,2,3といったデータを抽出して表示し、2列目には○を抽出して表示するものとし、2行目の所に項目名が入力されていて、実際の抽出結果は3行目以下に表示させるものとします。 又、Sheet3の1列目を作業列として使用するものとします。 まず、Sheet3のR1C1セルに次の関数を入力して下さい。 =IF(SheetB!RC1="X",ROW(),"") 次に、Sheet3のR1C1セルをコピーして、Sheet3のR2C1以下に貼り付けて下さい。 次に、SheetBのR1C2~R1C3の所に入力されている項目名と全く同じ項目名を、SheetAのR3C1~R3C2の所に入力して下さい。 次に、SheetAのR3C1セルに次の関数を入力して下さい。 =IF(ROWS(R3:R)>COUNT(Sheet3!C1),"",INDEX(SheetB!C2:C3,SMALL(Sheet3!C1,ROWS(R3:R)),MATCH(R2C,SheetB!R1C2:R1C3,0))) 次に、SheetAのR3C1セルをコピーして、SheetAのR3C2セルに貼り付けて下さい。 次に、SheetAのR3C1~R3C2の範囲をコピーして、同じ列範囲の4行目以下に貼り付けて下さい。 これで、抽出結果がSheetAに表示されます。 尚、もしも、セル番号がR1C1形式ではなく、A1形式(列番号がアルファベットで表示される形式)である場合には、補足欄等を使用して、その旨を御伝え下さい。
- bunjii
- ベストアンサー率43% (3589/8249)
INDEX関数を使ってください。 =IFERROR(INDEX(SheetB!B$1:B$3,SUMPRODUCT(LARGE((SheetB!$A$1:$A$3="X")*(SheetB!$C$1:$C$3="◯")*ROW($A$1:$A$3),COUNTIF(SheetB!$A$1:$A$3,"X")+1-ROW()))),"") IFERROR関数はINDEX関数でエラーが発生したときに空欄とするためです。 行番号はSUMPRODUCT関数、LARGE関数、COUNTIFS関数、ROW関数を使って抽出します。 従って、Excel 2007以降のバージョンが必要です。 Excel 2003以前のバージョンでは代わりの関数を使わなければならないので数式が長くなり解読が困難になるでしょう。
- karorumon
- ベストアンサー率26% (25/94)
>sheetBでは3行の結果によって1行がif関数を用いてフラグがXやYのように >フラグが変更されるようにしてあります。 1行が?フラグが?フラグが? 何だか良く分かりません。 3行の結果によって1行…判定結果を出しているという話でしょうか。 うーん・・・・・・ そのIf文があれば理解できそうな気もします。 Xフラグ? ○かどうかの判別のことでしょうか。 アラート? メッセージボックスみたいなものでしょうか? 仰っていることはなんとなく分かって来ましたが、 Excelの関数の範囲を変更していくことで対応するか、 条件指定で抽出するかの2パターンになると思います。(たぶん)