OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

オートフィルタ使用時にCOUNTIFをSUBTOTALのように使いたい。

  • 困ってます
  • 質問No.110273
  • 閲覧数27970
  • ありがとう数26
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 86% (39/45)

エクセルのシートでデータ管理をしようと思います。
その時便利なのが、オートフィルタですが、

   SUBTOTAL関数「例:=SUBTOTAL(9,A1:A100)」

を設定した場合、フィルタを操作すると、必要な数値が返ってきます。ところがというか当然というか、

   COUNTIF関数「例=COUNTIF(B1:B100,"○")

ではだめですよね。どうにかして関連づける方法はないでしょうか。
または、その他に同様な効果が得られる方法はありませんか。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

回答がありませんね。
質問の意味は、
  例えば、101行目にSubtotalを置いていればフィルタをかけたときに選択されたものだけが集計される。
  しかしCountifのように条件付きの集計はできないので代替手段は?
ということでしょうか。

多分、Subtotalの集計方法はフィルタで絞られたものを対象にするので、さらにそれを絞り込むことは難しいと思います。

>その他に同様な効果が得られる方法はありませんか
ということなので、機能が無ければ作ればいいという事で下記のユーザー定義関数を書いてみました。
フィルタで絞る時は、該当しない行は自動的に非表示になるのでそれを利用しています。

使い方は、COUNTIF(B1:B100,"○") と同じようにsubtotal_countif(B1:B100,"○") とします。

標準モジュールに貼り付けます。
Public Function subtotal_countif(rgSelect As Range, moji As String)
  Dim rg As Range 'セル
  Dim cot As Long 'カウンタ

  For Each rg In rgSelect
    If Rows(rg.Row).Hidden = False Then '表示されている行だけ対象にする
      If rg = moji Then
        cot = cot + 1
      End If
    End If
  Next
  subtotal_countif = cot
End Function
お礼コメント
rondo

お礼率 86% (39/45)

ご丁寧かつ専門的な回答ありがとうございました。質問の内容が陳腐(?)で誰も相手にしてくれないのかと心配していました。(;_;)

エクセルを自己流で使っておりましたので、エクセルをドラエモンの4次元ポケットのように思いこんでいて、ついそのような質問を…。
しかし、nishi6さんの回答を見るともしかしてエクセルは…。

ところで、標準モジュールっていうことは、VBAですよね(!?)。参考書片手に頑張ってみます。結果はまた後で連絡します。



>質問の意味は、
  例えば、101行目にSubtotalを置いていればフィルタをかけたときに選択されたものだけが集計される。
  しかしCountifのように条件付きの集計はできないので代替手段は?
ということでしょうか。

その通りです。分かってもらってうれしいです。
投稿日時 - 2001-07-28 13:07:00
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル8

ベストアンサー率 58% (23/39)

B列に入る値が、○と空欄だけでしたら SUBTOTAL(3,B1:B100) で問題なしです。 B列に○以外にも文字が入る場合は、隣の列(例としてC列)などに非表示列を作って○だけ抜き出してはいかがでしょうか? そうすれば、上記と同様にSUBTOTAL(3,C1:C100)で対処できます。 非表示列を作るのが嫌な場合はマクロかな~ ...続きを読む
B列に入る値が、○と空欄だけでしたら
SUBTOTAL(3,B1:B100)
で問題なしです。

B列に○以外にも文字が入る場合は、隣の列(例としてC列)などに非表示列を作って○だけ抜き出してはいかがでしょうか?
そうすれば、上記と同様にSUBTOTAL(3,C1:C100)で対処できます。

非表示列を作るのが嫌な場合はマクロかな~
お礼コメント
rondo

お礼率 86% (39/45)

ありがとうございました。質問の内容が陳腐(?)で誰も相手にしてくれないのかと心配していました。(;_;)
早速試してみます。結果はまた後で連絡します。
投稿日時 - 2001-07-28 12:44:37

  • 回答No.3
レベル13

ベストアンサー率 68% (791/1163)

質問を理解するほうに気が行って、回答に手を抜いてしまいました。すいませんでした。 (1)シートのメニューから、ツール→マクロ→Visual Basic Editor でVBE画面に移ります。 (2)VBEメニューで、挿入→標準モジュールで標準モジュールを挿入します。 (3)そのコードウインドウ(現れた広い場所です)に下記コードをコピーし貼り付けます。 (4)ワークシートに戻り、COUNTIFを ...続きを読む
質問を理解するほうに気が行って、回答に手を抜いてしまいました。すいませんでした。

(1)シートのメニューから、ツール→マクロ→Visual Basic Editor でVBE画面に移ります。
(2)VBEメニューで、挿入→標準モジュールで標準モジュールを挿入します。
(3)そのコードウインドウ(現れた広い場所です)に下記コードをコピーし貼り付けます。
(4)ワークシートに戻り、COUNTIFを表示したかったセルに
  =subtotal_countif(B1:B100,"○")
と入力します。

>エクセルをドラエモンの4次元ポケットのように思いこんで・・・・

ワークシートの機能だけでもいろんなことが可能と思います。ただ、関数を組み合わせていったりすると、行入力のため分かりにくさが問題になります。それに、手順を複雑にしてしまうと、手順復元が困難になったり、’あの人しかできない処理’になったりしてしまいます。そのためにVBAを使ったりもしています。

『4次元ポケット的』という意味を『シート上のデータやExcelが扱えるのものに対して』すれば、VBAを使えば、どらえもんになれると思っています。自分は何をしたいかを、はっきりつかむことが大事でしょう。本もたくさんありますし、がんばって下さい。
お礼コメント
rondo

お礼率 86% (39/45)

手順まで示していただき大変ありがとうございます。
前回の答に基づきやってみました。(; ̄Д ̄) …で、できました!!
意味はよく分かりませんが、確かに私の意図したとおり関数が働きます。ありがとうございました。
投稿日時 - 2001-07-28 22:31:40
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ