- 締切済み
エクセルで複数の条件範囲に合う行を別シートに抽出
エクセルの関数で複数の条件範囲に合う行だけをを別シートに抽出したいのですが、 どうしても方法が分かりません。 誰か教えて頂けないでしょうか? 検索は範囲です。 宿泊日○○○○○○○○~○○○○○○○○(例20111110~20240204) 人数 ○人~○人 (○の中に数字が入ります) 西暦日付と人数が両方一致している行を別シートに抽出したいです。 バージョンは2007.2010両方とも問題ないです。 Sheet1 A BCDEFGHIJKLMN O 1 宿泊日 人数 2 20100223 20 3 20110103 5 4 20111118 9 5 20120505 13 6 20121010 7 8 20120224 32 9 20121121 28 Sheet2 A B C D E FGHIGKLMN O 1 検索 2 宿泊日 20110101 ~ 20121111 3 人数 8 ~ 30 人 4 5 宿泊日 人数 6 20111118 9 7 20120505 13 Sheet1、A列の宿泊日とO列の人数の範囲が一致するものを、 Sheet2の検索から、行ごと抽出(複数)し、Sheet2に反映する関数を教えて頂けないですか? いろいろ検索して探しましたが、複数抽出する方法がわかりませんでした。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
No.3です。 >Sheet1に手を加えることのなく、 >Sheet2のみに関数を入れて処理できないでしょうか? とありましたので、便宜上Sheet2のP列を作業用の列にしても同様の数式でOKです。 Sheet2のP2セルに(←関らずSheet1の最初のデータがある行に数式をいれます) =IF(AND(Sheet1!A2>=$B$2,Sheet1!A2<=$D$2,Sheet1!O2>=$B$3,Sheet1!O2<=$D$3),ROW(),"") という数式を入れオートフィルでずぃ~~~!っと下へコピー! そうするとSheet2のA6セルの数式は =IF(COUNT($P:$P)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL($P:$P,ROW(A1)))) そして前回誤記がありました。 >Sheet2のA6セル上で右クリック → コピー → O2セルを選択 → 右クリック → ・・・ は >Sheet2のA6セル上で右クリック → コピー → O6セルを選択 → 右クリック → ・・・ です。 あとは前回同様の操作で大丈夫だと思います。 ※ 数式内のP列の部分は実際の作業列にした列番号にしてください。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 ↓の画像のようにSheet1に作業用の列を設けます。 作業列P2セルに =IF(AND(A2>=Sheet2!$B$2,A2<=Sheet2!$D$2,O2>=Sheet2!$B$3,O2<=Sheet2!$D$3),ROW(),"") という数式を入れオートフィルでずぃ~~~!っと下へコピーしておきます。 Sheet2のA6セルに =IF(COUNT(Sheet1!$P:$P)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$P:$P,ROW(A1)))) Sheet2のA6セル上で右クリック → コピー → O2セルを選択 → 右クリック → 貼り付け 最後にA6セル・O6セルをオートフィルで下へコピーすると 画像のような感じになります。m(_ _)m
補足
ご返答ありがとうございます。 もし分けないのですが、 Sheet1は常に更新され。入力をする事が出来ませんので、 Sheet1に手を加えることのなく、 Sheet2のみに関数を入れて処理できないでしょうか?
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No1です。 添付の図が有るのを見落としていました。こちらの設定した条件のセルで一度お試しください。後はそれを応用すればよいでしょう。
- KURUMITO
- ベストアンサー率42% (1835/4283)
作業列を作って対応するのがデータが多くなってもパソコンに負担を掛けない方法としてお勧めです。 シート1ではお示しのようにA2セルから下方に数値が、また、O2セルから下方に人数が有るとします。 シート2ではB2セルに宿泊日の初めがC2セルは~、D2セルには宿泊日の終わりが入力するとします。また、B3セルには検索人数の初めの人数が、C3セルは~、D3セルにはいわりの人数を入力することにします。 そこでシート1での作業列ですが例えばP列に作ってP2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",IF(AND(AND(A2>=Sheet2!B$2,A2<=Sheet2!D$2),AND(O2>=Sheet2!B$3,O2<=Sheet2!D$3)),MAX(P$1:P1)+1,"")) この作業列のデータを使ってシート2の6行目から下方に条件検索での該当するデータを表示することにします。 シート2のA6セルには次の式を入力してO6セルまで右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX(Sheet1!$P:$P),"",IF(INDEX(Sheet1!$A:$O,MATCH(ROW(A1),Sheet1!$P:$P,0),COLUMN(A1))="","",INDEX(Sheet1!$A:$O,MATCH(ROW(A1),Sheet1!$P:$P,0),COLUMN(A1))))
補足
ご返答ありがとうございます。 もし分けないのですが、 Sheet1は常に更新され。入力をする事が出来ませんので、 Sheet1に手を加えることのなく、 Sheet2のみに関数を入れて処理できないでしょうか?
補足
何度もスミマセン。 これですとセルだけなってしまいました。 セルではなく条件範囲に合う行全体を抽出して を別シートに表示したいのですが 再度、お分かりの様でしたら教えて下さい。 宜しくお願い致します。