【´・ω・`】:下が時間割自動作成プログラムⅡの核となる部分だ。
!!時間割自動作成プロトタイプⅡ
!!同じ日に同じ科目を入れない
!!時間割表を火・木の6限にそれぞれ総合・LHRを
!!先指定したままクリアー、
Range("B2:F6").Select()
Range("B7").Select(true)
Range("D7").Select(true)
Range("F7").Select(true)
Selections.Clear(1, false, false, false)
MsgBox("時間割を作ります")
!!ここから時間割作成
%空欄の数 = Cells(1, 1) !!書き込むべき単位数
%科目 = 2
For %試行回数 = 1 To 1000
Randomize(ThisTime()) !!乱数の発生
%列 = Int(Rand()* 5) + 2
%行 = Int(Rand() * 6) + 2
%該当科目の単位数 = Cells(%科目, 9) !!個々の科目の単位数
If Cells(%行, %列) = "" Then
!!同一科目の履修がなければ
!!科目名を書き込む
If Not 重複検査(%列,%科目) Then
Cells(%行, %列) = Cells(%科目, 8)
%書き込済み科目名 = %書き込済み科目名 + 1
End If
End If
!!科目の書き込みが指定の
!!単位数になったら次の科目へ
If %書き込済み科目名 = %該当科目の単位数 Then
%科目 =%科目 + 1
%書き込んだ単位数 = %書き込んだ単位数 + %書き込済み科目名
!!指定された単位数の合計分
!!科目名を書き込んだら終了、
If %書き込んだ単位数 = %空欄の数 Then
Stop
End If
%書き込済み科目名 = 0
End If
Next
MsgBox("ダメポ")
【´・ω・`】:時間割自動作成プログラムⅠと大きく違うのは
赤字の部分だ。
(●`ε´●):赤字の部分?
【´・ω・`】:うん、そこで重複検査(%列,%科目)を呼び出して
同じ列、つまり同じ曜日にに科目名が重複していないかを
検査して、重複していなければ時間割に科目名を書き込むように
している。
(●`ε´●):単純だな。では重複検査(%列,%科目)のコードは?
【´・ω・`】:それも単純なコードだ。次回、時間割自動作成(8)で
お見せしよう。
コメント