Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2021)
横方向に検索し、ヒットした複数セルについて指定行を抽出する方法
投稿日時: 22/11/14 13:56:01
投稿者: yusukyo0123

エクセルで作成した表について、横方向に検索し、該当した複数項目の名称を抽出したいのですが、うまくいきません。
INDEX MATCH関数を使用して1番目にヒットしたものは抽出できるのですが、条件に該当した全てのものを表示させるにはどうすればよいか教えてください。
 
表1イメージ
  A B C D
1   ● ● ●
2 ● ●    
 
↓ ●で検索して
 
表2イメージ
1 B C D
2 A B
 
表2のようなものを作成したいです。可能でしょうか。
 

回答
投稿日時: 22/11/14 14:13:03
投稿者: メジロ2

表2はイメージとして具体的なセル位置が書かれていないので
同じ行のF列以降に表示するとしました。
 
 F2: =IFERROR(INDEX($A$1:$D$1,AGGREGATE(15,6,COLUMN($A$1:$D$1)/($A2:$D2="●"),COLUMN(A1))),"")
 
必要数、右と下にコピーします。

回答
投稿日時: 22/11/14 14:38:54
投稿者: hatena
投稿者のウェブサイトに移動

Excel2021とのことなので、FILTER関数を使って、
F2セルに、

=FILTER($A$1:$D$1,A2:D2="●","")

下にコピーで。

回答
投稿日時: 22/11/14 15:13:26
投稿者: Mike

Sheet1
 A B C D
1  ● ● ●
2 ● ●
 
 
Sheet2
 A B C D
1 B C D
2 A B
 
Sheet2!A1:↓
=IFERROR(CHAR(SMALL(IF(Sheet1!$A1:$D1="●",COLUMN($A1:$D1)),COLUMN(A1))+64),"")
【お断わり】上式は必ず配列(CSE)数式として入力のこと

投稿日時: 22/11/15 10:50:34
投稿者: yusukyo0123

皆様、早々にご確認ありがとうございます。
私の伝え方が悪かったのでもう一度記載させてください。
 
シート1に以下のような表があります。
実際の名称タイトル列はW10〜GC13列まで、データは同列600行程です。
    判定 もも りんご みかん かき・・
製品あ 済  〇   〇   ―   〇・・
製品い    〇   ●   ●   ―・・
製品う    ―   〇   ●   ●・・
 
 
 
シート2には、判定済のものを除く、以下のような情報を抜き出したいです。
製品い  りんご みかん・・
製品う  みかん かき・・
 
このような操作は可能でしょうか?
 
 
 

回答
投稿日時: 22/11/15 11:27:14
投稿者: Mike

yusukyo0123 さんの引用:

私の伝え方が悪かったので…

実際の名称タイトル列はW10〜GC13列まで、データは同列600行程です。
    判定 もも りんご みかん かき・・
製品あ 済  〇   〇   ―   〇・・
製品い    〇   ●   ●   ―・・
製品う    ―   〇   ●   ●・・

また「伝え方が悪かった」などと仰らなくて済むように確認させてください。
左端列はU列?それとも左端列がW列?

投稿日時: 22/11/15 11:31:38
投稿者: yusukyo0123

Mikeさん、お手数おかけして申し訳ございません。
「判定」列がU列、「もも」から始まる抽出したいタイトル列がW列です。
よろしくお願いいたします。
 

回答
投稿日時: 22/11/15 11:33:26
投稿者: Suzu

ヒントは貰っています。それについて調べる様にしましょう。
 
FILTER 関数
https://support.microsoft.com/ja-jp/office/filter-%E9%96%A2%E6%95%B0-f4f7cb66-82eb-4767-8f7c-4877ad80c759
 
複数の条件を返すために使用されている FILTER
 
参考になりますよね。

回答
投稿日時: 22/11/15 12:11:00
投稿者: Mike

yusukyo0123 さんの引用:
「判定」列がU列、「もも」から始まる抽出したいタイトル列がW列です
であれば、製品名列がT列で、V列は空白列ですね?
実は、まだ悪戦苦闘しています。(*^_^*)

投稿日時: 22/11/15 13:01:50
投稿者: yusukyo0123

Suzuさん、Mikeさん
アドバイスありがとうございます。FILTER関数、トライしているのですが横方向に検索結果を出すことがなかなか上手くいかなくて・・
引き続き調べながらやってみます。
 
また表について色々省略して申し訳ございません。
本来の表はFからT列までが製品情報、U列が「判定」列です。V列は別のセル参照用で非表示列です。
「判定が済でなければ〜」はIF関数でできるのですが、その後全ての検索結果を横に表示させることに躓いています。

回答
投稿日時: 22/11/15 13:05:48
投稿者: hatena
投稿者のウェブサイトに移動

yusukyo0123 さんの引用:
実際の名称タイトル列はW10〜GC13列まで、データは同列600行程です。

タイトルは、10行目から13行目までの3行分あるということですか?

投稿日時: 22/11/15 13:11:32
投稿者: yusukyo0123

hatenaさん
ありがとうございます。ご理解のとおりです。結合セルを含むためタイトルとして3行になってしまっている状態です。ただし結果表示列は1行なので10行目のみ表示したいと考えています。

回答
投稿日時: 22/11/15 13:55:18
投稿者: hatena
投稿者のウェブサイトに移動

シート2のA1セルを起点に出力するとして、
  
A1セルに下記の式を設定。
  
=FILTER(シート1!T13:T613,シート1!U13:U613<>"済","")
 
  
B1セルに下記の式を設定。
  
=FILTER(シート1!$W$10:$GC$10,XLOOKUP(A1,シート1!$T$13:$T$613,シート1!$W$13:$GC$613,"")="●","")
これを下にコピー
  
以上でどうでしょう。

回答
投稿日時: 22/11/15 22:45:10
投稿者: んなっと

遊びの数式(修正しました)。
 
=LET(x,シート1!T10:GC700,y,FILTER(x,(INDEX(x,,1)<>"")*(INDEX(x,,2)<>"済")),z,BYROW(y,LAMBDA(r,TEXTJOIN("|",,INDEX(r,1),FILTER(INDEX(x,1,),r="●","")))),DROP(REDUCE("",z,LAMBDA(a,b,IFERROR(VSTACK(a,TEXTSPLIT(b,"|")),""))),1))

回答
投稿日時: 22/11/15 23:20:13
投稿者: んなっと

2021では使えないようですね。もう少し工夫してみます。
 

投稿日時: 22/11/16 09:41:20
投稿者: yusukyo0123

皆様ご教示ありがとうございます。
まだ成功できていないのですが、このようなアプローチがあると学びになります。
引き続き式の意味を調べながらやってみます。
 

回答
投稿日時: 22/11/16 11:35:48
投稿者: んなっと

ふう。
 
=LET(x,シート1!T10:GC700,y,FILTER(x,(INDEX(x,,1)<>"")*(INDEX(x,,2)<>"済")),d,CHAR(128),e,CHAR(127),s,LET(m,MATCH(y,INDEX(y,,1),0),"<c><d>"&d&SUBSTITUTE(TEXTJOIN(e&d,TRUE,IF(y="●",INDEX(x,1,),IF(ISNA(m),"",IF(m=1,y,"</d><d>"&y)))),d&"</d><d>","</d><d>"&d)&e&"</d></c>"),IFERROR(FILTERXML("<c>"&SUBSTITUTE(SUBSTITUTE(FILTERXML(s,"//d"),CHAR(128),"<e>"),CHAR(127),"</e>")&"</c>","//e["&SEQUENCE(1,100)&"]"),""))

投稿日時: 22/11/16 14:57:04
投稿者: yusukyo0123

んなっとさん
ありがとうございます!できる行もありました!
理解が追い付いていないので、式の意味を考えながら整理させてください。

回答
投稿日時: 22/11/16 15:02:55
投稿者: んなっと

ちょっとまってください。hatenaさんの方法がベストですよ。
わたしの式は大量データの前では無力です。

投稿日時: 22/11/17 14:18:38
投稿者: yusukyo0123

皆様たくさんのアイデアありがとうございました。関数の使い方について大変勉強になりました。
色々試してみましたが、スムーズにいかなかったので頂いたヒントを元に構成から見直してみます。
ありがとうございました。