| 
    
     |  | ▼hatena さん: こんばんは。
 
 >自分なりに頑張ってみましたが、うまく動きません。
 >A列 B列とカウントしたいときがあり、このように変えてみました。
 >っがうまく動きません。どのようにしたら、よろしいでしょうか?
 >また、今後、C列も増える予定に変更され、AとB列の組合せだけでなく
 >BとC列の組み合わせもありえるとのことで、変更箇所等を教えてください。
 なるほど・・・、サブプロシジャーにするのは賛成です。
 でも、これのインターフェースには悩みますね!!
 以下のようにしました。
 '================================================================
 Sub test1()
 Dim rng As Range
 Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp)) '*
 If rng.Row > 1 Then '*
 Call 集計(rng, 0) 'A列の集計
 end if
 End Sub
 '===============================================================
 Sub test2()
 Dim rng As Range
 Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp)) '*
 If rng.Row > 1 Then '*
 Call 集計(rng, 1) 'B列の集計
 end if
 End Sub
 '===============================================================
 Sub test3()
 Dim rng As Range
 Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp)) '*
 If rng.Row > 1 Then '*
 Call 集計(rng, 2) 'C列の集計
 end if
 End Sub
 '===============================================================
 Sub test4()
 Dim rng As Range
 Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp)) '*
 If rng.Row > 1 Then '*
 Call 集計(rng,0, 2) 'A列とC列の組合せ集計
 end if
 End Sub
 
 
 '=============================================================
 Sub 集計(基準セル範囲 As Range, ParamArray 比較列() As Variant)
 '基準セル範囲を基準に比較列として指定されたオフセット位置で集計を行う
 'Input--基準セル範囲:集計を行う基準になるセル範囲(列方向のセル範囲を指定する例-A1:A6)
 '    比較列:集計する列を基準セル範囲からのオフセット値で指定する
 ' 例1  セル範囲A2:A6を集計する
 '    call 集計(range("a1:a6"),0)
 '
 ' 例2  セル範囲b2:b6を集計する
 '    call 集計(range("a1:a6"),1)
 '  又は call 集計(range("b1:b6"),0)
 '
 ' 例3  セルA2:B6を集計する
 '    call 集計(range("a1:a6"),0,1)
 '
 ' 例4  セルA2:A6を基準セルとしてA列とC列で集計する
 '    call 集計(range("a1:a6"),0,2)
 Dim dic As Object
 Dim idx As Long
 Dim crng As Range
 Dim cnt As Long
 Dim keystr As String
 Dim s_tag As Variant
 Dim s_val As Variant
 ReDim compstr(0 To UBound(比較列()))
 Set dic = CreateObject("scripting.dictionary")
 With dic
 For Each crng In 基準セル範囲
 For idx = LBound(比較列()) To UBound(比較列())
 compstr(idx) = CStr(crng.Offset(0, 比較列(idx)).Value)
 Next
 keystr = Join(compstr(), "-")
 If .Exists(keystr) Then
 .Item(keystr) = .Item(keystr) + 1
 Else
 .Add keystr, 1
 End If
 Next
 cnt = .Count
 s_tag = Application.Transpose(.keys)
 s_val = Application.Transpose(.items)
 With 基準セル範囲
 .Offset(.Count + 1, 0).Resize(cnt, 1).Value = s_tag
 .Offset(.Count + 1, 1).Resize(cnt, 1).Value = s_val
 .Offset(.Count + 1, 0).Resize(cnt, 2).Sort _
 Key1:=.Offset(.Count + 1, 1), _
 Order1:=xlDescending, Header:=xlNo
 '↑ソートする
 End With
 End With
 Set dic = Nothing
 End Sub
 
 
 確認してみて下さい。
 
 |  |