
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba 隣のセルに値がある行だけ関数をコピー&ペーストしたい A1 100001 A2 100002 1 2023/01/28 14:29
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) Excelの関数で可能でしょうか、日付や式の値の自動更新 4 2023/05/19 17:17
- Excel(エクセル) VBA SUM関数を入力したい 6 2022/08/20 20:10
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
- Excel(エクセル) エクセルの日報作成について 3 2023/07/05 12:49
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Excel(エクセル) エクセルの値を元に図形の色を変えたい 2 2022/05/11 01:37
- Excel(エクセル) Excelの関数についておしえてください。 3 2023/04/20 18:36
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
このQ&Aを見た人はこんなQ&Aも見ています
-
Excelで最頻値の次に多い数値を求める方法(配列数式、マクロを使わない)
Excel(エクセル)
-
最も多い文字列を検索するには
Visual Basic(VBA)
-
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
-
4
VBA:小数点以下の数字を取得できる関数は?
Visual Basic(VBA)
-
5
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
6
一番多く表示のある値(文字列)を、Excel関数で抽出したい
Excel(エクセル)
-
7
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
8
PDFファイルを分割するマクロの作り方を教えてください。
PDF
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
Segmentation Fault (メモリ制限?)
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
構造体配列の特定のメンバーをF...
-
C#で作成したdllをVBScriptで使...
-
DBから取得した値を配列へ代入する
-
VB6のメモリ解放に関して
-
エクセルでXY座標に並べられた...
-
複数のtextboxの処理を一括で行...
-
COBOLの基本的な事なので...
-
Redim とEraseの違いは?
-
レコードセットの中身を配列に...
-
mpiによる多次元配列の送受信
-
CheckBoxの配列化
-
VBAのワークシート関数で配列の...
-
EXCEL VBA 配列デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列の中の最大値とそのインデ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
複数のtextboxの処理を一括で行...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
CheckBoxの配列化
-
Excelのメモリ(配列)の上限は2G...
-
VB6のメモリ解放に関して
-
ReDim PreserveよりもReDimが遅い
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
コンボボックスのインデックス...
-
EXCELを使って、アクセスログを...
-
レコードセットの中身を配列に...
おすすめ情報