
No.2ベストアンサー
- 回答日時:
#1で伍指摘の通り、VBAで使えます。
A1:A10のデータ例
3
5
6
4
5
3
5
5
1
4
ーー
Sub test01()
MsgBox Application.WorksheetFunction.Mode(Range("A1:A10"))
End Sub
を標準モジュールに入れて実行してみてください。
えらーにならず 5 が表示されます。
ーーー
どうしてもプログラムで、なら
(1)データを配列に入れる
(2)配列データをソートし、配列に戻す。
(3)そのときまでの最大頻度数をもつ変数Mを設ける。
配列要素順に調べていって、配列で直前データと同じデータ(連)の数を調べ、連なりが切れたとき、今までの連なり(M)より、多ければ、Mを大きい方で置き換え、同じか少なければ、次に進む。
配列のデータの終わりまで行くと変数Mの値がNODEである。
この回答への補足
ありがとうございます。imogasiさんの回答の後半にあるように、"Mode"という言葉を使わず、それと同じ機能持つプログラムを完成させなくてはなりません。しつこくて申し訳ありませんが、後半部分をプログラムにするとどうなるか教えていただけないでしょうか?
補足日時:2007/10/07 14:26No.3
- 回答日時:
データ範囲がそれほど広くないなら
カウンタ用の配列とそのときまでのカウント最大値を記憶しておけば良いように思います
データ範囲が0から1000程度なら
Dim d(1000) as Integer, Max as integer, n as Iteger
dim v
' 仮の最頻値を0に設定
MAX = 0
' ワークシートからデータを取得
v = Range("A1:A4096").Value
for n = 1 to 4096
' データを使って カウンタ配列を更新
d(v(n,1)) = d(v(n,1)) + 1
' 更新されたデータと最頻値カウンタを比較
if d(v(n,1)) > d(Max) then
Max = v(n,1)
end if
next
' 結果出力
MsgBox Max
といった具合です
この回答への補足
redfox63さん、ありがとうございます。重ねて質問なのですが、データ範囲が1000ほどであるのに、ワークシートから得るデータは4096とかなり大きくても大丈夫なのでしょうか?ここも1000にするべきなのではないですか?
補足日時:2007/10/08 11:37No.1
- 回答日時:
EXCELに mode という関数があるのに
なぜ? 関数を作らないといけないの?
Dim aaa As Double
Dim bbb()
ReDim bbb(6)
bbb(1) = 5
bbb(2) = 3
bbb(3) = 5
bbb(4) = 5
bbb(5) = 7
bbb(6) = 5
aaa = Application.WorksheetFunction.Mode(bbb)
この回答への補足
回答ありがとうございます。EXCELにMODE関数が備わっていることは承知していますが、今回はVBAの演習の一環で「Mode」という言葉を使わないでMODE関数と同じ機能をもつプログラムを書きたいと思っています。言葉足らずでスミマセン。
補足日時:2007/10/07 14:12お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
VB6のメモリ解放に関して
-
VB.NETの配列の限界を教えてく...
-
エクセルでXY座標に並べられた...
-
Excel2010のinputboxで複数デー...
-
配列の中の最大値とそのインデ...
-
Variant型配列の文字コード変換
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
VBA: Select Caseを短くしたい
-
配列の要素がすべてカラかどう...
-
大量の変数を定義するにはどう...
-
.NET 文字コードの変換
-
OutOfMemoryExceptionの回避策...
-
RPG 配列宣言について
-
Excelマクロ:配列データからグ...
-
Imagelist の使い回しについて
-
VBAでMODE関数をつくる
-
クリスタルレポートで文字列の...
-
2つ目のレコードの値を取得す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
vba フィルター 複数条件 3つ以...
-
配列のペースト出力結果の書式...
-
OutOfMemoryExceptionの回避策...
-
配列の中の最大値とそのインデ...
-
複数のtextboxの処理を一括で行...
-
Dir関数で読み取り順を操作でき...
-
VB6からの移行したいけど、VB.N...
-
COBOLの基本的な事なので...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
EXCEL VBAの課題です
-
Redim とEraseの違いは?
-
VB.NETの配列にExcelから読み込...
-
VBAでMODE関数をつくる
-
VB.NETにて、構造体へデータを...
-
1ビットごとの配列を作りたい
-
VBAで配列引数を値渡しできない...
おすすめ情報