• ベストアンサー

countifを非表示と「*」に対応させたい

行を非表示にしてもcountifは集計してしまうので、集計しないように共通モジュールを作成するサイトはみました。 しかし、それでは「*」が使えず、私のやりたいことができません。 1行目:1,2,3 2行目:2,3 3行目:1,2,3,4 4行目:1,2 上記のデータで、2行目を非表示にして2を集計する共通モジュールがほしいです。 (上記の結果で3となるモジュール) エクセル素人のVBA素人の私にどうか知恵を貸して頂けないでしょうか。 大変申し訳ありません。 宜しくお願いします。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答No2です。 一つのセルに1,2,4などと入力されている場合ですね。 次のようなマクロになりますね。 Sub 行の非表示と集計() Dim i, n1, n2 As Integer Dim Syu1, Syu2, Syu3, Syu4 As Integer i = 0 Do i = i + 1 If Cells(i, 1) = "" Then Syu1 = WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(i, 2)), "*1*") Syu2 = WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(i, 2)), "*2*") Syu3 = WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(i, 2)), "*3*") Syu4 = WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(i, 2)), "*4*") MsgBox "A列で表示されているデータ1の数は" & Syu1 & "、データ2の数は" & Syu2 & "、データ3の数は" & Syu3 & "、データ4の数は" & Syu4 Exit Sub End If Loop Until Rows(i).Hidden = True n1 = i Do i = i + 1 Loop Until Rows(i).Hidden = False n2 = i - 1 Do i = i + 1 Loop Until Cells(i, 1) = "" Syu1 = WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(i, 2)), "*1*") - WorksheetFunction.CountIf(Range(Cells(n1, 1), Cells(n2, 2)), "*1*") Syu2 = WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(i, 2)), "*2*") - WorksheetFunction.CountIf(Range(Cells(n1, 1), Cells(n2, 2)), "*2*") Syu3 = WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(i, 2)), "*3*") - WorksheetFunction.CountIf(Range(Cells(n1, 1), Cells(n2, 2)), "*3*") Syu4 = WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(i, 2)), "*4*") - WorksheetFunction.CountIf(Range(Cells(n1, 1), Cells(n2, 2)), "*4*") MsgBox "A列で表示されているデータ1の数は" & Syu1 & "、データ2の数は" & Syu2 & "、データ3の数は" & Syu3 & "、データ4の数は" & Syu4 End Sub 上記はAおよびB列のデータを対象とした場合です。A列だけでしたらCells(i,2)をCells(i,1)に変更すればよいでしょう。

newzy
質問者

お礼

ありがとうございました! 助かりました。 今週すべて使ってだいぶ進みました。 暫定的に完成させ、なんとか会議の資料として使うものができました。 本当にありがとうございました。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

A列にデータが有るとして次のようなマクロを実行することで非表示を含めない集計ができます。 Sub 行の非表示と集計() Dim i, n1, n2 As Integer Dim Syukei As Long i = 0 Do i = i + 1 If Cells(i, 1) = "" Then Syukei = WorksheetFunction.Sum(Range(Cells(1, 1), Cells(i, 1))) MsgBox "A列で表示されているデータの集計は" & Syukei Exit Sub End If Loop Until Rows(i).Hidden = True n1 = i Do i = i + 1 Loop Until Rows(i).Hidden = False n2 = i - 1 Do i = i + 1 Loop Until Cells(i, 1) = "" Syukei = WorksheetFunction.Sum(Range(Cells(1, 1), Cells(i, 1))) - WorksheetFunction.Sum(Range(Cells(n1, 1), Cells(n2, 1))) MsgBox "A列で表示されているデータの集計は" & Syukei End Sub

newzy
質問者

お礼

こちらも参考にします。 ありがとうございました。

newzy
質問者

補足

すみません。私の説明が足りなかったようです。 データは1レコード1行で、データ自体は別シートに管理しています。 アンケート結果を集計する作業をしており、一つのセルに「複数回答可」の回答が複数あるイメージです。 下記のデータは一つのセルのデータで、複数列にデータはあります。 2行目を非表示にして下記を集計した場合、2の集計は3、3の集計は2、となるイメージで、2がいくつある、3がいくつあるとカウントすることが目的です。 1行目:1,2,3 2行目:2,3 3行目:1,2,3,4 4行目:1,2 すみません。 よろしくお願いします。

回答No.1

オジサンのようなビギナーにも判るように、説明、お願いし、ま~す! ココをミロ、ということ? http://hpcgi1.nifty.com/kenzo30/a_cbbs/cbbs.cgi?mode=al2&namber=54962&rev=&no=0&P=R&KLOG=275

newzy
質問者

お礼

参考にしました。 ありがとうございました。

関連するQ&A