![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.7ベストアンサー
- 回答日時:
こんばんは。
>17人の生徒がいる教室で、ランダムに生徒を当てて、当たった回数を記録し、平等に当てる
初心者で、VBAは習ったばかりでは、これが出来るのは、10人に1人がいいところではないでしょうか?
>当方VBAの勉強を始めたばかりでして、超初心者にわかりやすく説明していただけると非常に助かります。
勉強し始めたばかりで、いきなり、このようなものに手を出すのは、無理だと思います。
なるべく簡単なコードを書いてみましたが、私は、説明するのは苦手です。関数もいくつも入っていますから、なんとなくわかるかと思います。
丸々コードを出して云々という声もないわけではないのですが、こちらもあくまでも、人のためではなく、自分のための練習です。まあ、別の掲示板の何人かは、こちらが稼働チェック済みのコードを掲示しても、動かない、エラーが出ると言って、そのまま没にしてしまうくらいの人もいるのですから、これが分かれば、それで十分だと思います。これを参考にしようがしまいが、それは自由です。ただ、初心者であろうが、そうでなかろうが、マクロの数をこなすしか、上達の道はありません。数をこなしていくなかで、覚えていくもので、理屈では、覚えるものではありません。
'//
Sub RandomAverage()
Dim i As Long
Dim num As Long
Dim num2 As Long
'初期設定
If Range("D18").Value = "" Then
For i = 1 To 17
Cells(i, 1).Value = i
Next i
Range("D18").Formula = "=COUNT(R[-17]C:R[-1]C)"
Range("D19").Formula = "=SUM(R[-18]C:R[-2]C)/ROWS(R[-18]C:R[-2]C)"
End If
'17番目まで全部当てたら、更新する
num = WorksheetFunction.CountA(Range("D1:D17"))
num2 = WorksheetFunction.Count(Range("D1:D17"))
If Range("D18").Value Mod 17 = 0 And num2 - num = 0 Then
If Range("E1").Value <> "" Then
MsgBox "全部当て終わりましたので、データを移します。"
End If
For i = 1 To 17
Cells(i, 5).Value = Cells(i, 5).Value + Cells(i, 4).Value
Cells(i, 4).ClearContents
num = 0
Next i
Randomize
For i = 1 To 17
Cells(i, 2).Value = Rnd()
Cells(i, 3).Formula = "=RANK(RC[-1],R1C2:R17C2,1)"
Next i
End If
'次の番に'N'をつける
For i = 1 To 17
If Cells(i, 4).Value = "N" Then
Cells(i, 4).Value = 1
End If
If Cells(i, 3).Value = num + 1 Then
Cells(i, 4).Value = "N"
End If
Next i
If num2 < 16 Then
MsgBox "Nが、次の人です。" & vbCrLf & _
"D19の値が正数になるように目指しましょう!"
ElseIf num = 17 Then
MsgBox "次は、更新します。"
End If
End Sub
'///
![「VBA、最小値を取得し乱数を発生し最小値」の回答画像7](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/5/1138040_55a2823fe6d22/M.jpg)
No.6
- 回答日時:
ANo.5へのコメントについてです。
「ランダム」とは「統計的に偏りがない」という理想状態のことですが、お求めなのはそんなゲンミツな話ではなくて「次に当たる人がなるべく予想できない」程度のことじゃないんでしょうか。だとすれば、
「あいつまだn回しか当たってないのに何でオレはn+2回目?」という状況が生じてはならない。この条件のもとで可能な選択肢の中から、次に当たる人がなるべく予想できないように選ぶ。
ということですかね。
(VBAだろうが何だろうが)「何をやりたいか」を正確に記述するということが出来なければ、プログラミングは始まりません。「細かい事は常識で分かるんじゃない?」に頼ってるうちはプログラムは書けない。VBAを勉強する以前に身につけるべきことがある訳です。
さて、実務でお困りであってこのご質問が出たのだとすれば、「VBA」と仰る理由がよく分かりません。というのは、Excelのワークシート上だけでできるから。「n回目に誰を当てるか(n=1,2,…,17)」の予定表を作る(予定表を使い終わったら、(つまり全員が1度づつ当たったら)同じワークシートで次の17回分の予定表を作る)、というやりかたで充分でしょ。
一方、もしVBAの練習問題として取り組んでいらっしゃるんであれば、答を丸っぽ教わったってしょうがない。ご自分で作った(うまく行かない)プログラムを示した上で、どこがどうダメなのかを教わるべきです。
No.5
- 回答日時:
VBA云々以前に、「ランダム」「平等」ってどういう意味で仰ってるのか。
普通の意味でランダムに当てたら、「あいつまだ1回も当たってないのに何でオレは2回目?」ということが起こる確率は1に非常に近い。で、『「あいつまだ1回も当たってないのに何でオレは2回目?」が生じるようでは「平等」でない』のだとすると、「ランダム」と「平等」は両立できません。(逆に言えば、「あいつまだ1回も当たってないのに何でオレは2回目?」が生じないようにしながら16回当てれば、17回目に当てるべき生徒はひとりしか残っていない。だから、17回目にはランダム性が全くない。)
どういうことをやりたいのかを正確に仰らないとね。
ありがとうございます。
そうですね、書き方が悪かったです。
ランダムに当てるのですが、当たった回数の少ない人の中から先にランダムに当てて平等にするということなのです。
No.4
- 回答日時:
>名前の順番を変えずにできればうれしい
であればc1に「rank」とかいてc列を順位用列にし
c2に「=RANK(B2,B$2:B$18)」と記入したうえで、c2をc18までコピーしておきます。
そのうえで、さきほどのマクロを実行して、c列の1番から順番にさしていき
17番までさしたらまたランダムを実行する
・・・というながれが妥当でしょう。
なお万が一B列が見た目じゃまだというなら列の非表示にすれば済む話です。
ありがとうございます。
rank列を作成しました。
rankの列の当たった回数の少ない人から先に当てていくのに、メッセージボックスに回数の少ない人の中から一人選び出すことはできますか?
No.3
- 回答日時:
>VBAの記述を詳しく
まずa1にname、b1にsortとかいてヘッダ行とします
a2から順にa3,a4・・・と、x01,x02,x03・・・x17とします。
こうしてマクロとして
For i = 2 To 18
Cells(i, 2) = Rnd
Next
を記述して、実行すると、B列に0~1のランダムな数字がはいりますので
B列をつかってソートするとA列がランダムになります。
あとは上から順に当てていけばよいでしょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 2015年センター試験数学ⅠA データの分析 2 2023/01/22 14:15
- Excel(エクセル) ランダムで四択の問題を作る場合にvbaで何を学べばいいでしょうか。 1 2022/04/14 16:45
- Visual Basic(VBA) VBAのifで 4 2023/05/16 14:21
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- その他(学校・勉強) 優等生の生徒だけが叱られるなんて 3 2022/11/28 23:58
- 発達障害・ダウン症・自閉症 特別支援学級について。 発達障害を持つ子どもたちのためのクラス、いわゆる特別支援学級の生徒数が昔より 2 2023/04/02 20:05
- クラシック ピアノ教師について。 3 2022/07/02 23:51
- その他(学校・勉強) これなんて答えるんですか。小学校の算数ですかね? 変な()とか数字変じゃないですかね…。 問題1:( 5 2023/08/01 09:37
- 会社・職場 ある塾に転職しました。 その塾の年下の教室長に最初から気に入られなくて、教室長の授業中に明らかに自分 1 2022/03/30 13:11
- 統計学 風速を1秒刻みで推定する方法 6 2023/03/03 11:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラマーは誘惑にさらされ...
-
プログラミングの雑談がしたい...
-
paiza python03 ランクC獲得
-
Kotlin言語について。
-
マイクロソフトがvbを捨てたの...
-
インターフェースとトレイトっ...
-
python 機械学習 文字画像認識
-
プログラムについて。
-
Google ColaboでGUI作成
-
vba クリップボードクリアにつ...
-
大学のゼミのレポートがムカつ...
-
文系のSE志望です。プログラミ...
-
soucetreeでローカルのクローン...
-
Gitについて質問。 クローンし...
-
python3について。
-
プログラム言語について。
-
プログラマーがHTMLとCSSでウェ...
-
独自ドメインのHPを編集するに...
-
python3について。
-
ウェブサイトのアクセスログに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
テキストファイルの1行目のみを...
-
Google ColaboでGUI作成
-
Python... 環境設定 初心者です...
-
AIの登場でプログラマーたちが...
-
入力された文字列が、LD22000を...
-
ITパスポートの勉強をしていま...
-
プログラミングサイトについて。
-
バッチファイルが保存されてい...
-
VBSでテキストファイルの2行目...
-
40代後半でゼロからのプログラ...
-
{ CONTROL Forms.Label.1}が...
-
Version Control on Unity
-
過剰なオブジェクト指向脳から...
-
VBAでパワーシェルを実行したい...
-
ImageMagickでgif画像の一部が...
-
正規表現 URL抽出「 [\\/\\b]{0...
-
VBA 電話番号の正規表現について
-
そのまま使っただけなのに・・...
-
プログラム言語について。
おすすめ情報
当方VBAの勉強を始めたばかりでして、超初心者にわかりやすく説明していただけると非常に助かります。
VBAでお願いいたします。
この質問は特に女性の方に
リクエストされていません。間違えて押しました。