- ベストアンサー
[Excel2000]オートフィルタ後の種別件数
- Excel2000のオートフィルタ後の「データ種別件数」を取得する方法について教えてください。
- 現在、地域や店舗名、商品というデータがあり、それぞれの数をカウントしています。しかし、オートフィルタ後の「データ種別件数」をExcel関数のみで取得する方法がわかりません。
- VBAを利用せずにExcel2000でオートフィルタ後の「データ種別件数」を取得する方法があれば、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例示のレイアウトなら、B3セルに以下の式を入力して、Ctrl+Shift+Enterで確定して、右方向にオートフィルしてください。 =COUNT(1/((MATCH(IF(SUBTOTAL(3,INDIRECT("b"&ROW(10:50))),B$10:B$50,"XXX"),IF(SUBTOTAL(3,INDIRECT("b"&ROW(10:50))),B$10:B$50,""),0)=ROW($B$10:$B$50)-9))) 2つ目の質問ですが、フィルタ結果が「1」の時とは、B,C,D列のすべての列のフィルタ結果が1種類という意味でしょうか?
その他の回答 (1)
- end-u
- ベストアンサー率79% (496/625)
こんにちは。 取り敢えず叩き台として。 作業エリアを使えるなら比較的簡単にできそうです。 ただしカウント対象列全てに対して作業エリアが必要な案なので 大量データには向いてないかもしれません。 例えば F10セルに =SUBTOTAL(3,B10) '(表示フラグ的な使い方です) G10セルに =IF($F10,B10,"") 'G10:I19セルへコピー フィルタ抽出されていたらB:D列の各列データを引っ張ってくるようにしておけば 現状のSUMPRODUCT関数の参照先を変えるだけで良いかと思います。(作業列幅は非表示でも可) =SUMPRODUCT((G10:G19<>"")/COUNTIF(G10:G19,G10:G19&"")) 1件の時だけ該当データを表示させるなら、やはり表示フラグを見に行って B5セルに =IF(B3=1,INDEX(B10:B19,MATCH(1,$F10:$F19,0)),"") 'など。
お礼
end-uさん、ご回答ありがとうございます。 >作業エリアを使えるなら 私も作業エリアを利用する事を検討しておりました。 #2のMackyNo1さんが、作業エリアを利用しない方法を教えてくださいましたので、今回はそちらの方法で行きたいと思います。 しかしながら「作業エリア利用場合」をいざ一人で考えて実現しようとしても、どのようにしたら実現可能なのかわからなかったので、end-uさんの細分化された手法は大変勉強になりました。 この度は本当にありがとうございました!
お礼
MackyNo1さん、ご回答ありがとうございます。 正直「配列数式」と[Ctrl]+[Shift]+[Enter]のショートカットという存在をはじめて知りました。 私はWin95の頃からExcelに結構触れていて、多少の心得があると自負していたのですが、、、 「自分ってExcelの知識はまだまだなんだな。それにしても奥が深い・・・」 と率直に感じると同時に、出力された期待通りの結果に感動さえ覚えました。 本当にありがとうございます。 二つ目の質問についてですが、これは別にスレを立てようと思っていますので、そちらでご協力いただけたらと^^;;; あらかじめお伝えしておきますと 質問時に貼り付けた画像のデータに、「商品=いちご」でフィルタを行うと ・Bが1件(北) ・Cが2件(店舗Bと店舗D) ・Dが1件(いちご) となります。 このとき ・B5セル→「北」 ・C5セル→《ブランク》 ・D5セル→「いちご」 としたいのです。 ・・・と余計な事も言ってしまいましたが、、、 何はともあれ、この度は本当にありがとうございました!