• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データの抽出する関数について)

データの抽出に関する問題

このQ&Aのポイント
  • データシートに入っているデータを特定の条件で抽出する式を考えていますが、うまくいきません。
  • 特定の氏名のデータを抽出するための式を使用していますが、一部のデータが正常に抽出されません。
  • 試しに鈴木のデータを抽出する式を使用した場合には正常に抽出できますが、渡辺や山田のデータは正常に抽出できません。どのような関数を使用すればいいでしょうか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

例データ Shhet3の A2:C10に A列  B列   C列  D列(計算結果) 鈴木 りんご 10 1 鈴木 みかん 20 2 渡辺 りんご 10 2 鈴木 りんご 30 3 山田 バナナ 40 3 渡辺 バナナ 50 3 D2に=COUNTIF($A$1:A2,"鈴木")と入れてC7まで複写。 Sheet4に行って A2に =INDEX(Sheet3!$A$1:$C$10,MATCH(ROW()-1,Sheet3!$D$1:$D$10,0),0) と入れてA4まで複写。 A2:A4をC列まで複写。 結果Sheet4の A列  B列   C列  鈴木 りんご 10 鈴木 みかん 20 鈴木 りんご 30 これにはSheet3とSheet4の式に手抜きがありますが 質問者のレベルならお分かりと、対策を略してます。 =IF(A2=””,””,・・・)や=IF(ISERROR(・・・)で逃げてください。(imogasi方式) ワーク列を使うことによって、配列数式を使うのに比べ判りやすくはなってます。

jinah
質問者

お礼

imogasiさんの方法で行いました。 ワーク列への設定と+以下の関数で出来ました。 =IF(ISERROR(INDEX(データ!$A$5:$I$124,MATCH(ROW()-15,氏名!$J$16:$J$45,0),2))=FALSE,INDEX(データ!$A$5:$I$124,MATCH(ROW()-15,氏名!$J$16:$J$45,0),2),"") ありがとうございます!!

その他の回答 (1)

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

こんにちは。 配列確定をしないで、取り出す方法を考えてみました。 (ただし、配列は使っています。) =IF(COUNTIF(データ!$A$1:$A$15,$A$2)>=ROW(A1),INDEX(データ!$A$1:$I$15,SMALL(INDEX((データ!$A$1:$A$15=$A$2)*ROW($A$1:$A$15),,),ROWS($A$1:$A$15)-COUNTIF(データ!$A$1:$A$15,$A$2)+ROW(A1)),2),"") ちょっと解説: IF( COUNTIF(データ!$A$1:$A$15,$A$2)>=ROW(A1),~,"") これは、同じ検索値がいくつあるか数えて、それ以上の行はエラーが出るので、""で空白にします。 INDEX(データ!$A$1:$I$15, ~,2) は、通常のINDEX関数 SMALL(INDEX((データ!$A$1:$A$15=$A$2)*ROW($A$1:$A$15),,) 同じものがある場合に、その行番号を小さい順から並べます。(ただし、False のところは、0になっています。) 中に、INDEX があるのは、配列を一旦、標準で扱えるように変換しています。 ,ROWS($A$1:$A$15)-COUNTIF(データ!$A$1:$A$15,$A$2)+ROW(A1)) SMALL関数の中の0の数を数え、それより大きい数値の順位の数値を、1つずつ、取り出します。 このような考え方で作られています。

関連するQ&A

専門家に質問してみよう