「みんな教えて! 選手権!!」開催のお知らせ

別紙のような表があります。この表は2024年阪神競馬場で行われた、すべてのレースを、1レースを1行であらわしたものの一部で、CからKの列に、各レースの条件が記入されており、これに、Mから左の列に、ある特定の馬の着順が書いてあります。これにフィルターをかけた場合(例:H列で3Rを選び、J列で1200から1400を選んだ場合、N列での21行目から1000行目までの1の数の数量(Range("M13")、2の数の数量(Range("M14")、3の数の数量(Range("M15")を表す関数が知りたいのです。
ちなみに、フィルターをかけないときの、全体での数字は、Range("M2"),Range("M3"),Range("M4")に’=COUNTIF(M$21:M$656,1)、’=COUNTIF(M$21:M$656,2)、’=COUNTIF(M$21:M$656,1)で計算しています。この計算式では、フィルターをかけても数字は変わりません。
実際には、この表の他の列には様々な条件もあり、それらにもフィルターをかけた時の状況で、どのようなときにこれらの馬が入着するのかが知りたいのです。
よろしくお願いいたします。

「フィルターをかけた時の、別の列に書いてあ」の質問画像

A 回答 (3件)

No3です。



No2の補足にご提示の関数は何を求めているのかわかりませんけれど、No2の後半で示した「作業列」を設ける代わりに、配列計算で同様の計算を行って求めているものと思います。
手動でフィルターをかけたものに対して、非表示の行をそれぞれSUBTOTAL関数で判別するという、少々本末転倒のきらいはありますが・・

今回のご質問も同様の計算を行いたいのなら可能です。
今回のご質問内容は、そこまで複雑ではないので、AGGREGATE関数やエラー処理は不要と考えられます。

実際のレイアウトがどうなっているのか不明ですけれど、作業列を設けずに計算したいのなら、
=SUMPRODUCT(SUBTOTAL(102,OFFSET(基準セル,ROW(セル範囲1),0))*(セル範囲2=1))
といった式で求められると思われます。
(COUNTIFSではうまく配列計算を行えないので、No1に示したSUMPRODUCTによる方法になります)

最後の「セル範囲2=1」の部分の数字を1、2、3・・と変えれば、表示行のうちでその値になっているセル数をカウントできるようになります。
とは言っても、式の意味をご理解いただけないようですので、これ以上の説明は省略しておきます。
    • good
    • 0
この回答へのお礼

ありがとうございます。何度も申し訳ないです。
上記の式の方が、以前のものより、理解できそうな気もします。
頑張って研究してみます。
ホウン等にありがとうございました。

お礼日時:2024/10/31 01:59

No1です。



>SUBTOTAL関数を使いやってみましたが、集計方法において、
>1や2を指定する方法がわかりません。
SUBTOTAL関数にはCOUNTIFのような機能はありません。
手動でフィルターをかけるのなら、それもフィルターで抽出すれば良いだけの話です。
フィルターををかけずに抽出するのなら、No1の後半の方法で条件を指定してカウントすれば良いです。

どうしても、中途半端にフィルターをかけて、その結果を利用したいと言うのなら・・
作業列を利用して、作業列にSUBTOTAL関数でその行の表示/非表示を算出するようにしておいて、集計では作業列が表示となっている行だけを対象にするような仕組みにしておけば、COUNTIFS関数で算出できるでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
よく考えたら、以前fujillinさんから、
=IFERROR(SUMPRODUCT((AGGREGATE(15,7,B$20:B$120,ROW(OFFSET($A$1,0,0,SUBTOTAL(102,B$20:B$120))))=ROW(A1))*1),0)
の式を教えていただいていました。この式はその時試してみて、正しかったので別の表で使ったのですが、あまりに難しくて、理解できなかったため、忘れていました。
これを再利用するか、もしくは、フィルターをかけた状態で、一度表を値でコピーし、そのうえで、COUNIF関数で、1.2.3を別々に求めたいと思います。
何度も、ややこしい質問で、申し訳ありませんでした。
本当にありがとうございました。

お礼日時:2024/10/30 13:31

こんばんは



説明文とご提示の図が合致しているとは思えないので、はっきりとはわかりませんけれど・・

フィルターをかけた状態で、表示セル数などをカウントしたいのなら、SUBTOTL関数を利用することで可能です。
https://support.microsoft.com/ja-jp/office/subto …
第一引数を100番台にすれば非表示の行は対象外とされますので、COUNTやCOUNTAあるいはSUM(対象が1の場合なら合計でも良いので)などが利用できるでしょう。

フィルター操作を行わない状態で集計したいのなら、COUNTIFS関数を用いることで複数の条件に合致するセル数をカウントすることが可能です。
同様のことは、SUMPRODUCT関数を応用する方法でも可能です。
    • good
    • 1
この回答へのお礼

ありがとうございます。
SUBTOTAL関数を使いやってみましたが、集計方法において、1や2を指定する方法がわかりません。101から111を入れてやってみましたが、数値の入ったセルの合計数量は、102で出てくるのですが、これでは1や2が混じっていて、1だけの数量がわからないのです。また103では純粋に数値を合計した値で、これまた1の数量を計算したものとはなっていません。
K21~K1000の中で、フィルターをかけた時に出てくる1の数を関数で求めることはできないのでしょうか?マクロでやれば、できるのですが求める箇所が多すぎて,表も大きいため時間がかかりすぎるのです。
よろしくお願いいたします。

お礼日時:2024/10/30 00:37

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A