プロが教えるわが家の防犯対策術!

sheet1にあるデータからsheet2へデータの抽出します
G列に「リンゴ」と「リンス」がある行を抽出したいと考えています

sheet2のG2に
=IF(ROW(G1)>COUNTIF(sheet1!$G$2:$G$247,"リンゴ"),"",INDEX(sheet1!G$1:G$247,SMALL(INDEX((sheet1!$G$2:$G$247<>"リンゴ")*1000+ROW(sheet1!$G$2:$G$247),),ROW(G1))))

の関数が入っており「リンゴ」のみは抽出できるのですが、これに「リンス」も含めて抽出するにはどこをどう変えればいいのでしょうか?
単純に、"リンゴ" → "リ*"でいけるかと思っていましたがエラーになりまして・・・

お知恵をお貸しください。
宜しくお願い致します。

質問者からの補足コメント

  • Excelのバージョンは2013です

      補足日時:2020/02/18 02:55
  • 早速のご回答ありがとうございます。
    #REF!になりまして…
    根本的に関数が違うのでしょうか…
    無知で申し訳ないです

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/02/18 03:19
  • 参照先は改変は一切しておりません。
    エラーが出た後、関数を"リンゴ"に戻すとちゃんと抽出されます…

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/02/18 03:36

A 回答 (6件)

こんにちは



私の環境ではあいまい検索(*)は効かないようですね。

>「リンゴ」と「リンス」がある行を抽出~~
とのことなので、仮にあいまい検索ができたとしても、「リ*」では「リンゴ飴」や「リゾット」などなども引っかかってしまいますね。
素直にOR検索で「リンゴ」、「リンス」を抽出した方が良いのではないでしょうか?

以下、ご参考までに。

実際のレイアウトがわからないため、ご提示の関数式からの推測になってしまうので、検証できていませんが、
=IFERROR(INDEX(Sheet1!G:G,AGGREGATE(15,6,ROW($G$2:$G$247)/((Sheet1!$G$2:$G$247="リンゴ")+(Sheet1!$G$2:$G$247="リンス")),ROW(A1))),"")
とかでできそうな気がします。

※ 条件が片方のみの場合(例えばリンゴのみ)ならリンスの方を削除して
=IFERROR(INDEX(Sheet1!G:G,AGGREGATE(15,6,ROW($G$2:$G$247)/(Sheet1!$G$2:$G$247="リンゴ"),ROW(A1))),"")
となります。
※ 他の条件を追加したい場合には、同じ要領で条件を増やしてゆくことも可能です。
    • good
    • 0
この回答へのお礼

>=IFERROR(INDEX(Sheet1!G:G,AGGREGATE(15,6,ROW($G$2:$G$2>47)/((Sheet1!$G$2:$G$247="リンゴ")+(Sheet1!$G$2:$G$247="リ>ンス")),ROW(A1))),"")
>とかでできそうな気がします。

素晴らしい!できました!
有難うございます!

お礼日時:2020/02/21 21:44

誰も覚えてないなら蒸し返すこともないんでしょうけど。



=IFERROR(INDEX(Sheet1!G:G,SMALL(INDEX(ISERR(SEARCH("リ*",Sheet1!G$2:G$247))*247+ROW($2:$247),0),ROW(G1)))&"","")
    • good
    • 0

比較演算子を使った式にはワイルドカードは使用できません。



フィルタオプションとかでは抽出できませんか?
    • good
    • 0
この回答へのお礼

ワイルドカードが使えない事を初めて知りました・・・ありがとうございます。
ただできるだけ自動化したいので、関数での作成を考えております

お礼日時:2020/02/21 19:56

横から済みません。

 
> sheet1にあるデータからsheet2へデータの抽出します
> G列に「リンゴ」と「リンス」がある行を抽出したいと考えています

具体的には、"何を"抽出"するのでしょうか。 リンゴ、リンスという文字列を表示させるだけ?でしょうか。

sheet1のF3、G8、H12に「リンゴ」の3文字がある場合、
sheet1の8行目の全体を、sheet2の1行目に表示するのでしょうか。
それとも、sheet2のG列のG1に「リンゴ」の3文字を表示したいのでしょうか。

sheet1のG8、G12に「リンゴ」の3文字、G3、G10、G15に「リンス」3文字がある場合、
sheet1の3行目、8行目、10行目、12行目、15行目の全体を、sheet2の1行目~5行目に表示するのでしょうか。
それとも、sheet2のG列のG1~G5に「リンス」「リンゴ」「リンス」「リンゴ」「リンス」の3文字を順に表示したいのでしょうか。

sheet1のデータを書き直すのと同時に、sheet2へ反映させたいのでしょうか。
それとも、あるタイミングで、sheet2に抽出できればそれでもイイのでしょうか。
後者でも良いのでしたら、関数で反映させるよりは、マクロで必要なデータをコピーさせた方が、考える上でも、あとのメンテや利用でも楽なように思います。
    • good
    • 0
この回答へのお礼

sheet1には「リンゴ」「リンス」の文字列はG列にしかありません

>sheet1のG8、G12に「リンゴ」の3文字、G3、G10、G15に「リンス」3文字>がある場合、
>sheet1の3行目、8行目、10行目、12行目、15行目の全体を、sheet2の1>行目~5行目に表示するのでしょうか。

まさにこうしたいです。

>sheet1のデータを書き直すのと同時に、sheet2へ反映させたいのでしょ>うか。
>それとも、あるタイミングで、sheet2に抽出できればそれでもイイので>しょうか。

日々異なるデータを張り付け→抽出したいので、書き出しと同時に抽出したいと考えてます。

お礼日時:2020/02/21 19:55

別の原因でそのエラーが出ていると思います。


そのエラーは参照をしくじっている場合に表示されるのです。

参照先の「セルを削除」したなんてことはありませんか。
この回答への補足あり
    • good
    • 0

ん?


普通にワイルドカード(*)でも動作するはずですけど?

どんなエラーになるんですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!