【´・ω・`】:それでは解説をしよう。まず、最初の1行・・・
%Tanni_Total = Cells(1, 1) !!書き込むべき単位数
Cells(1, 1) には=CountBlank(B2:F7)が入っている。よって
変数%Tanni_Total にはこれから、書き込むべき科目名が
いくつあるのかが格納される。
(●`ε´●):では2行目の・・・
%i = 2
・・・はなんだ?
【´・ω・`】:これは現在、何の科目名を書こうとしているのかを示す変数だ。
%i = 2は2行目、つまり科目名が英語であることを示している。
(●`ε´●):この後の・・・
Randomize(ThisTime()) !!乱数の発生
%X = Int(Rand() * 5) + 2
%Y = Int(Rand() * 6) + 2
・・・は?
【´・ω・`】:ランダムに%X、%Y座標を決める。そこに科目名を
書き込んでいくんだ・・・
%Tannisu = Cells(%i, 9) !!個々の科目の単位数
・・・%Tannisu には個々の科目の単位数を格納しておく。
%i=2 であるなら英語の単位数だ。
If Cells(%Y, %X) = "" Then !!科目名を書き込む
Cells(%Y, %X) = Cells(%i, 8)
%Count = %Count + 1
End If
さっき、ランダムに決められた%Y・%XをもとにしてCells(%Y, %X)が
空欄ならばそこに科目名を書き込んでいく。
(●`ε´●):%Count = %Count + 1 というのは?
【´・ω・`】:%Countにいくつ、おなじ科目名を書き込んだのかを
記憶させておく。
もしも%Count = %Tannisu 、つまり、
指定された単位数だけ科目名を書き込んだなら
%iを1増加させて次の科目の処理に移る。
(●`ε´●):変数%Limitの役割は?
【´・ω・`】:一つ一つの科目の単位数の合計だ。これが・・・
If %Limit = %Tanni_Total Then
Stop !!指定された単位数の合計分、
End If !!科目名を書き込んだら・・・%Tanni_Total 、つまり書き込むべき単位数に
達したら、処理を終了する・・・。
(●`ε´●):それを・・・
For %j = 1 To 1000 のループで1000回繰り返すというわけだな?
【´・ω・`】:うん、1000回もやれば、解が見つかるだろう・・・ということで
特に1000回でなくてもよい。
For %j = 1 To 1000
Randomize(ThisTime()) !!乱数の発生
%X = Int(Rand() * 5) + 2
%Y = Int(Rand() * 6) + 2
%Tannisu = Cells(%i, 9) !!個々の科目の単位数
If Cells(%Y, %X) = "" Then !!科目名を書き込む
Cells(%Y, %X) = Cells(%i, 8)
%Count = %Count + 1
End If
If %Count = %Tannisu Then !!科目の書き込みが指定の
%i = %i + 1 !!単位数になったら次の科目へ
%Limit = %Limit + %Count
If %Limit = %Tanni_Total Then
Stop !!指定された単位数の合計分、
End If !!科目名を書き込んだら終了
%Count = 0
End If
Next
コメント