そのため、Excelでいくつかのデータを分析しようとしていますが、最も頻繁な数値を見つけるのに問題があります。寄付の数が不明な場所があります。例えば
- ブラントフォード$50.00
- ブラントフォード$25.00
- ブラントフォード$50.00
- ウィンザー$200.00
- ケベック$25.00
- ケベック$100.00
- ケベック$50.00
- ケベック$50.00
- ケベック$25.00
- ケベック$50.00
- ケベック$50.00
- ケベック$25.00
- ケベック$100.00
- ケベック$40.00
- ウィンザー$140.00
- ウィンザー$20.00
- ウィンザー$20.00
したがって、VBAを使用して、場所ごとにカウント、合計、平均、およびモードを見つける必要があります(VBAを介して実行する必要があり、高度なフィルター/ピボットテーブルを使用してこれを行う方法の説明を書くことはできません:()。
そのため、現在VBAを使用しているので、場所の名前をキーとして保存し、各寄付をコレクションに格納する辞書オブジェクトがあります。私がカウントしているコレクションのカウントを使用すると、平均値を使用して、合計のコレクションを簡単にループできます。しかし、モードを取得するための最も効率的な方法はわかりません。
Application.modeを使用してデータが配列内にある場合はそれを見つけることができますが、コレクションでは機能しないようです:(。モードを見つけるためにコレクションを配列に変換することは、実際には私にはわかりませんが最も効率的な解決策ですが、私が見つけることができる他のオプションは、コレクションを並べ替えてから、それらをループしてモードを見つけることです。
それで、コレクションの統計モードを見つける良い方法を誰かが知っているかどうか疑問に思いますか?
Dim locdata As Object
Set locdata = CreateObject("scripting.dictionary")
For counter = 2 To max
mykey = Cells(counter, loccol).value
If Not (locdata.exists(mykey)) Then
locdata.Add (mykey), New Collection
End If
locdata(mykey).Add (Cells(counter, donamountcol).value)
Next counter
For Each k In locdata.keys
locname = k
Cells(counter, 1) = k
Cells(counter, 2) = locdata(k).Count
donationtotal = 0
For Each donvalue In locdata(k)
donationtotal = donationtotal + donvalue
Next donvalue
Cells(counter, 3) = donationtotal
Cells(counter, 4) = donationtotal / CDbl(locdata(k).Count)
'Cells(counter, 5) = Application.mode(locdata(k)) doesn't work :(
counter = counter + 1
Next k
編集:理想的には、出力は次のようになります(例としてケベックを使用)ケベック:カウント:10合計:515平均:51.5モード:50