• ベストアンサー

○印がある場合、そこから情報を抽出して上から順に表示

添付の表にあるとおりA列の○印が条件で ○印のあるC列の社名をE列に上から詰めて表示させたいのですが、関数で解決したいと思っています。いい方法ありましたら教えてください。よろしくお願いします。

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

  • ベストアンサー
  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.4

「配列数式」の定義にもよりますが、 [普通にEnterして通る数式で]ということであれば、 E4セルを  =IF(ROW()-ROW(E$3)>COUNTIF(A$4:A$10,"○"),"",INDEX(C:C,1/LARGE(INDEX((A$4:A$10="○")/ROW(A$4:A$10),),ROW()-ROW(E$3)))) として下方にフィル。 もう一方の課題はともかく、 この程度であれば実務で使わなくもないと思います。 その場限りの使い捨て数式なら  =IF(ROW(A1)>COUNTIF(A$4:A$10,"○"),"",INDEX(C:C,1/LARGE(INDEX((A$4:A$10="○")/ROW(A$4:A$10),),ROW(A1)))) こんな書き方も。私は嫌いですけど。 ご参考まで。

rousanox
質問者

お礼

2件の質問に回答頂き、私の希望している数式で回答して頂きありがとうございます。 2件とも同じファイル内で使用することと、作業用シートも追加したため、両方とも作業用シートにより処理することにさせて頂きました。 当方の質問が面倒な内容であるにも関わらず、希望していた回答が頂けることをとてもありがたく感じています。 お礼が遅くなりましたが、また見かけたときもアドバイス頂ければありがたいです。

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

No2 merlionXXです。 > 可能であれば作業用の列や配列数式を使わずに1つの数式でできればありがたいです。 そんなものがあれば最初からそれを回答しています。 作業用の列や配列数式を使わないならあとはマクロしかないです。 やりたければ以下の手順でやってください。 1. そのようなことをしたいシートのタブを右クリック、[コードの表示]。 2. 出てきた白い所に、下記のコードを貼付けます。 '********これより下********** Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A4:A13")) Is Nothing Then Exit Sub Range("E4:E13").ClearContents n = 4 For i = 4 To 13 If Cells(i, "A") = "○" Then Cells(n, "E").Value = Cells(i, "A").Offset(, 2).Value n = n + 1 End If Next End Sub '********これより上********** 3. 右上の × でExcelの画面に戻ります。 これでA4~A13の中で○をつけたり消したりすればE4~E13に上から順に表示します。

rousanox
質問者

お礼

回答頂き、お礼遅くなりまして申し訳ありません。 当方がマクロを理解していないことを汲んで頂けたのかコピーペーストするだけで使えるように回答して頂きありがとうございます。 マクロも今後覚えたいと思っていますので、今回使用させて頂くには至りませんでしたが勉強になりました。 丁寧な回答ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

作業列を使う方法です。 仮にあいているD列を作業列にする場合 D4に =COUNTIF($A$4:A4,"○") と入れて下までコピーします。 次にE4に =IF(ISNA(MATCH(ROW(A1),$D$4:$D$13,0)),"",OFFSET($C$3,MATCH(ROW(A1),$D$4:$D$13,0),0)) と入れて下までコピーします。

rousanox
質問者

お礼

早速の回答ありがとうございます。 可能であれば作業用の列や配列数式を使わずに1つの数式でできればありがたいです。

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

E4のセルに以下のように数式バーに入力し、 CtrlキーとShiftキーを押しながら、Enterキーで確定します。 E4のセルの数式をE13までコピーします。 =IF(COUNTIF($A$4:$A$13,"○")>=ROW(A1),INDEX($D$1:$D$13,SMALL(IF($A$4:$A$13="○",ROW($A$4:$A$13),""),ROW(A1))),"")

rousanox
質問者

お礼

早速の回答ありがとうございます。 可能であれば作業用の列や配列数式を使わずに1つの数式でできればありがたいです。