ある数字(nb)に注目し、各行、各列にある候補の数を拡大matrix chainb に作成し、work area の chainc を使って、候補の数が少ない順に、行・列を並び替えた chainr matrix を作成しました。
room=3 は、関係するセルの数です。それ以上のものは関係なく取り除きます。新しく関係するセルだけを含む matrix jun を作成します。
'
Sub column_fish_judge()
Erase chainc
ReDim chainc(z + 1, z + 1)
chainr の最下行にある候補の数を調べて、room より多いのは省きます。
work area の chainc に借り置きします。
roomより少ない列がnumある。
num = 0
For j = 1 To z
aa = chainr(z + 1, j)
If aa = "" Or aa = 1 Then GoTo contj
If aa <= room Then
num = num + 1
For k = 0 To z + 1
chainc(k, num) = chainr(k, num)
Next k
End If
contj:
Next j
左端の列のタイトルを移す。
For i = 0 To z + 1
chainc(i, 0) = chainr(i, 0)
Next i
jun jnn matrix 登場。
Erase jun, jnn
ReDim jun(z + 1, z + 1), jnn(z + 1, z + 1)
先に作った絞り込み Matrix を jun に移す。
For i = 0 To z + 1
For j = 0 To z + 1
jun(i, j) = chainc(i, j)
Next j
Next i
絞り込んだ列の数(roomより少ない関係する列)を 左下のセル(z+1,0)=num
に書き込む。
num = 0
For j = 1 To z
If jun(z + 1, j) <> "" Then
num = num + 1
End If
Next j
chainc(z + 1, 0) = num
jun(z + 1, 0) = num
room国同盟に足りない場合はおさらば。
三国同盟をするのに二国しか該当しない。
If jun(z + 1, 0) < room Then
Exit Sub
End If
同様の絞り込みを行に対しても行う。
For i = 1 To z
inum = 0
For j = 1 To z
If jun(i, j) <> "" Then
inum = inum + 1
End If
Next j
jun(i, z + 1) = inum
chainc(i, z + 1) = inum
Next i
room に応じて次のマクロに分かれる。
Select Case room
Case 2
column_X_wing
Case 3
column_swordfish
Case 4
column_jellyfish
Case 5
column_squirmbag
Case Else
MsgBox ("This case available ! ")
End Select
0 件のコメント:
コメントを投稿