• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:条件に合った行を抜き出す関数を教えて下さい。)

エクセル関数で条件に合った行を抜き出す方法

このQ&Aのポイント
  • エクセルのバージョンは2013です。条件に合った行を抜き出すための関数を探しています。
  • A1からC100までのデータを比較し、D1よりタイムオーバーしている行の性別、職業、時間をE1、F1、G1に抜き出したいです。
  • 複数行がタイムオーバーしている場合は、E2、F2、G2に順にデータが続きます。すべての行がタイムオーバーしている場合は、E100、F100、G100に同じデータが入ります。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 タイムオーバーか否かの判定に関して確認したいのですが、例えばD1セルに0:50:00と入力されていた場合、0:50:00丁度はタイムオーバーとは見做さず、0:50:01以上のものをタイムオーバーと見做すと考えれば宜しいのでしょうか?  もしそれで宜しければ以下の様にされると良いと思います。  今仮に、I列を作業列として使用するものとします。  まず、I2セルに次の関数を入力して下さい。 =IF(OR(COUNT($C2,$D$2)<2,$C2<0,$D$2<0),"",IF($C2>$D$2+0.000001,ROW(),""))  次に、I2セルをコピーして、I3~I100のセル範囲に貼り付けて下さい。  次に、E2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNT($I:$I),"",IF(INDEX($A:$C,SMALL($I:$I,ROWS($2:2)),COLUMNS($E:E))="","",INDEX($A:$C,SMALL($I:$I,ROWS($2:2)),COLUMNS($E:E))))  次に、E2セルをコピーして、F2~G2のセル範囲に貼り付けて下さい。  次に、G2セルの書式設定の表示形式を[時刻]の 13:30:55 に設定して下さい。  次に、E2~G2のセル範囲をコピーして、E3~G100のセル範囲に貼り付けて下さい。  以上です。

yomi0952
質問者

お礼

本日、教えていただいた関数を試したところ、 目的通りの結果を出すことが出来ました。 感謝感激です。 しかしながら、中身が完全に理解できません。 少しずつ勉強して自分なりに応用できるようにしたいと思います。 対応頂き、本当にありがとうございました。

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

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答No.1です。  もし作業列を使わずに済ませるのであれば、以下の様な方法があります。  まず、E2セルに次の関数を入力して下さい。 =IF(AND(ISNUMBER($D$2),$D$2>=0),IF(ROWS($2:2)>COUNTIF($C:$C,">"&$D$2+0.000001),"",IF(INDEX($A:$C,SUMPRODUCT(NOT(ISERROR($C$2:$C$100))*(COUNTIF(OFFSET($C$1,1,,ROW($C$2:$C$100)-ROW($C$1)),">"&$D$2+0.000001)<ROWS($2:2)))+ROW($C$1)+1,COLUMNS($E:E))="","",INDEX($A:$C,SUMPRODUCT(NOT(ISERROR($C$2:$C$100))*(COUNTIF(OFFSET($C$1,1,,ROW($C$2:$C$100)-ROW($C$1)),">"&$D$2+0.000001)<ROWS($2:2)))+ROW($C$1)+1,COLUMNS($E:E)))),"")  次に、E2セルをコピーして、F2~G2のセル範囲に貼り付けて下さい。  次に、G2セルの書式設定の表示形式を[時刻]の 13:30:55 に設定して下さい。  次に、E2~G2のセル範囲をコピーして、E3~G100のセル範囲に貼り付けて下さい。  以上です。 (抽出結果は回答No.1の方法のG列までの部分と同様になりますので、画像は割愛します)  尚、配列値で抽出する方法やSUMPRODUCT関数を使った方法は、処理が重くなりますので、作業用列を用いる方法を使われる事をおすすめ致します。

yomi0952
質問者

お礼

こちらのやり方も試してみたいと思います。 参考になる回答をありがとうございました。

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

>色々検索してよく似た内容のやり取りを調べましたが、どうしてもうまくいかず断念。 試した数式を提示して頂ければ何処に誤りがあるか説明できます。 他人が組んだ数式を理解するにはそれなりの組み込み関数の基本的な使い方を修得していないと無理でしょう。 >作業用列を追加するのも可能です。 作業列があると数式が簡単になりますが1つの数式で対応可能です。 E2=IF(COUNTIF($C$2:$C$20,">"&$D$1)>=ROWS($C$2:C2),INDEX(A:A,SMALL(INDEX(($C$2:$C$20>$D$1)*ROW($C$2:$C$20)+($C$2:$C$20<=$D$1)*ROW($C$21),0),ROW()-1)),"") 基本的にはタイムオーバーになっている行番号を抽出してINDEX関数やOFFSET関数を使って順次目的のセルの値を抽出します。 提示の数式ではINDEX関数を使っています。 行番号の抽出にはC列の時間と$D$1の値を比較し、タイムオーバーとなるセルの行番号を配列値で抽出します。その配列からSMALL関数で小さい順に取り出す仕掛けになっています。 SMALL(INDEX(($C$2:$C$20>$D$1)*ROW($C$2:$C$20)+($C$2:$C$20<=$D$1)*ROW($C$21),0),ROW()-1) 該当する行番号の数をカウントし、それ以上を抽出しないためにIF関数で条件分岐しています。そのカウント方法はCOUNTIF関数を使っています。 COUNTIF($C$2:$C$20,">"&$D$1) IF関数での分岐には現在の処理数が何番目であるかをROWS関数で比較し、抽出の続行または中断の判定を行っています。 添付画像は20行までに模擬データを作成し、動作テストを行ったものです。

yomi0952
質問者

お礼

便利な方法を教えていただきありがとうございました。 使用されている関数がまだ知識不足のため理解しきれてませんが、 これから勉強して応用できるようにしたいと思います。

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

 間違えました。  回答No.1の関数では、タイムオーバーか否かの基準となる時間を入力するセルを誤ってD1セルではなくD2セルにしてしまっておりました。  ですから、I2セルに入力する関数を以下の様に訂正致します。 × =IF(OR(COUNT($C2,$D$2)<2,$C2<0,$D$2<0),"",IF($C2>$D$2+0.000001,ROW(),""))   ↓ ○ =IF(OR(COUNT($C2,$D$1)<2,$C2<0,$D$1<0),"",IF($C2>$D$1+0.000001,ROW(),""))

yomi0952
質問者

お礼

修正内容、反映しました。 ありがとうございました。

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

関連するQ&A

  • 【EXCEL】複数行を1行に

    エクセルにまだまだ不慣れなもので、質問させてください。 下の図《1》のようなデータが大量にあります。CSV形式に出力したいのですが《2》のように並べ替えなければいけませんよね?(←ここら変の知識も未熟なものですみません。。) 《1》のようなデータを《2》のような並びにする事は可能でしょうか? ちなみに《1》のようなデータは、一行ずつ空白行をはさみ、下まで何百件も並んでいます。また、1データの行数もランダムです。 何か良い方法がありましたら是非ご教授下さい。よろしくお願い致します。 《1》 A  B   C   D   E   F 1 ●● 2 ■■ 3 ▲▲ 4 ◎◎ 《2》 A   B  C  D  E   F 1 ●● ■■ ▲▲ ◎◎ 2 3 4

  • 関数の質問です。

    こんなことが関数でできますか? 1) A1~A43までに1から43の数字を入れます。 2) B1セルにスタートボタンを設置する。 3) C1セルにストップボタンを設置する。 4) D1に1、E1に2、F1に3、G1に4、H1に5、I1に6の数字を入れる。 5) D2、E2、F2、G2、H2、I2、のセルにランダムな組合せ数字が出るようにしたい。 ようは、ロト6の予想するときに宝くじ売り場に置いてある、「あたるくん」みたいなやつが、エクセルの関数を使ってできないかと言う質問です。B1でスタートさせてC1でストップしたとき、D2、E2、F2、G2、H2、I2、のセルにランダムな組合せ数字が出るようにしたいです。 ※ エクセルの関数にランダム関数みたいなものがあると思います。これを使えばできそうですが、数式の書き方が分かりません。別の関数の数式でもいいので、結果を出せるような関数式のわかる方、ご教示ください。(ググって探せは、遠慮願います。自分なりに探してみたけど理解できるものに行き着きませんでしたので・・・。)

  • 行を超えて範囲指定したい。

    エクセル2000でA1:G1とするとA1-A6,B1-B6,C1-C6,D1-D6,E1-E6,F1-F6,G1-G6が範囲指定できます。 行を超えて A1-A6,D1-D6,G1-G6,J1-J6というように3行おきに範囲指定する方法を教えてください。

  • エクセルの関数式について教えてください。お願いします。

    エクセルの関数式について教えてください。お願いします。   A B C D E F G H I J 1 9 6 1 3 4 7 8 2 5 10 2 6 4 9 3 8 7 1 5 10 2 3 1 3 -2 0 2 0 -4 1 1 -2 たとえばこのような表があります。 1の行にはランダムに1から10までの数字が入ります。 2の行にもランダムに1から10までの数字が入ります。 B1に6が入っています、A2にも同じ数字の6が入っています、 6はB1からA2に1つ上がっているので1 A1には9が入っています、C2にも9が入っています。 9はA1からC2に2つ下がっているので-2 D1には3が入っています、D2にも3が入っています。 3はD1からD2動いていないので0 といった具合に、1の行に入った数字が2の行の同じ数字を感知して その数字がどれだけ上がったのか、下がったのかを 3の行に表したいのですが、どのような関数を使ったらよいのでしょうか? 教えてください。お願いします。

  • Excel関数で一致した条件を合計する方法

    Excelの関数を使って、E2:E4のセルにF列の「A」~「D」に 一致した場合、G列の「8」または「9」を加算する方法を教えて下さい。 例えば、スギの場合だと...... スギの1日目が「A」の時、F1:G4の表をもとに、「8」になり スギの2日目が「C」の時「7」になり スギの3日目が「A」の時「8」になり、 E2の合計は「8+7+8」と加算されるということです。 スギの合計は23、 マツの合計は25、 サクラの合計は28というふうになればいいのですが・・・。 どなたか教えて下さい。お願いします。   A   B   C   D   E    F  G   1     1日  2日  3日 合計  A  8 2 スギ  A   C   A       B  9 3 マツ  C   D   A       C  7 4 サクラ B   B   D       D  10

  • IF関数についてです

    エクセル初心者です。 わかりづらかったらすいません。 たとえば A1*B1の結果をF1へ。 C1+D1+E1の結果をG1へ。 で、F1+G1の結果をH1へ。 という表を作っています。 で、結果が0の時に空白を返したいので、それぞれを IF(A*B=0、””、A*B)として、 IF(C1+D1+E1=0、””、C1+D1+E1)としています。 最後にF1+G1の結果も0、もしくは空白の時に空白を 返したいのですがどのように数式を入れればよいのでしょうか。 自分なりにいれてみましたがエラーがでてしまいます。 よろしくお願いいたします。

  • IF関数で可能でしょうか?

    例) A1  B1 ・・・F1 3 5 20 (1)A1<B1なら、C1/D1、でなければC1/E1 (2)C1/D1がF1なら○、でなければ×   C1/E1がF1なら○、でなければ× とG1に表示したいです。 また、エラー表示を避ける為ISERROR等ありますが、そちらもご教授していただけたら 助かります。 エクセル初心者でわかりにくい説明ですいません。

  • Excelで、行の組み換えについて

    A列からG列までデータが入っているリストがあるのですが、 例えば、1行目から50行目までと、51行目から100行目までを交互に組み入れるには どのようにすればよいでしょうか。   A B C D E F G 1 2 3 ・ ・ ・ 51 52 53 ・ ・ ・ といったものを、   A B C D E F G 1 51 2 52 3 53 ・ ・ ・ のようにしたいのですが、一気に操作できる方法があれば 教えていただきたく、よろしくお願いいたします。

  • LibreOfficeの関数について

    たとえば下記のように、データが入力されているとします。 B5 1月1日 C5 データ1 D5 100 E5 空欄 F5 現金 G5 分類A B6 1月2日 C6 データ2 D6 空欄 E6 200 F6 A銀行 G6 分類B B7 1月3日 C7 データ3 D7 300 E7 空欄 F7 B銀行 G7 分類C B8 1月4日 C8 データ4 D8 空欄 E8 400 F8 C銀行 G8 分類D B9 1月5日 C9 データ5 D9 500 E9 空欄 F9 現金・D銀行 G9 分類E B10 1月6日 C10 データ6 D10 空欄 E10 600 F10 E銀行・現金 G10 分類G このデータを関数を使って、下記のように並べ替えをしたいです。 F列に、現金の文字があるものだけを抽出し、E列の分類が、EもしくはGだったら金額のD部分を入れ替えて表示する。そのほかの分類は、入れ替えをせずにそのまま表示する。 J6 1月1日 K6 データ1 L6 100 M6 空欄 N6 現金 E6 分類A J7 1月5日 K7 データ5 L7 空欄 M7 500 N7 現金・D銀行 E7 分類E J8 1月6日 K8 データ6 L8 600 M8 空欄 N8 E銀行・現金 E8 分類G このようなことを関数で行いたいです。できれば、0やエラー表示は出ないものがいいです。よろしくお願いします。

  • エクセルで1行に1データ以上入力されたらエラー表示

    A1からG1の行で7つのセルがありますが、 その行で1データ以上入れたらエラー表示させることは出来ますか? 例えば A1にデータを入れたらB1・C1・D1・E1・F1・G1にはデータは入れられない。 D1にデータを入れたらA1・B1・C1・E1・F1・G1にはデータは入れられない。 という感じです。 どうぞよろしくお願いします。

専門家に質問してみよう