• ベストアンサー

オートフィルタの選択肢数を数えたいのですが・・・

エクセルについて質問です。 オートフィルタを使用しますと、プルダウン式に 選択肢が一覧で出ますけれど、その数を数えるには どうしたらよいのでしょうか? 例えば出荷一覧を見る場合など、 出荷日でソートしてみるのですが、 その日に動いたのはいったい何アイテムなのか、 ということを知りたいのです。 プルダウンで出る候補をいちいち数えるしか 方法はないのでしょうか? どなたか、何とぞご教授ご指導のほど、よろしくお願いいたします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.2です。 すみません、質問の意図を誤って解釈していました。 私の知識では、オートフィルタを使用して重複を除いた個数を数える方法は思いつきませんでした。 ちょっとややこしいですがフィルタオプションを使用した以下の方法はいかがでしょうか。 A列に出荷日、C列にアイテムが入力されているとします。 A列のタイトルが「出荷日」となっていると場合、抽出条件としてD1に「出荷日」、D2にフィルタリングしたい出荷日を記入しておきます。 この状態で、A列全体とC列全体を選択して、「データ」>「フィルタ」>「フィルタオプションの設定」の画面で、「検索条件範囲」に$D$1:$D$2を指定し、「重複するレコードは無視する」にチェックを入れ、OKを押します。 こうすると、D2のセルで指定した条件の日付のアイテムが重複なしに表示されるので、下のステータスバーを見れば抽出件数がわかります。 ただ、条件を変える(抽出する日付を変える)には、いちいち「データ」>「フィルタ」>「すべて表示」で元の表示に戻して、検索値(今の例ではD2)の内容を変えて同じことを繰り返さないといけないので、ちょっと面倒です。一連の流れをマクロにすれば簡単かもしれません。 一応、今の例をマクロにしてみたら、以下のようになりました。ボタンを配置してマクロを実行できるようにしてみたら、比較的簡単に抽出ができると思います。 Sub 抽出() Range("A:A,C:C").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Range("D1:D2"), Unique:=True End Sub Sub 全て表示() ActiveSheet.ShowAllData End Sub

job38
質問者

お礼

ご親切にどうもありがとうございました。 マクロなどはまったくちんぷんかんぷんなのですが、 ご意見大変参考になりました。 有り難うございました。

その他の回答 (3)

noname#262398
noname#262398
回答No.4

空いている列を作業列として使用します(仮にH,I列)。 フィルタリングして、D列の重複を省いた個数を数えたいとします。 データが2行目からあるとして、 H2=SUBTOTAL(3,D$2:D2) 下へコピー。 I2=IF(AND(H2>0,H2<>H1),D2,NA()) 下へコピー。 個数=COUNT(1/(MATCH(I2:I1000,I2:I1000,0)=ROW(A1:A999))) 配列数式なので、Ctrl + Shift + Enter で確定。 ROW(A1:A999)の部分は実際のデータの行数に合わせてください。 (データが2~1000行目まであるとしたら、データの行数は999行、という意味です。)

job38
質問者

お礼

ご丁寧な回答真にありがとうございました。 関数の種類や意味は知りませんが、なんとなく おっしゃることは分かる気がします。 回答いただきました皆様、 本当にありがとうございました。 余談ですが、PCど素人の私(もちろん文系人間)は、 いわゆる「解」法が複数あることに大変驚いています。 中にはご自分で関数を組み合わせて、公式を 創り上げる人もいると聞きます。 いったい、皆さんはそういう関数を どこで学ばれるのでしょうね・・・・?

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

A列に出荷日が格納されているとすると、 =SUBTOTAL(2,A:A) とどこかのセルに入力すれば、フィルタリングされた個数が表示されます。 または列の中身が文字列で先頭行がタイトルの場合、 =SUBTOTAL(3,A:A)-1 でもよいでしょう。

job38
質問者

補足

ご回答ありがとうございます。 ただ、上記はもしかして、 「フィルタリングされた個数」と記載いただいていますが、それはエクセルの右下に表示される個数のことでしょうか? もしそうであれば、私が知りたいと申し上げているのは違いまして、「フィルタリングされた個数」の総数ではなく、その選択肢として表示されるリストの個数です(重複が省かれた個数)。 もしよろしければ、引き続きご教授いただければ幸いです。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

「オートフィルタの選択肢数=データの重複を省いた個数」で良いでしょうか データ範囲がA1:A100のときで、空白ななければ  =SUMPRODUCT(1/COUNTIF(A1:A100,A1:A100)) で求められます

job38
質問者

補足

さっそくのご回答ありがとうございました。 すいませんが、上記関数は複数のフィルタの条件下でも 有効なのでしょうか? 質問に書きましたが、例えば 過去の出荷記録(日時、得意先、納品先、アイテム、数量・・・)の「出荷実績一覧表」のようなものにおいて、 「○月分に動いたアイテム数をカウントしたい」という場合、 まずは日付の列で、「○月」というフィルターをかけて絞り込むかと思いますが、そのような条件下でアイテム数をカウントしたいという場合にも(空欄さえなければ)自動計算されるのでしょうか? または別に何か計算式を入れなければなりませんか? 恐れ入りますがご回答いただければ幸いです。

関連するQ&A