回答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)に変更すればよいでしょう。
お礼
ありがとうございました! 助かりました。 今週すべて使ってだいぶ進みました。 暫定的に完成させ、なんとか会議の資料として使うものができました。 本当にありがとうございました。