|
kata さん、IROCさん
こんにちは。
>はじめまして。VBAをはじめたばかりのものです。
>
>ところで、質問なんですが、例えば5行5列の全部で25個のデータがあるとします。
>
>このデータから同じデータが何個あるかって調べられるプログラムはどうやってVBAでプログラムを作成していけばよいのでしょうか?
>
>
>例えば、データの中に5が3個あるとかっていう意味です。
考え方は、IROCさんと同じですが、重複チェックをコレクションを使用しました。
A1〜E5にコード内でサンプルデータを作成しています。
結果は、H1、I1から表示です。
'=====================================================================
Sub main()
Dim ans() As Variant
Dim coc As Collection
Dim myarray() As Variant
Dim rng As Range
Set rng = Range("a1:e5")
With rng
.Formula = "=choose(int(rand()*7)+1,""a"",""b"",""c"",""d"",""e"",""f"",""g"")"
.Value = .Value
'↑A1:E5にサンプル作成
myarray() = .Value
End With
Set coc = mk_unique_collection(myarray())
ReDim ans(1 To coc.Count, 1 To 2)
For idx = 1 To coc.Count
ans(idx, 1) = coc.Item(idx) & "は、"
ans(idx, 2) = WorksheetFunction.CountIf(rng, coc.Item(idx))
Next
With Range("h1", Cells(coc.Count, 9))
.Value = ans()
.Sort key1:=Range("h1"), header:=xlNo
End With
End Sub
'========================================================================
Function mk_unique_collection(myarray())
'重複しないデータのコレクションを作成する
'input : myarray() チェックする配列
'output: mk_unique_collection :重複の無いコレクション
Dim myclct As New Collection
On Error Resume Next
For Each cval In myarray()
myclct.Add cval, CStr(cval)
Next
Set mk_unique_collection = myclct
Set myclct = Nothing
On Error GoTo 0
End Function
確認してみて下さい。
|
|