プロが教えるわが家の防犯対策術!

はじめまして!
エクセル初心者です。過去ログを検索してみたのですが、上手く見つけられなかったので質問します。

下記のようなデータがあります。

  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を入力してあるセルは非表示部分もカウントしてしまいます。)

A 回答 (4件)

#2>上の式をどうやって使えばいいのか


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

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

お礼日時:2006/05/27 18:50

行の非表示に変更・表示に変更を関数で捉えられません。


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を押すと戻りました。
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/05/27 18:52

可視セルを対象として実行する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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/27 16:51

自信はありませんが、


subtotal関数を使ってはいかがですか?

=SUBTOTAL(3,A1:A7)
=SUBTOTAL(3,B1:B7)とし、
A1で○をオートフィルターで選択し
且つ
B1で×をオートフィルターで選択すると

それぞれ表示されているカウントが出るはずですが、
やりたい事とちょっとずれてたらスイマセン・・
    • good
    • 3
この回答へのお礼

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

お礼日時:2006/05/27 11:53

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