• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:以前と似た質問でエクセル関数=複数条件付関数です)

エクセル関数=複数条件付関数:野菜番号と名称を自動取得する方法

このQ&Aのポイント
  • エクセル関数を使用して、シート1の中で野菜かつ判定が○の場合の番号と名称をシート2に自動的に取得する方法を教えてください。
  • シート1には野菜の情報が記載されており、判定結果がマル(○)の場合に該当の番号と名称をシート2に取り込みたいです。
  • シート1のA列に野菜と入力し、D列が○の場合に、その番号と名称をシート2に自動的に表示する方法を教えてください。

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.4

>当てはまらない場合は空欄にしたいのですがどうしたらよろしいですか? 条件に当てはまらない場合とはどういう場合が不明ですが、 以下でどうでしょうか? Excel2003までの場合、またはExcel2003まででも開く可能性がある場合: =IF(ISNA(VLOOKUP(A1,Sheet1!B1:D3,2,FALSE)),"",VLOOKUP(A1,Sheet1!B1:D3,2,FALSE)) Excel2007以降のみの場合: =IFERROR(VLOOKUP(A1,Sheet1!B1:D3,2,FALSE),"")

その他の回答 (5)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

A列が野菜、D列が○の2つの条件で抽出するなら、数式は複雑になりますが、条件部分などに配列計算をしない、以下のような数式のほうが計算負荷が少ないかもしれません(Ctrl+Shift+Enterの操作の必要はありません)。 =INDEX(Sheet1!B:B,SMALL(INDEX(((Sheet1!$A$1:$A$100<>"野菜")+(Sheet1!$D$1:$D$100<>"○"))*1000+ROW($A$1:$A$100),),ROW(A1)))&"" データ数が多いなら、Aheet2のB列の式だけ上記の数式を入力し、以下のようにB列の値が空白なら空白を返す数式にしたほうが、さらに計算負荷を少なくすることができます。 (B列に上記の式で範囲を「Sheet1!C:C」に変更した数式を入力し、A列はそのセルの値を参照して配列計算を実行しない) =IF(B1="","",INDEX(Sheet1!B:B,SMALL(INDEX(((Sheet1!$A$1:$A$100<>"野菜")+(Sheet1!$D$1:$D$100<>"○"))*1000+ROW($A$1:$A$100),),ROW(A1))))

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

ご質問ではA列には必ずしも野菜が入力されていない場合もあるということですね。その場合には式もやや複雑になります。作業列を作って対応するのがよいでしょう。 シート1では2行目から下方にデータが入力されているとします。 E2セルには次の式を入力して下方にドラッグコピーします。 =IF(D2="","",IF(A2<>"",A2&D2&COUNTIF(E$1:E1,A2&D2&"*")+1,INDEX(A:A,MATCH("ー",A$1:A1))&D2&COUNTIF(E$1:E1,INDEX(A:A,MATCH("ー",A$1:A1))&D2&"*")+1)) *は半角英数モードでShiftキーを押しながら「け」のキーを押します。 "ー"ではーが半角英数モードではいけません。一旦式を入力した上で最後にひらがなモードでーを入力するのがよいでしょう。 お求めの表はシートに表示させることにしてシート1でA列で野菜とか使っていますので魚などのケースもあるのでしょう。それらを考慮してA1セルに野菜と入力し、×の選択もできるようにB1セルには○を入力します。その上でA2セルには次の式を入力してB2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(COUNTA($A$1:$B$1)<>2,"",IF(COUNTIF(Sheet1!$E:$E,$A$1&$B$1&ROW(A1))=0,"",INDEX(Sheet1!$B:$C,MATCH($A$1&$B$1&ROW(A1),Sheet1!$E:$E,0),COLUMN(A1)))) 勿論該当のデータが無ければエラーではなく空白の表示になります。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.3

>すいません、関数に含まれているコメジルシみたいな文字はなんでしょうか? *はアスタリスクです。「かつ」や「AND」の条件なので*を使用しています。 通常は数式では「かける」のとき使用します。 =2*3 とセルに入れると6となります。

bananaroad4363
質問者

補足

分かりました、シート2のB列の名称がはいるとこなのですが、野菜かつ○なら名称がはいるのですが、条件に当てはまらなかった場合にはエラーがはいるのですが、当てはまらない場合は空欄にしたいのですがどうしたらよろしいですか?条件に当てはまった場合は教えていただいたとおり名称がきます。 何度もすいません。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ムズカシイ数式の応用ができないようなら,前回にお話しした猿でもできる方法で。 シート1のE1に =IF(AND(A1="野菜",D1="○"),ROW(),"") と記入してリストの下端まで埋めておき, シート2のA1に =IF(ROW(A1)>MAX(Sheet1!E:E),"",INDEX(Sheet1!B:B,SMALL(Sheet1!E:E,ROW(A1)))) シート2のB1に =IF(ROW(A1)>MAX(Sheet1!E:E),"",INDEX(Sheet1!C:C,SMALL(Sheet1!E:E,ROW(A1)))) とそれぞれ記入して下向けにコピーして埋めておくとできます。 いずれの数式もCtrl+Shift+Enterはしない,ふつーのただの数式なので間違えないよう注意してください。 前回トラブっていた「実はセル結合してました」みたいな表でも,支障なく計算できます。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

B列の番号に重複がないなら、以下でできます。 シート2、A1 =IF(SUMPRODUCT((Sheet1!$D$1:$D100="○")*(Sheet1!$A$1:$A100="野菜"))<ROW(Sheet1!A1),"",INDEX(Sheet1!B$1:B$100,SMALL(IF((Sheet1!$D$1:$D100="○")*(Sheet1!$A$1:$A100="野菜"),ROW(Sheet1!$A$1:$A$100)),ROW(Sheet1!A1)))) シート2、B1 =IF(SUMPRODUCT((Sheet1!$D$1:$D100="○")*(Sheet1!$A$1:$A100="野菜"))<ROW(Sheet1!A1),"",VLOOKUP(A1,Sheet1!B1:D3,2,FALSE))

bananaroad4363
質問者

補足

有り難うございます。すいません、関数に含まれているコメジルシみたいな文字はなんでしょうか?

関連するQ&A