• ベストアンサー

(エクセル)オートフィルタ機能で表示部分のみの文字列をカウントしたい

はじめまして! エクセル初心者です。過去ログを検索してみたのですが、上手く見つけられなかったので質問します。 下記のようなデータがあります。   A1 B1 C1 D1 1 ○ × △ ▲ 2 × ▲ ▽ 3 ○ × ○ △ 4 ▽ × ○ △ 5 ○ ▲ ▽ 6 ▲ △ × 7 ○ △ × ▲ A1~D1にはオートフィルタをかけてあります。 A8にはCOUNTIF(a1:a7,"○") A9にはCOUNTIF(a1:a7,"▲") A10にはCOUNTIF(a1:a7,"△") A11にはCOUNTIF(a1:a7,"▽") A12にはCOUNTIF(a1:a7,"×") B8にはCOUNTIF(b1:b7,"○") B9にはCOUNTIF(b1:b7,"▲") ・・・・・とそれぞれ対応させいます。 例えば A1で○を選択したときに、A8の数字は4になるのですが、B列の×はA列の○に対応した2にしたいのですが 3になってしまいます。 表示部分のみの文字列カウントをする方法ありませんか? (countifを入力してあるセルは非表示部分もカウントしてしまいます。)

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#2>上の式をどうやって使えばいいのか エクセルのワークシート画面でALT+F11 を押す VBE画面になるので、 メニューの挿入から標準モジュールを選ぶ 標準モジュールでのコード入力画面になるので、 #2の回答の 切り取り線(?) より下の部分をコピーして貼り付ける ウィンドウの×ボタンを押してVBE画面を閉じる ワークシート画面で適当なセルで =COUNTIFonDISP(セル範囲, 条件) のようにして使う。(COUNTIF と用法は同じ) #3の方が仰るように Application.Volatile した方がいいかもしれません。(i は必要ないけど) もちろん関数名などは、自分の使いやすいように変更なさればよいです。 #2の利点は、内部的にCOUNTIF を呼び出しているので、 実質COUNTIF と同じであるということです。 (つまり、条件に"*○*" とか">10" とかが使えるということです)

midomonge
質問者

お礼

有難うございました。 出来ました!! こんなやり方があったんですね。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

行の非表示に変更・表示に変更を関数で捉えられません。 SUBTOTALはCOUNT関数に当たる第2引数のコードはあるが、COUNTIFに当たるコードがありません。 そのほかも非表示を特別扱いする関数は無いように記憶します。 それで、Hidden状態を判別できるVBAを使わざるを得ないでしょう。 #2のご回答とほぼ同じですが Public Function CntDisp(r As Range, cond As String) As Long Application.Volatile Dim count As Long Dim x As Range Dim i As Integer i = 0 For Each x In r If x.EntireRow.Hidden = False Then If x = cond Then count = count + 1 End If End If Next CntDisp = count End Function を出してみます。違いは (1)If x = "a" Then count = count + 1 End Ifの理解のやさしさ (2)Volatile  ただし http://www.moug.net/mmaga/back/066.htm のようなご注意も見つけました。 しかしf9(再計算)キーを押したときに差が出ました。 (3)しかし表示を再表示したとき、自動的には関数の結果出ている件数が戻りません。F9を押すと戻りました。

midomonge
質問者

お礼

#4の方のを参考にして出来ました。 有難うございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

可視セルを対象として実行するCOUNTIF を定義する 標準モジュールに貼り付け countif と同じように使う ---------------------------------------------------------------- Public Function CountIFonDisp(r As Range, cond As String) As Long Dim count As Long Dim x As Range For Each x In r If x.EntireRow.Hidden = False Then count = count + Application.WorksheetFunction.CountIf(x, cond) End If Next CountIFonDisp = count End Function

midomonge
質問者

お礼

有難うございます。 ですが上の式をどうやって使えばいいのか 分かりません。 教えて頂けると助かります。

回答No.1

自信はありませんが、 subtotal関数を使ってはいかがですか? =SUBTOTAL(3,A1:A7) =SUBTOTAL(3,B1:B7)とし、 A1で○をオートフィルターで選択し 且つ B1で×をオートフィルターで選択すると それぞれ表示されているカウントが出るはずですが、 やりたい事とちょっとずれてたらスイマセン・・

midomonge
質問者

お礼

有難うございます。 私も最初SUBTOTALを考えたのですが これを使うと、A8には検索前の段階で 全ての文字列の合計が表示されてしまうんですよね。 ○はいくつ、△はいくつ等個別にカウント検索前、検索後にそれぞれ表示したいのですが。

関連するQ&A

  • エクセルのオートフィルタでのデータ抽出&カウント

    エクセルのローデータでのオートフィルタでのデータ抽出&カウントで困っています。 A列にNo.、B列にデータB、C列にデータC、D列にデータDがあるとします。 それぞれの列に1~9までの数字があり、 それぞれの列、 データの一番下(正確には1行開けて)にはSUMやCOUNTIFなどの関数(計算式)が入っています。 で、これをフィルターにかけ抽出した際、この抽出したデータのみで計算の値を表示したいのですが、 やってみると 全データの計算の値で表示されてしまいます。 どうすればよいのでしょうか? 大変困っています。 よろしくお願いいたします。

  • 列に含まれる同じ文字列をカウントし、表示させる方法を教えてください。

    簡単な質問かもしれませんが、どうかお願い致します。  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11 11111  11 11111  11 11111  11 11121  11 11121  11 12111  12 13111  13 上記のような A列には5桁の数字 B列には2桁の数字 エクセルのデータがあるとして、 まず、A列で同じ数字をカウントし、  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11      11111  4 11111  11      11121  2 11111  11      12111  1 11111  11      13111  1 11121  11 11121  11 12111  12 13111  13 のように表示させたいのですが、どうしたらいいかわかりません。 データが膨大で数字がランダムな為、CountIfは使えないんだと思いますが、素人なので、詳しくはわかりません。 また、B列が何なのかと言いますと、A列の上2桁が入っています。 なぜ必要かなんですが、理由があります。 A列で5桁でカウントした個数が2以下の場合、5桁ではカウントせずに、2桁でカウントするという風にしたいのです。 しかも、5桁でカウントし、3以上だった数字については2桁ではカウントしない様にしたいんです。 要するに、最終的に  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11       11111  4    11   2 11111  11                  12   1 11111  11                  13   1 11111  11 11121  11 11121  11 12111  12 13111  13 のように表示させたいんです。 長々とすみません。 ご指導のほど、よろしくお願いいたします

  • エクセルで件数をカウントしたいが・・・

    エクセル2000で作った名簿があります。 A-日付(年間分)、B-名前、C-住所、D-金額の並びです。 月別に何区の人が何人かという統計を作りたいので、 まずオートフィルタでC:住所を選択しました。 次にCOUNTを使ってAやDの数字の入った列を選択したのですが、結果の数字がものすごく大きく、どうもオートフィルタで見えていないセルもカウントしているように見えます。 表示されてる部分だけのセルの数を数えるにはどうしたらよいでしょうか。 ちなみに、A列で(以前教わった)一月分オートフィルで出そうとしましたが、 ”「2002/5/1」以上「2002/5/31」以下”としてもこの場合できませんでした。 2列でオートフィルを使うのは初めてではないのですが・・・ ぜひ御回答よろしくお願いします。

  • オートフィルタ機能について教えてください。

    オートフィルタ機能はあくまでその列に入力した数字(数値)しか表せないのでしょうか? その列を空白にして、オートフィルタ機能をクリックしたとき数字が表示されてその数字を空白のセル内に入力したいのですが・・・。 可能ですか?

  • エクセル オートフィルタで摘出したデータだけをカウントしたい vba

    エクセルでオートフィルタして摘出したデータをカウントしたいのですその結果をVBAのメッセージボックスで表示させてたいです。 オートフィルタについては、シート上で自ら条件を出しますので、ただカウントだけしたいです。 カウントさせるセルはA列の10番から110番です。 データは数値です お忙しいところどなたかご教授ください

  • 「エクセル2000」オートフィルタに関しまして

    例えば・・・ ・A列に色々な数字が入力されているとします。 ・B列に色々な方のお名前が入力されているとします。 (B列のお名前は重複しているとします。) これにオートフィルタを設定します。 ここからがご質問なのですが・・・ 重複している名前をオートフィルタで 選び出します。そのときに、A列の数字合計を 表示させることは可能でしょうか? A列全体の数字合計ではなく、選び出した方のみの 合計を出す方法があれば、教えて頂きたいと思います。 分かりにくい質問で、大変申し訳ございませんが もしご存知の方がいらっしゃれば、お願い致します。

  • Excel2010重複しないカウントとフィルタ結果

    Excel2010で、重複しない文字をカウントしつつ、オートフィルターで 抽出をかけた時には表示したデータをカウントする関数を作成したいのですが うまくできません。 作成しているExcelの表には、オートフィルターが設定されています。 A列には複数名の人の名前が入っていて、名前には重複もあります。 オートフィルターでの抽出条件が指定されていない状態で A列の重複しない人数を下記数式で出しています。  =SUMPRODUCT(1/COUNTIF(A1:A100,A1:A100)) オートフィルターで、例えばA列で3人の名前を抽出した場合に、 上記数式が入っているセルに「3」と表示をさせたいのですが できますでしょうか? できれば作業列を使用することなく、ダイレクトに該当セルに算出できる方法が あれば知りたいです。 お分かりの方いらっしゃいましたらご教示頂けると助かります。 どうぞよろしくお願いいたします。

  • オートフィルタを見出し行選択で不要な列まで▼がつく

    初めて質問します。goo41と申します。 過去ログも検索してみたのですが、出てこなかったので、質問させて いただきます。よろしくお願いします。 要旨としては、見出し行を選択し、オートフィルタをかけると見出し のない部分まで「▼」が表示されてしまいます。 例)     A     B     C     D     E  ┌───┬───┬───┬───┬───┐ 1│名前▼│年令▼│住所▼│   ▼│   ▼│  ├───┼───┼───┼───┼───┤   注)テキスト表なので表示上はずれているかもしれません。    見難いですが列がそろっているものとして見て下さい。 この例では、1:1という行の選択をして、オートフィルタをかけた 場合、A~Cだけでなく不要な列(DとE)にまで「▼」がついてしま います。  ※D列とE列のすべてのセルにはデータは何も入力されていま   せん。ただし、該当の列のどれかに過去、データを入力した   ことはあります。既に消去済み。 オートフィルタをかけるときに、A1:C1を選択すれば不要な列に は「▼」はつかないのですが、複数のシートで汎用的なマクロを作成 したいと思っており、できれば、行選択→オートフィルタで、必要な 見出しのところだけに「▼」がつくようにしたいのです。 というのも自分だけで使うのであればよいのですが、人(初心者)に渡 す必要があるため、できれば不必要な表示は避けたいと考えているか らです。 DとE列をすべてクリアしてみたり、列削除してみたりしたのですが、 一度でも、その列のどこかのセルに入力した経緯があれば、必ずその 列までに「▼」がついてしまうのです…。 これはExcelのバグなんでしょうか? どなたか解決策がありましたら、よろしくお願いいたします。

  • EXCELのオートフィルタを使っても表示させたいセルがあります。

    こんにちは。 こんどエクセルで毎月の運転記録を作ろうと思っています。 日|運転者名|距離(km) Aの列が「日」 Bの列が「運手者」 Cの列が「距離」です。 毎月の合計距離数をSUMでC列の下の方に出しました。 そしてオートフィルタを使って運転者ごとの表にしたかったのですが、 オートフィルタを使うと合計距離数のセルも消えてしまいました。 そこでお尋ねしたいのですが、 オートフィルタを使っても、 この合計欄のセルを消さない方法はあるでしょうか? また、オートフィルタを使った時に運転者名が自動的に、 任意のセルかヘッダーに表示する方法があったら 併せて教えていただきたいのです。 よろしくお願いします。

  • excel 2003 オートフィルタ!

    excel 2003で、オートフィルタがうまくいきません。 A列の2行目から、1~5までの数字がランダムに並んでいるとします。 A1セルをオートフィルタし、 条件を、オプション>3を含む で指定すると、3がフィルタされてほしいのですが 1つも抽出されません。 3で始まるもだめでした・・ フィルタで抽出するマクロをくんでいて 列は、20列以上あり、 列によって、文字や数値があります。 フォームで列を選び、検索文字を入力して Criteria1:="=*" & 検索文字 & "*", Operator:=xlAnd と言う感じでフィルタしています。 文字はできますが、数値ができないのは、なぜでしょうか・・・

専門家に質問してみよう