[[20150826153556]] 『データの中から月別に、重複を除いてカウントした』(えい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データの中から月別に、重複を除いてカウントしたい』(えい)

シート1に下記のデーターが1年分あるとします。
日付 ナンバー
1月2日 3
1月5日 2
1月5日 3
1月6日 4
1月7日 1
1月8日 3
2月1日 4
2月2日 1
2月6日 5
3月1日 6
3月2日 6

別の別のシートに
           1月 2月 3月 
なんばーの数   4  3  1
月別に重複を除いてカウントしたいのですが、よろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


	A	B	C	D	E	F
1	日付	ナンバー	1月	2月	3月
2	1月2日	3		4	3	1
3	1月5日	2				
4	1月5日	3				
5	1月6日	4				
6	1月7日	1				
7	1月8日	3				
8	2月1日	4				
9	2月2日	1				
10	2月6日	5				
11	3月1日	6				
12	3月2日	6				
13						

 D2 =SUMPRODUCT((MATCH(TEXT($A2:$A12,"m月")&-$B2:$B12,INDEX(TEXT($A2:$A12,"m月")&-$B2:$B12,0),0)=ROW(A2:A12)-1)*(TEXT($A2:$A12,"m月")=D1))
 
(GobGob) 2015/08/26(水) 16:29

 ↑ のレイアウトをお借りして(D1が1月)

 D2 =COUNT(1/FREQUENCY(IF(TEXT($A$2:$A$100,"m月")=D1,$B$2:$B$100),$B$2:$B$100))

 Ctrl+Shift+Enterで確定して右にコピー

 こんな感じかな。
(笑) 2015/08/26(水) 16:46

Sub main()
'データはシート「データ」上
'見出し(A1=日付、B1=ナンバー)
'ナンバーは0以上の整数であることが前提
    Dim cl As Range, dt() As Boolean, ctr(12) As Long, i As Integer, j As Integer, m As Long
    With Sheets("データ")
    m = Application.Max(.UsedRange.Columns(2).Cells)
    ReDim dt(12, m)
        For Each cl In .UsedRange.Columns(1).Cells
        dt(Val(Format(cl, "m")), Val(cl.Offset(, 1))) = True
        Next cl
            For i = 1 To 12
                For j = 0 To m
                If dt(i, j) = True Then ctr(i) = ctr(i) + 1
                Next j
            Next i
        For i = 1 To 12
        .Cells(1, 3 + i) = i & "月"
        .Cells(2, 3 + i) = ctr(i)
        Next i
    End With
End Sub
(mm) 2015/08/26(水) 17:03

一部微修正
Dim cl As Range, dt() As Boolean, ctr(12) As Long, i As Integer, j As Long, m As Long

(mm) 2015/08/26(水) 17:16


'for〜next冗長性解消
Sub main()
    Dim cl As Range, dt() As Boolean, ctr(12) As Long, i As Integer, j As Long, m As Integer
    With Sheets("データ")
    ReDim dt(12, Application.Max(.UsedRange.Columns(2).Cells))
        For Each cl In .UsedRange.Columns(1).Cells
        m = Val(Format(cl, "m"))
            If dt(m, Val(cl.Offset(, 1))) = False Then
            dt(m, Val(cl.Offset(, 1))) = True
            ctr(m) = ctr(m) + 1
            End If
        Next cl
        For i = 1 To 12
            .Cells(1, 3 + i) = i & "月"
            .Cells(2, 3 + i) = ctr(i)
        Next i
    End With
End Sub
(mm) 2015/08/26(水) 17:41

 > D2 =COUNT(1/FREQUENCY(IF(TEXT($A$2:$A$100,"m月")=D1,$B$2:$B$100),$B$2:$B$100))

 ないとは思うけど、B列にナンバーが入っているのにA列が空白、なんてことがあると
「1月」でカウントしてしまうので

 D2 =COUNT(1/FREQUENCY(IF(TEXT($A$2:$A$100,"m月;;")=D1,$B$2:$B$100),$B$2:$B$100))
                      ~~~~~
 Ctrl+Shift+Enterで確定してから右にコピー

 こうしておいた方が無難かな。
(笑) 2015/08/26(水) 18:33

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.